3.3. Web Feature Service (WFS)

De WFS standaarden 1.0.0 en 1.1.0, geïmplementeerd in QGIS Server, verschaffen een interface voor HTTP voor het verzoeken van geografische objecten uit een project van QGIS. Een typisch WFS-verzoek definieert het te gebruiken project van QGIS, en de te bevragen laag.

Specificatiedocument overeenkomstig het versienummer van de service:

Standaardverzoeken verschaft door QGIS Server:

Verzoek

Omschrijving

GetCapabilities

Geeft XML-metadata terug met informatie over de server

GetFeature

Geeft een selectie van objecten terug

DescribeFeatureType

Geeft een beschrijving van typen objecten en eigenschappen terug

Transaction

Staat toe dat objecten worden ingevoegd, bijgewerkt of verwijderd

3.3.1. GetCapabilities

Standaardparameters voor het verzoek GetCapabilities overeenkomstig de specificaties van OGC WFS 1.0.0 en 1.1.0:

Parameter

Vereist

Omschrijving

SERVICE

Ja

Naam van de service (WFS)

REQUEST

Ja

Naam van het verzoek (GetCapabilities)

VERSION

Nee

Versie van de service

In aanvulling op de standaard parameters ondersteunt QGIS Server de volgende extra parameters:

Parameter

Vereist

Omschrijving

MAP

Ja

QGIS projectbestand

VERSION

Deze parameter maakt het mogelijk de versie van de te gebruiken service te specificeren. Beschikbare waarden voor de parameter VERSION zijn:

  • 1.0.0

  • 1.1.0

Indien geen versie wordt aangegeven in het verzoek, dan wordt standaard 1.1.0 gebruikt.

Voorbeeld URL:

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

3.3.2. GetFeature

Standaardparameters voor het verzoek GetFeature overeenkomstig de specificaties van OGC WFS 1.0.0 en 1.1.0:

Parameter

Vereist

Omschrijving

SERVICE

Ja

Naam van de service (WFS)

REQUEST

Ja

Naam van het verzoek (GetFeature)

VERSION

Nee

Versie van de service

TYPENAME

Nee

Naam van de lagen

FEATUREID

Nee

Objecten filteren op ID

OUTPUTFORMAT

Nee

Indeling uitvoer

RESULTTYPE

Nee

Type resultaat

PROPERTYNAME

Nee

Naam van de eigenschappen die moeten worden teruggegeven

MAXFEATURES

Nee

Maximale aantal terug te geven objecten

SRSNAME

Nee

Coördinaten referentiesysteem

FILTER

Nee

OGC codering filter

BBOX

Nee

Kaartbereik

SORTBY

Nee

Sorteer de resultaten

In aanvulling op de standaard parameters ondersteunt QGIS Server de volgende extra parameters:

Parameter

Vereist

Omschrijving

MAP

Ja

QGIS projectbestand

STARTINDEX

Nee

Paginanummer

GEOMETRYNAME

Nee

Type terug te geven geometrie

EXP_FILTER

Nee

Expressie filteren

TYPENAME

Deze parameter maakt het mogelijk laagnamen te specificeren en is verplicht als FEATUREID niet is ingesteld.

Voorbeeld URL:

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

FEATUREID

Deze parameter maakt het mogelijk de ID van een specifiek object te specificeren en wordt gevormd als typename.fid,typename.fid,....

Voorbeeld URL:

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

XML-antwoord:

<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

Deze parameter kan worden gebruikt om de indeling van het antwoord te specificeren. Als VERSION groter of gelijk is aan 1.1.0 dan is GML3 de standaard indeling. Anders wordt GML2 gebruikt.

Beschikbare waarden zijn:

  • 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

Voorbeeld URL:

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

GeoJSON-antwoord:

