Skip To Content

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). 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 de base 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 principales : GetCapabilities, DescribeFeatureType et GetFeature. La mise en œuvre d’ArcGIS Server de WFS 2.0.0 définit des opérations supplémentaires : GetFeatureByID, ListStoredQueries et DescribeStoredQueries.

De nombreux clients tiers permettent d’utiliser les services WFS. Pour utiliser les services WFS, le client doit être compatible avec WFS 1.0.0, 1.1.0, 2.0.0 et le profil Entités simples du langage GML. En outre, ArcGIS Pro peut fonctionner avec des services WFS. Pour obtenir de l’aide sur les services WFS d’ArcGIS Pro, reportez-vous à la rubrique Ajouter des services WFS.

Structure des URL WFS

Pour établir une connexion au service, vous devez connaître son URL, qui présente le format suivant :

http://gisserver.domain.com:6080/arcgis/services/<nom du dossier (le cas échéant)>/<nom du service>/MapServer/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,

Par exemple, si vous activez la fonctionnalité WFS sur le service de carte WFSDemoService dans un dossier nommé DemoFolder sur le serveur gisserver.domain.com sur le port 6080, l’URL GetCapabilities est la suivante :

http://gisserver.domain.com:6080/arcgis/services/DemoFolder/WFSDemoService/MapServer/WFSServer?service=WFS&request=GetCapabilities

Utiliser des 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 1.0.0 et 1.1.0 utilisent la spécification d’implémentation du codage par filtre OpenGIS OGC (FE), version 1.1.0. WFS 2.0.0 utilise la version 2.0.0 de la spécification de filtre.

Le tableau suivant dresse la liste des filtres que vous pouvez appliquer :

GéométrieSpatialLogiqueComparaisonTrier

Enveloppe

BBOX

Et

EqualTo

SortBy*

Point

Est égal à

Ou

NotEqualTo

Multi-points

Disjoint

Non

LessThan

LineString

Intersecte

GreaterThan

Polygone

Croise

LessThanOrEqualTo

Touche

GreaterThanOrEqualTo

Dans

Comme

Contient

Entre

Superpose

NullCheck

Remarque :

*Le filtre SortBy s’applique uniquement aux services WFS basés sur les données stockées dans une géodatabase d’entreprise.

Par exemple, si vous créez 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é blockgroups contenant 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>

Remarque :

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.

Utiliser un service WFS 1.0.0 ou 1.1.0 dans un navigateur Web

Dans les exemples suivants, des paramètres URL sont utilisés pour communiquer avec des services WFS et WFS-T 1.0.0 et 1.1.0 dans un navigateur Web. Pour découvrir comment utiliser les opérations WFS 2.0.0 dans un navigateur Web, consultez la section Utiliser un service WFS 2.0 dans un navigateur Web ci-dessous.

GetCapabilities

Cette requête renvoie tous les types d’entités et les fonctionnalités disponibles via 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 ?service=WFS&request=getcapabilities à la fin de l’URL. Consultez l’exemple ci-dessous :

http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&request=GetCapabilities

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 requête renvoie toutes les informations de champ concernant chaque type d’entité et table disponibles dans le service d’entités. Consultez l’exemple ci-dessous :

http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0

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=<saisir le type d’entité ici>

Dans l’exemple ci-dessous, la demande DescribeFeatureType permet d’identifier les informations de champ du type d’entité nommé continent :

http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=continent

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 ?service=WFS&version=1.1.0&request=GetFeature&typeName=<saisir le type d’entité ici> à la fin de l’URL. Cette requête renvoie toutes les informations d’attribut et de géométrie concernant chaque entité ou ligne du type d’entité. Consultez l’exemple ci-dessous :

http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&version=1.1.0&request=GetFeature&typeName=cities

Vous pouvez ajouter également des filtres dans la requête pour affiner les résultats obtenus. 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, trois villes se trouvent dans une plage de coordonnées spécifiée :

http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&version=1.1.0&request=GetFeature&typeName=cities&BBOX=46.90,-76.21,42.12,-72.88

Insertion

