3.3. Web Feature Service (WFS)

Gli standard 1.0.0 e 1.1.0 WFS implementati in QGIS Server forniscono un’interfaccia HTTP per interrogare gli elementi geografici da un progetto QGIS. Una tipica richiesta WFS definisce il progetto QGIS da usare e il layer da interrogare.

Documento delle specifiche secondo il numero di versione del servizio:

Richieste standard fornite da QGIS Server:

Request

Descrizione

GetCapabilities

Restituisce metadati XML con informazioni sul server

GetFeature

Restituisce una selezione di elementi

DescribeFeatureType

Restituisce una descrizione dei tipi di elementi e delle proprietà

Transaction

Permette l’inserimento, l’aggiornamento o la cancellazione di elementi

3.3.1. GetCapabilities

Parametri standard per la richiesta GetCapabilities in conformità alle specifiche OGC WFS 1.0.0 e 1.1.0:

Parametro

Richiesto

Descrizione

SERVICE

Nome del servizio (WFS)

REQUEST

Nome della richiesta (GetCapabilities)

VERSION

No

Versione del servizio

Oltre a quelli standard, QGIS Server supporta i seguenti parametri extra:

Parametro

Richiesto

Descrizione

MAP

File di progetto QGIS

VERSION

Questo parametro permette di specificare la versione del servizio da utilizzare. I valori disponibili per il parametro VERSION sono:

  • 1.0.0

  • 1.1.0

Se nessuna versione è indicata nella richiesta, allora 1.1.0 è usato per default.

Esempio di URL:

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

3.3.2. GetFeature

Parametri standard per la richiesta GetFeature secondo le specifiche OGC WFS 1.0.0 e 1.1.0:

Parametro

Richiesto

Descrizione

SERVICE

Nome del servizio (WFS)

REQUEST

Nome della richiesta (GetFeature)

VERSION

No

Versione del servizio

TYPENAME

No

Nome dei layer

FEATUREID

No

Filtrare gli elementi per id

OUTPUTFORMAT

No

Formato risultato

RESULTTYPE

No

Tipo di risultato

PROPERTYNAME

No

Nome delle proprietà da restituire

MAXFEATURES

No

Numero massimo di elementi da restituire

SRSNAME

No

Sistema di riferimento delle Coordinate

FILTER

No

Codifica filtro OGC

BBOX

No

Estensione mappa

SORTBY

No

Ordinare i risultati

Oltre a quelli standard, QGIS Server supporta i seguenti parametri extra:

Parametro

Richiesto

Descrizione

MAP

File di progetto QGIS

STARTINDEX

No

Paginazione

GEOMETRYNAME

No

Tipo di geometria da restituire

EXP_FILTER

No

Espressione di filtraggio

TYPENAME

Questo parametro consente di specificare i nomi dei layer ed è obbligatorio se FEATUREID non è impostato.

Esempio di URL:

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

FEATUREID

Questo parametro consente di specificare l’ID di una elemento specifico e ha una forma del tipo typename.fid,typename.fid,....

Esempio di URL:

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

Risposta 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

Questo parametro può essere usato per specificare il formato della risposta. Se VERSION è maggiore o uguale a 1.1.0, il formato predefinito è GML3. Altrimenti viene utilizzato GML2.

Valori possibili sono:

  • 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

Esempio di URL:

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

Risposta 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

Questo parametro può essere usato per specificare il tipo di risultato da restituire. I valori disponibili sono:

  • results: il risultato predefinito

  • hits: restituisce solo un conteggio degli elementi

Esempio di URL:

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

PROPERTYNAME

Questo parametro può essere utilizzato per specificare una proprietà specifica da restituire. Una proprietà deve essere mappata con un TYPENAME o un FEATUREID:

Esempio di URL valido:

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

Al contrario, il seguente URL restituirà un’eccezione:

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

Questo parametro consente di limitare il numero di elementi restituiti dalla richiesta.

Esempio di URL:

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

Nota

Questo parametro può essere utile per migliorare le prestazioni quando i layer vettoriali sottostanti sono pesanti.

SRSNAME

Questo parametro consente di indicare il sistema di riferimento spaziale in uscita dalla risposta e anche il SR BBOX e deve essere formato come EPSG:XXXX.