{
    "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

Deze parameter kan worden gebruikt om het terug te geven resultaat te specificeren. Beschikbare waarden zijn:

  • results: het standaard gedrag

  • hits: geeft alleen het aantal objecten terug

Voorbeeld URL:

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

PROPERTYNAME

Deze parameter kan worden gebruikt om een specifieke terug te geven eigenschap te specificeren. Een eigenschap dient te worden aangeduid met een TYPENAME of een FEATUREID:

Geldig voorbeeld URL:

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

In het andere geval zal de volgende URL een uitzondering teruggeven:

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

Deze parameter maakt het mogelijk het aantal terug te geven objecten door het verzoek te beperken.

Voorbeeld URL:

http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&MAXFEATURES=1000

Notitie

Deze parameter kan nuttig zijn om de uitvoering te verbeteren als onderliggende vectorlagen zwaar zijn.

SRSNAME

Deze parameter maakt het mogelijk het Ruimtelijke ReferentieSysteem en ook het CRS voor BBOX aan te geven en moet zijn gevormd als EPSG:XXXX.

Voorbeeld URL:

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

FILTER

Deze parameter maakt het mogelijk het antwoord te filteren op de taal voor Filter Encoding, gedefinieerd door de OGC Filter Encoding standard. Bijvoorbeeld:

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

In het geval van meerdere typenamen moeten filters worden omsloten door haakjes:

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

Objecten filteren die kruisen met een polygoon:

http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&VERSION=1.1.0
&TYPENAME=places
&FILTER=<Filter xmlns="http://www.opengis.net/ogc">
           <Intersects>
               <PropertyName>geometry</PropertyName>
               <Polygon xmlns="http://www.opengis.net/gml" srsName="EPSG:4326">
                   <exterior>
                       <LinearRing>
                           <posList>
                               -0.6389 42.5922
                               10.2683 51.9106
                               14.5196 41.0320
                               -0.6389 42.5922
                           </posList>
                       </LinearRing>
                   </exterior>
               </Polygon>
           </Intersects>
       </Filter>

BBOX

Deze parameter maakt het mogelijk het kaartbereik te specificeren in kaarteenheden overeenkomstig het huidige CRS. Coördinaten moeten worden gescheiden door een komma.

De parameter SRSNAME kan het CRS van het bereik specificeren. Indien niet gespecificeerd wordt het CRS van de laag gebruikt.

Voorbeeld URL:

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

De parameter FEATUREID kan niet worden gebruikt met de parameter BBOX. Elke poging zal resulteren in een uitzondering:

<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

Deze parameter maakt het mogelijk resulterende objecten te sorteren overeenkomstig waarden van eigenschappen en moet worden gevormd als naam eigenschap SORTRULE.

Beschikbare waarden voor SORTRULE in het geval van aflopend sorteren:

  • D

  • +D

  • DESC

  • +DESC

Beschikbare waarden voor SORTRULE in het geval van oplopend sorteren:

  • A

  • +A

  • ASC

  • +ASC

Voorbeeld URL:

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

Het corresponderende resultaat:

<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

Deze parameter kan worden gebruikt om het terug te geven soort geometrie te specificeren. Beschikbare waarden zijn:

  • extent

  • centroid

  • none

Voorbeeld URL:

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

STARTINDEX

Deze parameter is standaard in WFS 2.0, maar het is een uitbreiding voor WFS 1.0.0.

In feite kan hij worden gebruikt om enkele objecten in de set met resultaten over te slaan en in combinatie met MAXFEATURES verschaft het de mogelijkheid om door de resultaten te bladeren.

Voorbeeld URL:

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

EXP_FILTER

Deze parameter maakt het mogelijk het antwoord te filteren met expressies van QGIS. Het teken ; wordt gebruikt om filters te scheiden in het geval van meerdere typenamen.

Voorbeeld URL:

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

3.3.3. DescribeFeatureType

Standaardparameters voor het verzoek DescribeFeatureType overeenkomstig de specificaties van OGC WFS 1.0.0 en 1.1.0:

Parameter

Vereist

Omschrijving

SERVICE

Ja

Naam van de service (WFS)

REQUEST

Ja

Naam van het verzoek (DescribeFeatureType)

VERSION

Nee

Versie van de service

OUTPUTFORMAT

Nee

Indeling van het antwoord

TYPENAME

Nee

Naam van de lagen

In aanvulling op de standaard parameters ondersteunt QGIS Server de volgende extra parameters:

Parameter

Vereist

Omschrijving

MAP

Ja

QGIS projectbestand

Voorbeeld URL:

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

Uitvoer antwoord:

<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

Dit verzoek maakt het mogelijk een of verscheidene objecten bij te werken, te verwijderen of toe te voegen met een XML-document. De actie verwijderen kan worden bereikt met een verzoek POST, als ook met de parameter OPERATION, terwijl de bewerkingen toevoegen en bijwerken alleen kunnen worden bereikt door een verzoek POST.

Standaardparameters voor het verzoek Transaction overeenkomstig de specificaties van OGC WFS 1.0.0 en 1.1.0:

Parameter

Vereist

Omschrijving

SERVICE

Ja

Naam van de service (WFS)

REQUEST

Ja

Naam van het verzoek (Transaction)

VERSION

Nee

Versie van de service

FILTER

Nee

OGC codering filter

BBOX

Nee

Kaartbereik

FEATUREID

Nee

Objecten filteren op ID

TYPENAME

Nee

Naam van de lagen

In aanvulling op de standaard parameters ondersteunt QGIS Server de volgende extra parameters:

Parameter

Vereist

Omschrijving

MAP

Ja

QGIS projectbestand

OPERATION

Nee

De bewerking specificeren

EXP_FILTER

Nee

Expressie filteren

OPERATION

Deze parameter maakt het mogelijk een object te verwijderen zonder en verzoek POST met een toegewezen XML-document.

Voorbeeld URL:

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

Notitie

Parameters FEATUREID, BBOX en FILTER sluiten elkaar uit en geprioriteerd in deze volgorde.

Objecten toevoegen

Voorbeeld verzoek POST:

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

met het 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>

Objecten bijwerken

Voorbeeld verzoek POST:

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

met het 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>

Objecten verwijderen

Voorbeeld verzoek POST:

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

met het 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>