背景
最近在搞Geoserver的相关功能适配工作,其中遇到图层查询的操作,故记录一下。
注意:拼接查询参数时需要关注使用的服务版本,即请求参数version的值,如果版本用错有可能会报错或者出现虽然不报错但查不出任何东西的bug,典型例子时cql_filter,之前我version参数给错,导致无论怎么查返回都是空。
WFS地图服务请求
基础请求(不带过滤参数)
http://192.168.50.24:6060/geoserver/myspace/ows?service=WFS&request=GetFeature&version=1.1.0&outputFormat=application/json&TYPENAME=myspace:shijie
service:服务类型,可以是WMS\WFS等;request:请求类型,一般查询时用GetFeature;version:服务版本,具体支持版本查看自己的geoserver;outputFormat:查询输出的格式,一般用application/json,即json格式;TYPENAME:查询的图层名称,一般格式是:命名空间:图层名称
控制图形返回数量
//服务版本为2.0.0时,参数为count;服务版本更早的,参数为maxFeatures。
http://192.168.50.24:6060/geoserver/myspace/ows?service=WFS&request=GetFeature&version=1.1.0&outputFormat=application/json&TYPENAME=myspace:shijie&maxFeatures=1
如下图,实际上也是返回1个图形:
控制排序
参数为:sortBy
正向排序:
//sortBy=属性名
http://192.168.50.24:6060/geoserver/myspace/ows?service=WFS&request=GetFeature&version=1.1.0&outputFormat=application/json&TYPENAME=myspace:shijie&sortBy=市
倒序排序:
// sortBy=属性名+D
http://192.168.50.24:6060/geoserver/myspace/ows?service=WFS&request=GetFeature&version=1.1.0&outputFormat=application/json&TYPENAME=myspace:shijie&sortBy=市+D
未排序时:
正向排序(以属性-“市”来排序):
倒序排序:
选择性返回图形属性
使用参数:propertyName
// &propertyName=属性1,属性2,属性3
http://192.168.50.24:6060/geoserver/myspace/ows?service=WFS&request=GetFeature&version=1.1.0&outputFormat=application/json&TYPENAME=myspace:shijie&propertyName=市,市代码,geom
空间查询
固定视野框查询
使用参数bbox:
http://192.168.50.24:6060/geoserver/myspace/ows?service=WFS&request=GetFeature&version=1.1.0&outputFormat=application/json&TYPENAME=myspace:shijie&bbox=111,22,113,24,EPSG:4490
bbox赋值格式:xmin,ymin,xmax,ymax,EPSG:4490(我是这种格式能请求成功,如果不行可以将后面的EPSG:4490拆出来,放到额外的坐标参数那里)。bbox固定视野查询效果如下:
未过滤前:
bbox过滤后:
谓词查询
以INTERSECTS(相交)为例:
http://192.168.50.24:6060/geoserver/myspace/ows?service=WFS&request=GetFeature&version=1.0.0&outputFormat=application/json&TYPENAME=myspace:shijie&CQL_FILTER=INTERSECTS(geom,LINESTRING(109 22,120 22))
下图是图层与线段相交的返回结果
支持的关系谓词有:( 可参考这个帖子)
相交用的图形可以是点、线、面。格式是wkt字符串:
点:POINT(120 30)
线:LINESTRING(109 22,120 22)
面:POLYGON((120 30,120 31,121 31,121 30))(按逆时针或顺时针写坐标,且要首尾相接,即第一个点要跟最后一个点相同,示例里是三角形)
属性查询
精确查询
以“=”为例:
http://192.168.50.24:6060/geoserver/myspace/ows?service=WFS&request=GetFeature&version=1.0.0&outputFormat=application/json&TYPENAME=myspace:shijie&CQL_FILTER=shi='广州市'
返回结果:
模糊查询
情形一:in()
http://192.168.50.24:6060/geoserver/myspace/ows?service=WFS&request=GetFeature&version=1.0.0&outputFormat=application/json&TYPENAME=myspace:shijie&CQL_FILTER=shi in('广州市','梅州市')
返回结果:
情形二:like
需要注意的是,不能直接用%,否则会报错,需要改成%25才能正确查询
http://192.168.50.24:6060/geoserver/myspace/ows?service=WFS&request=GetFeature&version=1.0.0&outputFormat=application/json&TYPENAME=myspace:shijie&CQL_FILTER=shi like '%25州%25'
返回结果:
-------------------------------------------------------未完待续------------------------------------------