L’outil Insertion permet de créer des entités dans une seule requête de transaction. Par défaut, l’état initial d’une entité à créer est exprimé avec GML3 et doit être validé par rapport à un schéma d’application GML3 généré par l’opération DescribeFeatureType.

Dans l’exemple POST suivant, une entité ponctuelle représentant une ville est insérée :

<wfs:Transaction xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:esri="http://www.esri.com" version = "1.1.0" service="WFS">>
  <wfs:Insert>
    <esri:Cities>
      <esri:NAME>Tofino</esri:NAME>
      <esri:CAPITAL>N</esri:CAPITAL>
      <esri:PROV_NAME>British Columbia</esri:PROV_NAME>
      <esri:POPULATION>12345</esri:POPULATION>
      <esri:RepRowID>1000</esri:RepRowID>
      <esri:Shape>
        <gml:Point>
          <gml:coordinates>59.163182034 -133.844892907</gml:coordinates>
        </gml:Point>
      </esri:Shape>
    </esri:Cities>
  </wfs:Insert>
</wfs:Transaction>

Mettre à jour

L’outil Mettre à jour permet de mettre à jour une ou plusieurs entités (d’un seul type) dans une seule requête de transaction.

L’élément <Update> contient un ou plusieurs éléments <Property> qui indiquent le nom et la valeur de remplacement d’une propriété appartenant au type d’entité spécifié à l’aide de l’attribut obligatoire typeName. Un élément <Property> contient un élément <Name> qui renferme le nom de la propriété de l’entité à modifier et un élément facultatif <Value> qui renferme la valeur de remplacement de la propriété de l’entité nommée. L’omission de l’élément <Value> signifie que la propriété doit posséder une valeur Null. Dans le cas où cette propriété ne peut pas prendre la valeur Null, le WFS doit générer une exception indiquant que la valeur Null n’est pas autorisée.

Dans l’exemple POST suivant, une entité ponctuelle est mise à jour dans un jeu de données nommé cities :

<wfs:Transaction xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:esri="http://www.esri.com" version = "1.1.0" service="WFS">
  <wfs:Update typeName="esri:cities">
    <wfs:Property>
    <wfs:Name>POPULATION</wfs:Name>
    <wfs:Value>300000</wfs:Value>
  </wfs:Property>
  <ogc:Filter>
    <ogc:PropertyIsEqualTo>
      <ogc:PropertyName>NAME</ogc:PropertyName>
      <ogc:Literal>Halifax</ogc:Literal>
    </ogc:PropertyIsEqualTo>
  </ogc:Filter>
  </wfs:Update>
</wfs:Transaction>

Suppr

L’outil Supprimer permet de supprimer une ou plusieurs entités (d’un seul type) dans une seule requête de transaction. La suppression se définit par l’élément <Filter>. Dans le cas où l’élément <Filter> n’identifie aucune instance d’entité à supprimer, la requête de suppression est ignorée.

Dans l’exemple POST suivant, deux entités sont supprimées dans un jeu de données nommé cities :

<wfs:Transaction xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:esri="http://www.esri.com" version = "2.0.0" service="WFS">
  <wfs:Delete typeName="esri:cities">
    <ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>
        <ogc:PropertyIsEqualTo>
          <ogc:PropertyName>NAME</ogc:PropertyName>
          <ogc:Literal>Churchill</ogc:Literal>
        </ogc:PropertyIsEqualTo>
    </ogc:Filter>
  </wfs:Delete>
  <wfs:Delete typeName="esri:cities">
    <ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>
        <ogc:PropertyIsEqualTo>
          <ogc:PropertyName>NAME</ogc:PropertyName>
          <ogc:Literal>Montreal</ogc:Literal>
        </ogc:PropertyIsEqualTo>
    </ogc:Filter>
  </wfs:Delete>
</wfs:Transaction>

Utiliser un service WFS 2.0 dans un navigateur Web

La mise en œuvre ArcGIS Server de la spécification WFS 2.0.0 gère les fonctions requises du profil WFS de base, comme indiqué dans la spécification WFS 2.0. Ceci inclut les opérations GetCapabilities, DescribeFeatureType et GetFeature (décrites ci-dessus). L’implémentation WFS 2.0 prend également en charge les transactions, les requêtes stockées et l’appel de réponses qui ne font pas partie du profil WFS de base.

