Przekazywanie parametrów filtrów do GeoServer WFS przez URL?

17

Próbuję użyć funkcji CURL PHP do pobrania informacji geoJSON z instancji GeoServer. Robię to przy użyciu zmiennych adresu URL zamiast próbować zbudować pełne żądanie GetFeature xml.

Chciałbym jednak móc uzyskać podzbiór wyników na podstawie zawartości niektórych pól właściwości.

Tak więc, chociaż mogę uzyskać wszystkie wyniki za pomocą tego adresu URL:

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

czy mogę również ograniczyć wyniki do „Gdzie pole LIKE wartość” lub „field = wartość”?

Spędziłem godzinę przeszukując dokumentację Geoserver / ECQL i żadna z nich nie mówi wyraźnie „dołącz funkcje do swojego adresu URL w tym formacie”. W rezultacie nie jestem pewien, czy można użyć zmiennych adresu URL do wykonania tych zadań, ale niektórzy ludzie sugerują, że tak jest.

Czy ktoś może pomóc z wyraźnym przykładem działającego filtru używającego WFS GeoServera z parametrami URL?

Ambulare
źródło

Odpowiedzi:

25

Przypuszczam, że czytałeś ten http://docs.geoserver.org/latest/en/user/tutorials/cql/cql_tutorial.html

Oto kilka przykładowych żądań, które wysyłają zapytania do serwera demonstracyjnego Boundless, ale które powinny działać podobnie z własnym serwerem, jeśli masz zainstalowaną warstwę demonstracyjną topp: States.

Wybierz, gdzie STATE_NAME to Illinois

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'

Zwróć uwagę na użycie standardowego parametru WFS PROPERTYNAME, który jest tutaj używany do skracania danych wyjściowych. Zostaw nie ma, jeśli chcesz wszystkie atrybuty, lub napisz listę, aby wybrać niektóre atrybuty.

Następnie wybierz stany o nazwie zaczynającej się od „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'

Zauważ, że ciągiem porównania jest „I%”, ale przynajmniej w mojej przeglądarce (Firefox 31.0) musi być zakodowany w adresie URL i pojawia się „I% 25”. Nie jest to wspomniane w tutorialu CQL. Jeśli własne filtry zawiodą, może to oznaczać, że musisz zakodować adresy URL również inne znaki w filtrze.

Jeśli potrzebujesz geojson, dodaj & 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
użytkownik30184
źródło
10
Dla każdego, kto boryka się z tym problemem, możesz również dodać wiele filtrów CQL do adresu URL, używając formatu &CQL_FILTER=field=value AND field=value AND field=value- ale musisz zakodować adres URL „AND”, aby spacje były zakodowane. Mam nadzieję, że pomoże to zaoszczędzić komuś czas.
Ambulare
Bardzo przydatna odpowiedź, samouczek geoserver pomija tyle rzeczy. Jak rozszerzyłbyś zapytanie, aby zwrócić obiekt ze współrzędnymi XY? Czy wszystkie funkcje w obwiedni?
Luffydude,