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 |
---|---|
Restituisce metadati XML con informazioni sul server |
|
Restituisce una selezione di elementi |
|
Restituisce una descrizione dei tipi di elementi e delle proprietà |
|
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 |
---|---|---|
Sì |
Nome del servizio (WFS) |
|
Sì |
Nome della richiesta (GetCapabilities) |
|
No |
Versione del servizio |
Oltre a quelli standard, QGIS Server supporta i seguenti parametri extra:
Parametro |
Richiesto |
Descrizione |
---|---|---|
Sì |
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 |
---|---|---|
Sì |
Nome del servizio (WFS) |
|
Sì |
Nome della richiesta (GetFeature) |
|
No |
Versione del servizio |
|
No |
Nome dei layer |
|
No |
Filtrare gli elementi per id |
|
No |
Formato risultato |
|
No |
Tipo di risultato |
|
No |
Nome delle proprietà da restituire |
|
No |
Numero massimo di elementi da restituire |
|
No |
Sistema di riferimento delle Coordinate |
|
No |
Codifica filtro OGC |
|
No |
Estensione mappa |
|
No |
Ordinare i risultati |
Oltre a quelli standard, QGIS Server supporta i seguenti parametri extra:
Parametro |
Richiesto |
Descrizione |
---|---|---|
Sì |
File di progetto QGIS |
|
No |
Paginazione |
|
No |
Tipo di geometria da restituire |
|
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 predefinitohits
: 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 |
---|---|---|
Sì |
Nome del servizio (WFS) |
|
Sì |
Nome della richiesta (DescribeFeatureType) |
|
No |
Versione del servizio |
|
No |
Formato della risposta |
|
No |
Nome dei layer |
Oltre a quelli standard, QGIS Server supporta i seguenti parametri extra:
Parametro |
Richiesto |
Descrizione |
---|---|---|
Sì |
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 |
---|---|---|
Sì |
Nome del servizio (WFS) |
|
Sì |
Nome della richiesta (Transazione) |
|
No |
Versione del servizio |
|
No |
Codifica filtro OGC |
|
No |
Estensione mappa |
|
No |
Filtrare gli elementi per id |
|
No |
Nome dei layer |
Oltre a quelli standard, QGIS Server supporta i seguenti parametri extra:
Parametro |
Richiesto |
Descrizione |
---|---|---|
Sì |
File di progetto QGIS |
|
No |
Specificare l’operazione |
|
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>