Transactions

L’opération de transaction permet de décrire les opérations de transformation des données appliquées aux instances d’entité d’un service WFS. Grâce à l’opération de transaction, les clients peuvent créer, modifier, remplacer et supprimer des entités du WFS. Lorsque la transaction est terminée, le WFS génère un document de réponse XML indiquant l’état d’achèvement de l’opération.

Requêtes stockées

Les requêtes stockées permettent le stockage de requêtes de filtre complexes par WFS 2.0 et leur exécution via une requête de base. Afin d’obtenir le même résultat avec WFS 1.0.0 ou 1.1.0, vous devez écrire un filtre à l’aide d’une spécification d’encodage de filtre et l’ajouter à l’URL WFS. La configuration de requêtes stockées offre les avantages suivants, qui élargissent l’utilisation de WFS 2.0 dans les applications :

  • Des requêtes complexes peuvent être rationalisées afin de pouvoir être exécutées en tant que requêtes HTTP GET.
  • Les requêtes stockées peuvent réduire les coûts de développement des applications, car elles peuvent être configurées pour prendre en charge des requêtes spécifiques au lieu de requêtes ad hoc complexes et d’expressions XPath.
  • Des interfaces RESTful peuvent être définies, outre le WFS, avec HTTP GET/POST et SOAP afin de permettre l’utilisation du WFS dans des applications clientes légères.

Les opérations suivantes sont disponibles pour prendre en charge les requêtes stockées : GetFeatureByID, ListStoredQueries et DescribeStoredQueries (décrites ci-dessus).

Création d’un fichier de requêtes stockées

Un fichier de requêtes stockées est un fichier .xml qui gère une liste de requêtes stockées créées par l’éditeur et pertinentes pour un service donné. Pour utiliser des requêtes stockées avec WFS 2.0, créez un fichier de requêtes stockées et configurez le service pour référencer l’URL de votre fichier de requêtes stockées.

Le fichier de requêtes stockées de l’exemple suivant fonctionne avec le service de carte SampleWorldCities inclus avec ArcGIS Server. Vous pouvez utiliser cet exemple pour modifier le fichier afin d’utiliser un service WFS différent.

