3.3. Web Feature Service (WFS)

Les normes 1.0.0 et 1.1.0 WFS implémentées dans QGIS Server fournissent une interface HTTP pour interroger les entités géographiques d’un projet QGIS. Une demande WFS typique définit le projet QGIS à utiliser et la couche à interroger.

Document de spécifications en fonction du numéro de version du service:

Requêtes standard fournies par QGIS Server:

Requête

Description

GetCapabilities

Renvoie des métadonnées XML avec des informations sur le serveur

GetFeature

Renvoie une sélection d’entité

DescribeFeatureType

Renvoie une description des types d’entités et des propriétés

Transaction

Permet aux entités d’être insérées, mises à jour ou supprimées

3.3.1. GetCapabilities

Paramètres standard pour la demande GetCapabilities selon les spécifications OGC WFS 1.0.0 et 1.1.0:

Paramètre

Requis

Description

SERVICE

Oui

Nom du service (WFS)

REQUEST

Oui

Nom de la requête (GetCapabilities)

VERSION

Non

Version du service

Outre les paramètres standard, QGIS prend en charge les paramètres suivants :

Paramètre

Requis

Description

MAP

Oui

Fichier du projet QGIS

VERSION

Ce paramètre permet de spécifier la version du service à utiliser. Les valeurs disponibles pour le paramètre VERSION sont:

  • 1.0.0

  • 1.1.0

Si aucune version n’est indiquée dans la requête, alors 1.1.0 est utilisée par défaut.

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&...

3.3.2. GetFeature

Paramètres standard pour la demande GetFeature selon les spécifications OGC WFS 1.0.0 et 1.1.0:

Paramètre

Requis

Description

SERVICE

Oui

Nom du service (WFS)

REQUEST

Oui

nom de la requête (GetFeature)

VERSION

Non

Version du service

TYPENAME

Non

Nom des couches

FEATUREID

Non

Filtre les entités par leur identifiant

OUTPUTFORMAT

Non

Format de sortie

RESULTTYPE

Non

Type de résultat

PROPERTYNAME

Non

Nom des propriétés à renvoyer

MAXFEATURES

Non

Nombre maximum d’entités à renvoyer

SRSNAME

Non

Système de coordonnées de référence

FILTER

Non

Encodage du filtre OGC

BBOX

Non

Emprise de la carte

SORTBY

Non

Trie les résultats

Outre les paramètres standard, QGIS prend en charge les paramètres suivants :

Paramètre

Requis

Description

MAP

Oui

Fichier du projet QGIS

STARTINDEX

Non

Pagination

GEOMETRYNAME

Non

Type de géométrie à renvoyer

EXP_FILTER

Non

Expression de filtrage

TYPENAME

Ce paramètre permet de spécifier les noms des couches et est obligatoire si FEATUREID n’est pas défini.

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&TYPENAME=countries

FEATUREID

Ce paramètre permet de spécifier l’ID d’une entité spécifique et est formé avec typename.fid,typename.fid,…`.

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&FEATUREID=countries.0,places.1

réponse XML :

<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qgs="http://www.qgis.org/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd http://www.qgis.org/gml http://192.168.1.15/qgisserver?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=countries,places&OUTPUTFORMAT=text/xml; subtype%3Dgml/3.1.1">
  <gml:boundedBy>
    ...
  </gml:boundedBy>
  <gml:featureMember>
    <qgs:countries gml:id="countries.1">
      ...
    </qgs:countries>
  </gml:featureMember>
  <gml:featureMember>
    <qgs:places gml:id="places.1">
      ...
    </qgs:places>
  </gml:featureMember>
</wfs:FeatureCollection>

OUTPUTFORMAT

Ce paramètre peut être utilisé pour spécifier le format de la réponse. Si VERSION` est supérieur ou égal à ``1.1.0, GML3 est le format par défaut. Sinon, GML2 est utilisé.

Les valeurs disponibles sont :

  • gml2

  • text/xml; subtype=gml/2.1.2

  • gml3

  • text/xml; subtype=gml/3.1.1

  • geojson

  • application/vnd.geo+json,

  • application/vnd.geo json

  • application/geo+json

  • application/geo json

  • application/json

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&FEATUREID=countries.0
&OUTPUTFORMAT=geojson

réponse GeoJSON :

{
    "type":"FeatureCollection",
    "bbox":[
        -180,
        -90,
        180,
        83.6236
    ],
    "features":[
        {
            "bbox":[
                -61.891113,
                16.989719,
                -61.666389,
                17.724998
            ],
            "geometry":{
                "coordinates":[
                    "..."
                ],
                "type":"MultiPolygon"
            },
            "id":"countries.1",
            "properties":{
                "id":1,
                "name":"Antigua and Barbuda"
            },
            "type":"Feature"
        }
    ]
}

RESULTTYPE

