场景:鼠标一个点,然后通过该点查询到该点位置叠加的要素
http://localhost:58080/gs/offices/wms?SERVICE=WMS&VERSION=1.1.1&
REQUEST=GetFeatureInfo&FORMAT=image%2Fpng&
TRANSPARENT=true&QUERY_LAYERS=traffic%3Asz_xzqh_polygon&
LAYERS=traffic%3Asz_xzqh_polygon&exceptions=application%2json&
INFO_FORMAT=application/json&FEATURE_COUNT=50&X=50&Y=50&
SRS=EPSG%3A4326&STYLES=&WIDTH=101&HEIGHT=101&
BBOX=114.08031463623048%2C22.40009307861328%2C114.14966583251955%2C22.469444274902344
关键是:
INFO_FORMAT=application/json
将结果输出设置为json
输入点 x,y,例如 114.114990234375,22.468444,
则组装出 bbox,
即bbox = x-0.0027,y-0.0027,x+0.0027,y+0.0027
然后把bbox塞到url即可。
上面的 0.0027
这个值可以自定义,可以尽量小一点,查询更精确
更详细说明,https://docs.geoserver.org/latest/en/user/services/wms/reference.html
http://localhost:58080/gs/wfs?service=wfs&version=1.1.0&
request=getfeature&
typename=traffic%3Asz_xzqh_polygon&
PROPERTYNAME=*&
CQL_FILTER=CONTAINS(geom,SRID=4326;POINT(113.98933%2022.59750))&
outputformat=application/json
关键参数:CQL_FILTER
这是一个查询条件,支持属性查询,例如 CQL_FILTER=name=‘南山’
查询 name 为 ‘南山’ 的要素。
CQL_FILTER 同时也支持空间查询,更详细查看官网https://docs.geoserver.org/stable/en/user/tutorials/cql/cql_tutorial.html
刚刚的URL,就是,当点击地图获取该点的经纬度,由该经纬度查询该点当前位置的要素。
其中:
CONTAINS(geom,SRID=4326;POINT(113.98933 22.59750))
CONTAINS是指空间查询函数,即 包含,例如一个点落在一个面上,则返回 true。如果知道postgis的空间查询函数,就更好理解些
CONTAINS的第一个参数是 geom,指向目标图层的几何图形,第二个参数则为我们需要输入的条件,注意格式为 wkt,并且SRID=4326这个不能少,否则可能出现查不出结果
另外,使用BBOX函数也可以,跟wms 一样,组装一个小框框出来。
BBOX(geom, x-0.0027,y-0.0027,x+0.0027,y+0.0027)
例如:
CQL_FILTER=BBOX(geom,114.09789741943361,22.464070223177117,114.09843741943361,22.464610223177118)
这时候bbox不一定起效果,需要再增加一个坐标系:
BBOX(geom, x-0.0027,y-0.0027,x+0.0027,y+0.0027, 'EPSG:4326' )
即最后增加 'EPSG:4326'