Filterparameter über URL an GeoServer WFS übergeben?

17

Ich versuche, die CURL-Funktion von PHP zu verwenden, um GeoJSON-Informationen von einer GeoServer-Instanz abzurufen. Ich verwende dazu URL-Variablen, anstatt zu versuchen, eine vollständige XML-GetFeature-Anforderung zu erstellen.

Ich möchte jedoch in der Lage sein, eine Teilmenge der Ergebnisse basierend auf einigen Inhalten der Eigenschaftsfelder abzurufen.

Also, während ich alle Ergebnisse mit dieser URL erhalten kann:

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

Kann ich die Ergebnisse auch auf "Where field LIKE value" oder "field = value" beschränken?

Ich habe eine Stunde lang die Geoserver / ECQL-Dokumentation durchgesehen und keine besagt eindeutig, dass "die Funktionen in diesem Format an Ihre URL angehängt werden". Infolgedessen ist mir nicht klar, ob es möglich ist, URL-Variablen zum Ausführen dieser Aufgaben zu verwenden, aber einige Leute scheinen dies zu vermuten.

Kann jemand mit einem klaren Beispiel eines funktionierenden Filters helfen, der GeoServers WFS mit URL-Parametern verwendet?

Ambulare
quelle

Antworten:

25

Ich nehme an, Sie haben diese http://docs.geoserver.org/latest/en/user/tutorials/cql/cql_tutorial.html gelesen

Hier kommen einige Beispielanfragen, die Anfragen an den Demo-Server von Boundless senden, die aber mit Ihrem eigenen Server ähnlich funktionieren sollten, wenn Sie den Demo-Layer topp: states installiert haben.

Wählen Sie aus, wo STATE_NAME Illinois ist

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'

Beachten Sie die Verwendung des Standard-WFS-Parameters PROPERTYNAME, der hier zur Verkürzung der Ausgabe verwendet wird. Lassen Sie diese Option aus, wenn Sie alle Attribute möchten, oder schreiben Sie eine Liste zur Auswahl einiger Attribute.

Dann Staaten mit Namen auswählen, die mit "I" beginnen

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'

Beachten Sie, dass die Vergleichszeichenfolge 'I%' ist, aber zumindest in meinem Browser (Firefox 31.0) muss sie URL-codiert sein und 'I% 25' lautet. Dies wird im CQL-Tutorial nicht erwähnt. Wenn Ihre eigenen Filter nicht funktionieren, müssen Sie möglicherweise auch andere Zeichen in Ihrem Filter URL-codieren.

Wenn Sie Geojson benötigen, fügen Sie & outputformat = application / json hinzu

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
user30184
quelle
10
Für alle anderen, die damit zu kämpfen haben, können Sie der URL auch mehrere CQL-Filter hinzufügen, indem Sie das Format verwenden. &CQL_FILTER=field=value AND field=value AND field=valueSie müssen jedoch das "UND" als URL codieren, damit die Leerzeichen codiert werden. Hoffe, dies hilft jemand anderem Zeit zu sparen.
Ambulare
Sehr nützliche Antwort, das Geoserver-Tutorial lässt einfach so viele Dinge weg. Wie würden Sie die Abfrage erweitern, um das Feature mit den XY-Koordinaten zurückzugeben? Oder alle Funktionen in einem Begrenzungsrahmen?
Luffydude