Ce paramètre peut être utilisé pour indiquer le genre de résultat attendu. Les valeurs possibles sont :

  • results: le comportement par défaut

  • hits: renvoie seulement le décompte des entités

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&RESULTTYPE=hits
&...

PROPERTYNAME

Ce paramètre peut être utilisé pour spécifier une propriété spécifique à retourner. Une propriété doit être associée à un TYPENAME ou à un FEATUREID:

Exemple d’URL valide :

http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&PROPERTYNAME=name
&TYPENAME=places

Au contraire, l’URL suivante renverra une exception :

http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&PROPERTYNAME=name
&TYPENAME=places,countries
<ServiceExceptionReport xmlns="http://www.opengis.net/ogc" version="1.2.0">
    <ServiceException code="RequestNotWellFormed">There has to be a 1:1 mapping between each element in a TYPENAME and the PROPERTYNAME list</ServiceException>
</ServiceExceptionReport>

MAXFEATURES

Ce paramètre permet de limiter le nombre d’entités renvoyées par la requête.

Note

Ce paramètre peut être utile pour améliorer les performances lorsque les couches vectorielles sous-jacentes sont lourdes.

SRSNAME

Ce paramètre permet d’indiquer le Système de Référence Spatial de sortie de la réponse ainsi que le SCR BBOX` et doit être formé comme EPSG:XXXX.

http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&SRSNAME=EPSG:32620

FILTER

Ce paramètre permet de filtrer la réponse avec le langage Filter Encoding défini par le standard <https://www.ogc.org/standards/filter>`_.

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS&
REQUEST=GetFeature&
TYPENAME=places&
FILTER=<Filter><PropertyIsEqualTo><PropertyName>name</PropertyName><Literal>Paris</Literal></PropertyIsEqualTo></Filter>

BBOX

Ce paramètre permet de spécifier l’étendue de la carte avec des unités en fonction du SCR actuel. Les coordonnées doivent être séparées par une virgule.

L paramètre ``SRSNAME``peut spécifier le SCR de l’étendue. S’il n’est pas spécifié, le SCR de la couche est utilisé.

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&BBOX=-11.84,42.53,8.46,50.98

Le paramètre FEATUREID ne peut pas être utilisé avec le paramètre BBOX. Toute tentative entraînera une exception :

<ServiceExceptionReport xmlns="http://www.opengis.net/ogc" version="1.2.0">
  <ServiceException code="RequestNotWellFormed">FEATUREID FILTER and BBOX parameters are mutually exclusive</ServiceException>
</ServiceExceptionReport>

SORTBY

Ce paramètre permet de trier les entités résultantes selon les valeurs des propriétés et doit être formé comme propertyname SORTRULE.

Valeurs disponibles pour SORTRULE en cas de tri descendant :

  • D

  • +D

  • DESC

  • +DESC

Valeurs disponibles pour SORTRULE en cas de tri ascendant :

  • A

  • +A

  • ASC

  • +ASC

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&PROPERTYNAME=name
&MAXFEATURES=3
&SORTBY=name DESC

Le résultat correspondant :

<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qgs="http://www.qgis.org/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd http://www.qgis.org/gml http://192.168.1.15/qgisserver?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=places&OUTPUTFORMAT=text/xml; subtype%3Dgml/3.1.1">
    <gml:boundedBy>
        ...
    </gml:boundedBy>
    <gml:featureMember>
        <qgs:places gml:id="places.90">
            <qgs:name>Zagreb</qgs:name>
        </qgs:places>
    </gml:featureMember>
    <gml:featureMember>
        <qgs:places gml:id="places.113">
            <qgs:name>Yerevan</qgs:name>
        </qgs:places>
    </gml:featureMember>
    <gml:featureMember>
        <qgs:places gml:id="places.111">
            <qgs:name>Yaounde</qgs:name>
        </qgs:places>
    </gml:featureMember>
</wfs:FeatureCollection>

GEOMETRYNAME

Ce paramètre peut être utilisé pour indiquer le type de géométrie attendu pour les entités. Les valeurs possibles sont :

  • extent

  • centroid

  • none

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&GEOMETRYNAME=centroid
&...

STARTINDEX

Ce paramètre est standard dans WFS 2.0, mais c’est une extension pour WFS 1.0.0.

En fait, il peut être utilisé pour ignorer certaines entités dans l’ensemble des résultats et, en combinaison avec MAXFEATURES, il offre la possibilité de paginer les résultats.

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&STARTINDEX=2
&...

EXP_FILTER

Ce paramètre permet de filtrer la réponse avec des expressions QGIS.

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS&
REQUEST=GetFeature&
TYPENAME=places&
EXP_FILTER="name"='Paris'

3.3.3. DescribeFeatureType

Paramètres standard pour la requête DescribeFeatureType selon les spécifications OGC WFS 1.0.0 et 1.1.0 :

Paramètre

Requis

Description

SERVICE

Oui

Nom du service (WFS)

REQUEST

Oui