Esempio di URL:

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

FILTER

Questo parametro consente di filtrare la risposta con il linguaggio Filter Encoding definito dallo standard OGC Filter Encoding. Ad esempio:

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

In caso di denominazioni multiple, i filtri devono essere racchiusi tra parentesi:

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>)

Filtra gli elementi che si intersecano con un poligono:

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

Questo parametro permette di specificare l’estensione della mappa con unità secondo il SR corrente. Le coordinate devono essere separate da una virgola.

Il parametro SRSNAME può specificare il SR dell’estensione. Se non viene specificato, viene utilizzato il SR del layer.

Esempio di URL:

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

Il parametro FEATUREID non può essere utilizzato con la BBOX. Qualsiasi tentativo provocherà un’eccezione:

<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

Questo parametro consente di ordinare gli elementi risultanti in base ai valori delle proprietà e deve essere formato come propertyname SORTRULE.

Valori possibili per SORTRULE in caso di ordinamento discendente:

  • D

  • +D

  • DESC

  • +DESC

Valori possibili per SORTRULE in caso di ordinamento ascendente:

  • A

  • +A

  • ASC

  • +ASC

Esempio di URL:

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

Il risultato ottenuto:

<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

Questo parametro può essere usato per specificare il tipo di geometria da restituire per gli elementi. I valori disponibili sono:

  • extent

  • centroid

  • none

Esempio di URL:

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

STARTINDEX

Questo parametro è standard in WFS 2.0, ma è un’estensione per WFS 1.0.0.

In pratica, può essere usato per saltare alcuni elementi dell’insieme dei risultati e, in combinazione con MAXFEATURES, fornisce la possibilità di sfogliare i risultati.

Esempio di URL:

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

EXP_FILTER

Questo parametro consente di filtrare la risposta con le espressioni di QGIS. Il carattere ; viene utilizzato per separare i filtri in caso di denominazioni multiple.

Esempio di URL:

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

3.3.3. DescribeFeatureType

Parametri standard per la richiesta DescribeFeatureType secondo le specifiche OGC WFS 1.0.0 e 1.1.0:

Parametro

Richiesto

Descrizione

SERVICE

Nome del servizio (WFS)

REQUEST

Nome della richiesta (DescribeFeatureType)

VERSION

No

Versione del servizio

OUTPUTFORMAT

No

Formato della risposta

TYPENAME

No

Nome dei layer

Oltre a quelli standard, QGIS Server supporta i seguenti parametri extra:

Parametro

Richiesto

Descrizione

MAP

File di progetto QGIS

Esempio di URL:

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

Risposta in uscita:

<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. Transazione

Questa richiesta consente di aggiornare, cancellare o aggiungere una o più elementi grazie a un documento XML. L’azione delete può essere realizzata con una richiesta POST e con il parametro OPERATION, mentre le operazioni add e update possono essere realizzate solo tramite richiesta POST.

Parametri standard per la richiesta Transaction secondo le specifiche OGC WFS 1.0.0 e 1.1.0:

Parametro

Richiesto

Descrizione

SERVICE

Nome del servizio (WFS)

REQUEST

Nome della richiesta (Transazione)

VERSION

No

Versione del servizio

FILTER

No

Codifica filtro OGC

BBOX

No

Estensione mappa

FEATUREID

No

Filtrare gli elementi per id

TYPENAME

No

Nome dei layer

Oltre a quelli standard, QGIS Server supporta i seguenti parametri extra:

Parametro

Richiesto

Descrizione

MAP

File di progetto QGIS

OPERATION

No

Specificare l’operazione

EXP_FILTER

No

Espressione di filtraggio

OPERATION

Questo parametro consente di eliminare un elemento senza utilizzare una richiesta POST con un documento XML dedicato.

Esempio di URL:

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

Nota

I parametri FEATUREID, BBOX e FILTER si escludono a vicenda e sono prioritari in questo ordine.

Aggiungere elementi

Esempio richiesta POST:

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

con il documento 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>

Aggiornare elementi

Esempio richiesta POST:

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

con il documento 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>

Eliminare elementi

Esempio richiesta POST:

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

con il documento 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>