Passer des paramètres de filtre à GeoServer WFS via URL?

17

J'essaie d'utiliser la fonction CURL de PHP pour récupérer des informations geoJSON à partir d'une instance GeoServer. Je fais cela en utilisant des variables d'URL plutôt qu'en essayant de construire une requête GetFeature xml complète.

Cependant, je voudrais pouvoir obtenir un sous-ensemble des résultats basés sur certains contenus des champs de propriété.

Ainsi, alors que je peux obtenir tous les résultats en utilisant cette 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

puis-je également limiter les résultats à "Où champ LIKE value" ou "field = value"?

J'ai passé une heure à parcourir la documentation Geoserver / ECQL et rien ne dit clairement "ajouter les fonctions à votre URL dans ce format". En conséquence, je ne sais pas s'il est possible d'utiliser des variables d'URL pour effectuer ces tâches, mais certaines personnes semblent suggérer que c'est le cas.

Quelqu'un peut-il m'aider avec un exemple clair d'un filtre de travail utilisant le WFS de GeoServer avec des paramètres URL?

Ambulare
la source

Réponses:

25

Je suppose que vous avez lu ce http://docs.geoserver.org/latest/en/user/tutorials/cql/cql_tutorial.html

Voici quelques exemples de demandes qui envoient des requêtes pour le serveur de démonstration de Boundless mais qui devraient fonctionner de la même manière avec votre propre serveur si vous avez topp de couche de démonstration: états installés.

Sélectionnez où STATE_NAME est l'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'

Notez l'utilisation du paramètre WFS standard PROPERTYNAME qui est utilisé ici pour raccourcir la sortie. Quittez si vous voulez tous les attributs ou écrivez une liste pour sélectionner certains attributs.

Sélectionnez ensuite les états dont le nom commence par «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'

Notez que la chaîne de comparaison est 'I%' mais au moins avec mon navigateur (Firefox 31.0) elle doit être encodée en URL et elle vient 'I% 25'. Cela n'est pas mentionné dans le didacticiel CQL. Si vos propres filtres échouent, cela peut signifier que vous devez également coder l'URL d'autres autres caractères dans votre filtre.

Si vous avez besoin de geojson, ajoutez & 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
user30184
la source
10
Pour toute autre personne aux prises avec cela, vous pouvez également ajouter plusieurs filtres CQL à l'URL en utilisant le format &CQL_FILTER=field=value AND field=value AND field=value- mais vous devez encoder l'URL en "ET" afin que les espaces soient encodés. J'espère que cela vous fera gagner du temps à quelqu'un d'autre.
Ambulare
Réponse très utile, le tutoriel geoserver laisse de côté tant de choses. Comment étendre la requête pour renvoyer l'entité qui a les coordonnées XY? Ou toutes les fonctionnalités à l'intérieur d'une boîte englobante?
Luffydude