<?xml version="1.0" encoding="utf-8" ?>
<wfs:StoredQueryList
  xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:wfs="http://www.opengis.net/wfs"
  xmlns:fes="http://www.opengis.net/fes/2.0"
  xmlns:gml="http://www.opengis.net/gml"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:myns="http://www.someserver.com/myns"
  xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd"
  service="WFS"
  version="2.0.0">

  <wfs:StoredQueryDefinition id="urn:StoredQueries:AttributeDemo">
    <wfs:Title>Attribute request</wfs:Title>
    <wfs:Abstract>test Attribute request</wfs:Abstract>
    <wfs:Parameter name="myrank" type="xsd:double"/>
    <wfs:QueryExpressionText
    returnFeatureTypes="myns:Cities"
    language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
    isPrivate="false">
      <wfs:Query typeName="myns:cities">
        <fes:Filter>
          <fes:PropertyIsEqualTo>
            <fes:Literal>POP_RANK</fes:Literal>
            <fes:Literal>${myrank}</fes:Literal>
          </fes:PropertyIsEqualTo>
        </fes:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>

  <wfs:StoredQueryDefinition id="urn:StoredQueries:SpatialDemo">
      <wfs:Title>Spatial request</wfs:Title>
      <wfs:Abstract>test Spatial Request</wfs:Abstract>
      <wfs:Parameter name="coordinates" type="xsd:string"/>
      <wfs:QueryExpressionText
      returnFeatureTypes="myns:Cities"
      language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
      isPrivate="false">
      <wfs:Query typeName='myns:Cities'>
        <ogc:Filter>
          <ogc:BBOX>
            <ogc:PropertyName>Shape</ogc:PropertyName>
            <gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326">
              <gml:coordinates>${coordinates}</gml:coordinates>
            </gml:Box>
          </ogc:BBOX>
        </ogc:Filter>
      </wfs:Query>
      </wfs:QueryExpressionText>
    </wfs:StoredQueryDefinition>    

  <wfs:StoredQueryDefinition id="urn:StoredQueries:SpatialAndAttributeDemo">
      <wfs:Title>Spatial and Attribute Request</wfs:Title>
      <wfs:Abstract>Select all cities with POP > 12000000 and BBOX (0,0,180,90)</wfs:Abstract>
      <wfs:QueryExpressionText
      returnFeatureTypes="myns:Cities"
      language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
      isPrivate="false">
      <wfs:Query typeName='myns:Cities'>
        <ogc:Filter>
          <fes:And>
            <ogc:BBOX>
              <ogc:PropertyName>Shape</ogc:PropertyName>
              <gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326">
                <gml:coordinates>0,0 90,180</gml:coordinates>
              </gml:Box>
            </ogc:BBOX>
            <fes:PropertyIsGreaterThan>
              <fes:Literal>POP</fes:Literal>
              <fes:Literal>12000000</fes:Literal>
            </fes:PropertyIsGreaterThan>
          </fes:And>
        </ogc:Filter>
      </wfs:Query>
      </wfs:QueryExpressionText>
    </wfs:StoredQueryDefinition>    

  <wfs:StoredQueryDefinition id="urn:StoredQueries:QueryCitiesByID">
    <wfs:Title>Select feature by ID</wfs:Title>
    <wfs:Abstract>test selecting feature by ID</wfs:Abstract>
    <wfs:QueryExpressionText
    returnFeatureTypes="myns:Cities"
    language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
    isPrivate="false">
      <wfs:Query typeName="myns:cities">
        <ogc:Filter>
          <ogc:PropertyIsEqualTo>
            <ogc:Literal>OBJECTID</ogc:Literal>
            <ogc:Literal>${ID}</ogc:Literal>
          </ogc:PropertyIsEqualTo>
        </ogc:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>

  <wfs:StoredQueryDefinition id="urn:ogc:def:query:OGC-WFS::GetFeatureById">
    <wfs:Title>urn:ogc:def:query:OGC-WFS::GetFeatureById predefined stored query</wfs:Title>
    <wfs:Abstract>This query support all layers in the map</wfs:Abstract>
    <wfs:QueryExpressionText
    returnFeatureTypes="myns:Cities,myns:Continent,myns:World"
    language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
    isPrivate="false">
      <!-- Cities -->
      <wfs:Query typeName="myns:Cities">
        <ogc:Filter>
          <ogc:PropertyIsEqualTo>
            <ogc:Literal>OBJECTID</ogc:Literal>
            <ogc:Literal>${ID}</ogc:Literal>
          </ogc:PropertyIsEqualTo>
        </ogc:Filter>
      </wfs:Query>
      <!-- Continent -->
      <wfs:Query typeName="myns:Continent">
        <ogc:Filter>
          <ogc:PropertyIsEqualTo>
            <ogc:Literal>OBJECTID</ogc:Literal>
            <ogc:Literal>${ID}</ogc:Literal>
          </ogc:PropertyIsEqualTo>
        </ogc:Filter>
      </wfs:Query>
      <!-- World -->
      <wfs:Query typeName="myns:World">
        <ogc:Filter>
          <ogc:PropertyIsEqualTo>
            <ogc:Literal>OBJECTID</ogc:Literal>
            <ogc:Literal>${ID}</ogc:Literal>
          </ogc:PropertyIsEqualTo>
        </ogc:Filter>
      </wfs:Query>
      <!-- -->
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>

  <wfs:StoredQueryDefinition id="urn:StoredQueries:FunctionCHAR_LENGTH">
    <wfs:Title>Function CHAR_LENGTH</wfs:Title>
    <wfs:Abstract>test Function CHAR_LENGTH</wfs:Abstract>
    <wfs:QueryExpressionText
    returnFeatureTypes="myns:Cities"
    language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
    isPrivate="false">
      <wfs:Query typeName="myns:cities">
        <fes:Filter>
          <fes:PropertyIsEqualTo>
            <fes:Function name="CHAR_LENGTH">
              <fes:Literal>CITY_NAME</fes:Literal>
            </fes:Function>
            <fes:Literal>2</fes:Literal>
          </fes:PropertyIsEqualTo>
        </fes:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>
  <wfs:StoredQueryDefinition id="urn:StoredQueries:FunctionSUBSTRING">
    <wfs:Title>Function CHAR_LENGTH</wfs:Title>
    <wfs:Abstract>test Function CHAR_LENGTH</wfs:Abstract>
    <wfs:QueryExpressionText>
      <wfs:Query typeName="myns:cities">
        <fes:Filter>
          <fes:PropertyIsEqualTo>
            <fes:Function name="SUBSTRING">
              <fes:Literal>CITY_NAME</fes:Literal>
              <fes:Literal>2</fes:Literal>
              <fes:Literal>3</fes:Literal>
            </fes:Function>
            <fes:Literal>os</fes:Literal>
          </fes:PropertyIsEqualTo>
        </fes:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>
  <wfs:StoredQueryDefinition id="urn:StoredQueries:MyStoredQuery">
    <wfs:Title>MyStoredQuery</wfs:Title>
    <wfs:Abstract>some tested MyStoredQuery</wfs:Abstract>
    <wfs:Parameter name="AreaOfInterest" type="gml:PolygonPropertyType"/>
    <wfs:QueryExpressionText
    returnFeatureTypes="myns:Parks myns:Lakes myns:Rivers"
    language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
    isPrivate="false">
      <wfs:Query typeName="myns:cities">
        <ogc:Filter>
          <ogc:Within>
            <ogc:ValueReference>Shape</ogc:ValueReference>
            ${AreaOfInterest}
          </ogc:Within>
        </ogc:Filter>
      </wfs:Query>
      <wfs:Query typeName="myns:cities">
        <ogc:Filter>
          <ogc:PropertyIsEqualTo>
            <ogc:Literal>POP_RANK</ogc:Literal>
            <ogc:Literal>3</ogc:Literal>
          </ogc:PropertyIsEqualTo>
        </ogc:Filter>
      </wfs:Query>
      <wfs:Query typeNames="myns:Parks">
        <fes:Filter>
          <fes:Within>
            <fes:ValueReference>geometry</fes:ValueReference>
            ${AreaOfInterest}
          </fes:Within>
        </fes:Filter>
      </wfs:Query>
      <wfs:Query typeNames="myns:Lakes">
        <fes:Filter>
          <fes:Within>
            <fes:ValueReference>region</fes:ValueReference>
            ${AreaOfInterest}
          </fes:Within>
        </fes:Filter>
      </wfs:Query>
      <wfs:Query typeNames="myns:Rivers">
        <fes:Filter>
          <fes:Within>
            <fes:ValueReference>region</fes:ValueReference>
            ${AreaOfInterest}
          </fes:Within>
        </fes:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>

  <wfs:StoredQueryDefinition id="urn:StoredQueries:FeaturesInPolygon">
      <wfs:Title>Features In Polygon</wfs:Title>
      <wfs:Abstract>Find all the features in a Polygon.</wfs:Abstract>
      <wfs:Parameter name="AreaOfInterest" type="gml:PolygonPropertyType"/>
      <wfs:QueryExpressionText
      returnFeatureTypes="myns:Parks myns:Lakes myns:Rivers"
      language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
      isPrivate="false">
        <wfs:Query typeNames="myns:Parks">
          <fes:Filter>
            <fes:Within>
              <fes:ValueReference>geometry</fes:ValueReference>
              ${AreaOfInterest}
            </fes:Within>
          </fes:Filter>
        </wfs:Query>
        <wfs:Query typeNames="myns:Lakes">
          <fes:Filter>
            <fes:Within>
              <fes:ValueReference>region</fes:ValueReference>
              ${AreaOfInterest}
            </fes:Within>
          </fes:Filter>
        </wfs:Query>
        <wfs:Query typeNames="myns:Rivers">
          <fes:Filter>
            <fes:Within>
              <fes:ValueReference>region</fes:ValueReference>
              ${AreaOfInterest}
            </fes:Within>
          </fes:Filter>
        </wfs:Query>
      </wfs:QueryExpressionText>
    </wfs:StoredQueryDefinition>    
  </wfs:StoredQueryList>