Nom de la requête (DescribeFeatureType)

VERSION

Non

Version du service

OUTPUTFORMAT

Non

Format de la reponse

TYPENAME

Non

Nom des couches

Outre les paramètres standard, QGIS prend en charge les paramètres suivants :

Paramètre

Requis

Description

MAP

Oui

Fichier du projet QGIS

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=DescribeFeatureType
&TYPENAME=countries

Réponse en sortie

<schema xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:qgs="http://www.qgis.org/gml" xmlns:gml="http://www.opengis.net/gml" targetNamespace="http://www.qgis.org/gml" version="1.0" elementFormDefault="qualified">
  <import schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd" namespace="http://www.opengis.net/gml"/>
  <element type="qgs:countriesType" substitutionGroup="gml:_Feature" name="countries"/>
  <complexType name="countriesType">
    <complexContent>
      <extension base="gml:AbstractFeatureType">
        <sequence>
          <element minOccurs="0" type="gml:MultiPolygonPropertyType" maxOccurs="1" name="geometry"/>
          <element type="long" name="id"/>
          <element nillable="true" type="string" name="name"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
</schema>

3.3.4. Transaction

Cette requête permet de mettre à jour, supprimer ou ajouter une ou plusieurs entités grâce à un document XML. L’action delete peut être réalisée par une requête POST ainsi qu’avec le paramètre OPERATION tandis que les opérations add ne peuvent être réalisées que par une requête POST.

Paramètres standard pour la requête Transaction selon les spécifications OGC WFS 1.0.0 et 1.1.0:

Paramètre

Requis

Description

SERVICE

Oui

Nom du service (WFS)

REQUEST

Oui

nom de la requête (Transaction)

VERSION

Non

Version du service

FILTER

Non

Encodage du filtre OGC

BBOX

Non

Emprise de la carte

FEATUREID

Non

Filtre les entités par leur identifiant

TYPENAME

Non

Nom des couches

Outre les paramètres standard, QGIS prend en charge les paramètres suivants :

Paramètre

Requis

Description

MAP

Oui

Fichier du projet QGIS

OPERATION

Non

Spécifie l’opération

EXP_FILTER

Non

Expression de filtrage

OPERATION

Ce paramètre permet de supprimer une entité sans utiliser une requête POST avec un document XML dédié.

Exemple d’URL :

http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=Transaction
&OPERATION=DELETE
&FEATUREID=24

Note

Les paramètres FEATUREID, BBOX et FILTER sont mutuellement exclusifs et hiérarchisés dans cet ordre.

Ajout d’entités

Exemple de requête POST

wget --post-file=add.xml "http://localhost/qgisserver?SERVICE=WFS&REQUEST=Transaction"

avec le document add.xml :

<?xml version="1.0" encoding="UTF-8"?>
<wfs:Transaction service="WFS" version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.opengis.net/wfs" updateSequence="0" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd" xmlns:gml="http://www.opengis.net/gml"  xmlns:ows="http://www.opengis.net/ows">
  <wfs:Insert idgen="GenerateNew">
    <qgs:places>
      <qgs:geometry>
        <gml:Point srsDimension="2" srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
          <gml:coordinates decimal="." cs="," ts=" ">-4.6167,48.3833</gml:coordinates>
        </gml:Point>
      </qgs:geometry>
      <qgs:name>Locmaria-Plouzané</qgs:name>
    </qgs:places>
  </wfs:Insert>
</wfs:Transaction>

Mise à jour d’entités

Exemple de requête POST

wget --post-file=update.xml "http://localhost/qgisserver?SERVICE=WFS&REQUEST=Transaction"

avec le document update.xml :

<?xml version="1.0" encoding="UTF-8"?>
<wfs:Transaction service="WFS" version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.opengis.net/wfs" updateSequence="0" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd" xmlns:gml="http://www.opengis.net/gml"  xmlns:ows="http://www.opengis.net/ows">
    <wfs:Update typeName="places">
      <wfs:Property>
          <wfs:Name>name</wfs:Name>
          <wfs:Value>Lutece</wfs:Value>
      </wfs:Property>
      <ogc:Filter>
          <ogc:FeatureId fid="24"/>
      </ogc:Filter>
    </wfs:Update>
</wfs:Transaction>

Suppression d’entités

Exemple de requête POST

wget --post-file=delete.xml "http://localhost/qgisserver?SERVICE=WFS&REQUEST=Transaction"

avec le document delete.xml :

<?xml version="1.0" encoding="UTF-8"?>
<wfs:Transaction service="WFS" version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.opengis.net/wfs" updateSequence="0" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd" xmlns:gml="http://www.opengis.net/gml"  xmlns:ows="http://www.opengis.net/ows">
    <wfs:Delete typeName="places">
        <ogc:Filter>
            <ogc:FeatureId fid="24"/>
        </ogc:Filter>
    </wfs:Delete>
</wfs:Transaction>