通过URL将过滤器参数传递给GeoServer WFS?


17

我正在尝试使用PHP的CURL函数从GeoServer实例中获取geoJSON信息。我这样做是使用url变量,而不是试图构造一个完整的xml GetFeature请求。

但是,我希望能够基于某些属性字段的内容来获得结果的子集。

因此,尽管我可以使用以下网址获得所有结果:

http://www.myURL.com/geoserver/namespace/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=layername&outputFormat=json&BBOX=1,2,3,4

我也可以将结果限制为“ Where field LIKE value”或“ field = value”吗?

我花了一个小时浏览Geoserver / ECQL文档,但没有一个明确指出“将功能以这种格式附加到您的URL”。结果,我不清楚是否可以使用url变量来执行这些任务,但是有些人似乎建议这样做。

任何人都可以使用带有URL参数的GeoServer的WFS提供有关工作过滤器的清晰示例的帮助吗?

Answers:


25

我想您已经在阅读此http://docs.geoserver.org/latest/en/user/tutorials/cql/cql_tutorial.html

这是一些示例请求,这些请求正在发送对Boundless演示服务器的查询,但是如果您安装了演示层topp:states,它们应该与您自己的服务器类似地工作。

选择STATE_NAME在伊利诺伊州的位置

http://demo.opengeo.org/geoserver/wfs?service=wfs&version=1.0.0&request=getfeature&typename=topp:states&PROPERTYNAME=STATE_NAME&CQL_FILTER=STATE_NAME='Illinois'

请注意,使用了标准的WFS参数PROPERTYNAME,此处将其用于缩短输出。如果您需要所有属性,或者写一个列表来选择某些属性,请假。

然后选择名称以“ I”开头的州

http://demo.opengeo.org/geoserver/wfs?service=wfs&version=1.0.0&request=getfeature&typename=topp:states&PROPERTYNAME=STATE_NAME&CQL_FILTER=STATE_NAME LIKE 'I%25'

请注意,比较字符串为'I%',但至少在我的浏览器(Firefox 31.0)中,它必须经过URL编码,并且带有'I%25'。CQL教程中未提及。如果您自己的过滤器失败,则可能意味着您还必须对过滤器中的其他字符进行URL编码。

如果需要geojson,请添加&outputformat = application / json

http://demo.opengeo.org/geoserver/wfs?service=wfs&version=1.0.0&request=getfeature&typename=topp:states&PROPERTYNAME=STATE_NAME&CQL_FILTER=STATE_NAME LIKE 'I%25'&outputformat=application/json

10
对于其他为此苦苦挣扎的人,您也可以使用以下格式将多个CQL过滤器添加到URL- &CQL_FILTER=field=value AND field=value AND field=value但需要对URL编码“ AND”,以便对空格进行编码。希望这有助于节省其他人的时间。
Ambulare 2014年

非常有用的答案,geoserver教程仅省去了很多事情。您将如何扩展查询以返回具有XY坐标的特征?还是边界框内的所有要素?
Luffydude
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.