GetFeatureByID

L’opération GetFeatureByID accepte un seul argument, nommé id et de type xsd:string, et renvoie une entité unique dont l’identifiant est égal à la valeur spécifiée de l’argument id.

L’exemple d’URL suivant appelle la requête stockée GetFeatureByID pour récupérer et afficher une entité unique :

http://gisserver.domain.com/arcgis/services/SampleWorldCities/MapServer/WFSServer?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&STOREDQUERY_ID=urn:ogc:def:query:OGC-WFS::GetFeatureById&ID=Cities.1

ListStoredQueries

L’opération ListStoredQueries dresse une liste des requêtes stockées disponibles dans ArcGIS Server. Le client peut exécuter une requête stockée à la fois ; par exemple :

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?request=ListStoredQueries&service=WFS&version=2.0.0

DescribeStoredQueries

L’opération DescribeStoredQueries décrit les requêtes stockées disponibles dans ArcGIS Server. Cette opération permet aux clients WFS d’interroger le serveur et de comprendre la nature de la requête stockée et des paramètres qui doivent être envoyés pour exécuter cette requête stockée.

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?request=DescribeStoredQueries&service=WFS&version=2.0.0

Exécuter une requête stockée incluse dans une requête GetFeature

Voici un exemple de requête d’attribut où une requête stockée (AttributeDemo) est appelée à l’aide du paramètre myrank=3 :

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=0&count=5&STOREDQUERY_ID=urn:StoredQueries:AttributeDemo&myrank=3

