Communication avec un service WFS dans un navigateur Web
La ressource en ligne de chaque opération prise en charge par un serveur WFS conforme est une adresse URL (Uniform Resource Locator) HTTP), donc un service WFS peut être considéré comme un service REST (Representational State Transfer)Representational State Transfer. Vous pouvez utiliser ces opérations par l'intermédiaire de paramètres URL afin d'obtenir des métadonnées de service, des informations sur le type d'entité et des entités codées à l'aide de GML depuis le service WFS. Ces opérations et paramètres sont décrits en détail dans les spécifications WMS de l'OGC.
Types de clients
Les services WFS peuvent être utilisés par tout client capable de lire des données WFS. Un navigateur Web constitue généralement le client le plus simple d'un service WFS. Les demandes WFS peuvent être émises via HTTP ; les réponses ou exceptions sont renvoyées par l'intermédiaire du navigateur. Tous les services WFS prennent en charge trois opérations : GetCapabilities, DescribeFeatureType et GetFeature.
De nombreux clients tiers permettent d'utiliser les services WFS. Pour utiliser les services WFS, le client doit prendre en charge la norme WFS 1.0.0 ou 1.1.0 et le profil GML d'entités simples. En outre, ArcGIS for Desktop peut fonctionner avec des WFS. Pour obtenir de l'aide sur l'utilisation des services WFS dans ArcMap, reportez-vous à la rubrique Procédure d'utilisation de WFS avec ArcGIS for Desktop.
Structure des URL WFS
Pour établir une connexion au service, vous devez connaître son URL, qui prend le format suivant :
http://gisserver.domain.com:6080/arcgis/services/<nom du dossier (le cas échéant)>/<nom du service>/<type de service>/WFSServer?
- le nom de serveur correspond au nom de votre serveur Web,
- le numéro de port est le port utilisé par votre serveur Web pour communiquer avec d'autres ordinateurs,
- le service peut être du type MapServer ou GeoDataServer, selon que vous avez créé le service WFS à partir d'une carte ou d'une géodatabase, respectivement.
Si, par exemple, vous avez activé la fonctionnalité WFS sur le service de carte WFSDemoService dans un dossier DemoFolder sur le serveur gisserver.domain.com au port 6080, l'URL serait la suivante :
http://gisserver.domain.com:6080/arcgis/services/DemoFolder/WFSDemoService/MapServer/WFSServer?request=GetCapabilities
De même, si vous avez activé la fonctionnalité WFS sur un service de géodonnées, l'URL serait la suivante :
http://gisserver.domain.com:6080/arcgis/services/DemoFolder/WFSDemoService/GeoDataServer/WFSServer?
Utilisation de filtres
Vous pouvez utiliser le paramètre Filtre dans WFS afin d'obtenir des entités spécifiques dans un service WFS. Le paramètre Filtre présente l'avantage de faire partie du codage standard de la combinaison mot-clé/valeur défini dans la section 9.5 de WFS 1.1 Implementation Specification et de pouvoir ainsi être ajouté à la fin des requêtes HTTP. Les services WFS se conforment à la spécification OpenGIS Filter Encoding Implementation (FE) version 1.1 de l'OGC.
Voici les filtres que vous pouvez appliquer :
Géométrie |
Spatial |
Logique |
Comparaison |
Tri |
---|---|---|---|---|
Enveloppe |
BBOX |
Et |
EqualTo |
SortBy* |
Point |
Egal à |
Ou |
NotEqualTo | |
Multi-points |
Disjoint |
Non |
LessThan | |
LineString |
Intersection |
GreaterThan | ||
Polygone |
Croise |
LessThanOrEqualTo | ||
Touche |
GreaterThanOrEqualTo | |||
Distance de recherche |
Comme | |||
Contient |
Entre | |||
Superpose |
NullCheck |
*Le filtre SortBy s'applique uniquement aux services WFS basés sur les données stockées dans une géodatabase ArcSDE.
Par exemple, si vous avez créé un FeatureType nommé BlockGroups dans un service WFS, vous pouvez demander les entités BlockGroup dans l'étendue -122.423192682619, 37.7877919206256, -122.421377806544, 37.7893634225143 en envoyant la requête GetFeature suivante :
http://gisserver.domain.com:6080/arcgis/services/playground/sanfrancisco_wfs/MapServer/WFSServer?service=WFS&request=GetFeature&version=1.1.0&typename=esri:blockgroups&Filter=<ogc:Filter><ogc:BBOX><ogc:PropertyName>Shape</ogc:PropertyName><gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326"><gml:coordinates>37.7877919206256,-122.423192682619 37.7893634225143,-122.421377806544</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter>
Pour demander une entité BlockGroup contenant dans une entité ponctuelle particulière, telle que 122.431577, 37.749936, vous pouvez envoyer la requête GetFeature suivante :
http://gisserver.domain.com:6080/arcgis/services/playground/sanfrancisco_wfs/MapServer/WFSServer?service=WFS&request=GetFeature&version=1.1.0&typename=esri:blockgroups&Filter=<ogc:Filter><ogc:Contains><ogc:PropertyName>Shape</ogc:PropertyName><gml:Point srsName="urn:x-ogc:def:crs:EPSG:4326"><gml:pos srsName="urn:x-ogc:def:crs:EPSG:4326">37.749936 -122.431577</gml:pos></gml:Point></ogc:Contains></ogc:Filter>
WFS requiert la présence des préfixes des espaces de noms concernés dans la chaîne XML de filtrage. En outre, pour éviter des conversions incorrectes par les navigateurs ou les serveurs Web, l'URL encode la chaîne XML de filtrage avant de l'envoyer au serveur.
Utilisation du service WFS dans un navigateur Web
Dans les exemples suivants, des paramètres URL sont utilisés pour communiquer avec un service WFS dans un navigateur Web.
GetCapabilities
Cette demande renvoie tous les types d'entités et les fonctionnalités disponibles à travers le service au format GML. Pour utiliser l'opération GetCapabilities, copiez et collez l'URL du service WFS dans la barre d'adresse et ajoutez ?request=getcapabilities à la fin de l'URL.
Exemple d'URL : http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=GetCapabilities
Le graphique suivant est un exemple des fonctionnalités renvoyées par l'opération GetCapabilities :
GetCapabilities renvoie également une liste de toutes les classes d'entités et tables disponibles :
DescribeFeatureType
Cette demande décrit les informations de champ concernant une ou plusieurs entités du service WFS. Cela inclut les noms de champs, les types de champs, les valeurs minimales et maximales autorisées dans les champs et toute autre contrainte définie dans un champ des classes d'entités ou tables.
Pour utiliser l'opération DescribeFeatureType, copiez et collez l'URL WFS dans la barre d'adresse et ajoutez ?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0 à la fin de l'URL. Cette demande renvoie toutes les informations de champ concernant chaque type d'entité et table disponible dans le service d'entités.
Exemple d'URL : http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0
Ajout de filtres
Vous pouvez également spécifier une seule classe d'entités ou table à propos de laquelle vous souhaitez obtenir des informations de champ en ajoutant la demande suivante à la fin de l'URL avec le nom du type d'entité ou de la table :
?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=<enter feature type here>&VERSION=1.1.0
Dans l'exemple ci-dessous, la demande DescribeFeatureType permet d'identifier les informations de champ pour le type d'entité des villes.
Exemple d'URL : http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=cities&VERSION=1.1.0
GetFeature
Cette demande renvoie des informations concernant des types d'entités spécifiques disponibles par l'intermédiaire du service WFS.
Pour utiliser l'opération GetFeature dans un navigateur Web, copiez et collez l'URL WFS dans la barre d'adresse et ajoutez ?request=getFeature&typename=<saisir le type d'entité ici> à la fin de l'URL. Cette demande renvoie toutes les informations d'attribut et de géométrie concernant chaque entité ou ligne dans le type d'entités.
Exemple d'URL : http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities
Ajout de filtres
Vous pouvez ajouter également des filtres dans la demande pour affiner les résultats renvoyés. Par exemple, vous pouvez demander toutes les villes qui se trouvent dans une plage de coordonnées spécifiée. Dans l'exemple ci-dessous, deux villes se trouvent dans une plage de coordonnées spécifiée.
Exemple d'URL : http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities&BBOX=46.90,-76.21,42.12,-72.88
Utilisation du paramètre FeatureID
Vous pouvez utiliser le paramètre FeatureID dans GetFeature afin de demander des entités spécifiques dans un service WFS. Le paramètre FeatureID est constitué du type d'entité et de l'identifiant de l'entité (gml:id), et non de l'OBJECTID de l'entité. Le format de l'identifiant d'une entité dans un service WFS est le suivant : <FeatureType>.< gml:id>. Pour identifier l'attribut gml:id d'une entité dans un service WFS, vous pouvez entre autres émettre une requête GetFeature sur le type d'entité concerné.
les attributs gml:id ne sont pas fournis pour les entités des services WFS basés sur un fichier de formes.
Supposons, par exemple, qu'il existe dans un service WFS un type d'entité nommé Cities. Si vous émettez une requête GetFeature pour Cities, la réponse comprend l'attribut gml:id de chaque entité.
Exemple d'URL : http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities
Dans cet exemple, l'identifiant d'entité de la ville de Vancouver serait cities.F293__1. La requête suivante permet de demander spécifiquement la ville de Vancouver à l'aide de l'identifiant d'entité :
http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&featureid=cities.F293__1