通過 geoserver 空間點查詢

場景:鼠標一個點,然後通過該點查詢到該點位置疊加的要素

方式一,wms 的getFeature

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

方式二: wfs cql_filter

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'

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章