Voici un exemple où une requête stockée (SpatialDemo) est appelée à l’aide du paramètre coordinates pour récupérer une liste des villes des États-Unis qui se trouvent au sein d’une emprise obligatoire. Seules les deux premières villes sont renvoyées depuis cette liste (notez l’utilisation de l’index de début et du nombre) :

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=0&count=2&STOREDQUERY_ID=urn:StoredQueries:SpatialDemo&coordinates=0,-180%2090,0

L’exemple suivant illustre l’appel d’une requête stockée (FunctionChar_Length). La requête stockée sur le serveur est écrite pour filtrer les villes dont le nom compte plus de deux caractères :

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=Cities&STOREDQUERY_ID=urn:StoredQueries:FunctionCHAR_LENGTH

Appel de réponses

L’appel de réponses permet à une requête de spécifier l’index de début de l’entité à récupérer. Un nombre total des entités à récupérer peut également être spécifié.

Grâce au service de carte SampleWorldCities installé avec ArcGIS Server, la requête suivante renvoie deux villes (count=2), Brasilia et Goiânia :

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=1&count=2

Si vous changez la requête et que vous faites commencer l’index de début à 2, la ville renvoyée est Goiânia. Etant donné que le nombre = 2, les deux villes renvoyées sont Goiânia et Campo Grande.

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=2&count=2

Paramètre personnalisé ForceEPSGAxisOrder

ForceEPSGAxisOrder est un paramètre personnalisé qui peut être transmis avec une demande WFS GetFeature lorsque le format de sortie GeoJSON est demandé. Par défaut, le format de sortie GeoJSON retourne des coordonnées WGS84 avec l’ordre des axes longitude, latitude conformément à la spécification GeoJSON de la norme RFC 7946. Si ce paramètre a la valeur true (vrai), les axes de coordonnées sont retournés dans l’ordre défini par le code EPSG spécifié. Par exemple, la requête suivante retourne les coordonnées avec l’ordre des axes latitude, longitude comme défini par EPSG:4326 :

https:///arcgis/services/SampleWorldCities/MapServer/WFSServer?service=wfs&version=2.0.0&&request=GetFeature&typeNames=cities&outputFormat=GEOJSON&srsName=EPSG:4326&ForceEPSGAxisOrder=true