3.3. Web Feature Service (WFS)
Los estándares WFS 1.0.0 y 1.1.0 implementados en QGIS Server proporcionan una interfaz HTTP para consultar características geográficas de un proyecto QGIS. Una solicitud WFS típica define el proyecto QGIS a usar y la capa a consultar.
Documento de especificaciones según el número de versión del servicio:
Solicitudes standard proporcionadas por el servidor QGIS:
Solicitud |
Descripción |
---|---|
Devuelve metadatos XML con información sobre el servidor |
|
Devuelve una selección de objetos espaciales |
|
Devuelve una descripción de los tipos de entidades y propiedades. |
|
Permite insertar, actualizar o eliminar objetos |
3.3.1. GetCapabilities
Parámetros estándar para la solicitud ObtenerCapacidades según las especificaciones OGC WFS 1.0.0 y 1.1.0:
Parámetros |
Necesario |
Descripción |
---|---|---|
Sí |
Nombre del servicio (WFS) |
|
Sí |
Nombre de la solicitud (GetCapabilities) |
|
No |
Versión del servicio |
En adición a los estándares, QGIS Server apoya los siguientes parámetros extra:
Parámetros |
Necesario |
Descripción |
---|---|---|
Sí |
Archivo de proyecto QGIS |
VERSION
Este parámetro permite especificar la versión del servicio a utilizar. Los valores disponibles para el parámetro VERSIÓN
son:
1.0.0
1.1.0
Si no se indica una versión en la solicitud, entonces se usa 1.1.0
por defecto.
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&...
3.3.2. GetFeature
Parámetros estándar para la solicitud GetFeature de acuerdo con las especificaciones OGC WFS 1.0.0 y 1.1.0:
Parámetros |
Necesario |
Descripción |
---|---|---|
Sí |
Nombre del servicio (WFS) |
|
Sí |
Nombre de la solicitud (GetFeature) |
|
No |
Versión del servicio |
|
No |
Nombre de las capas |
|
No |
Filtrar los objetos espaciales por ids |
|
No |
Formato de Salida |
|
No |
Tipo de resultado |
|
No |
Nombre de las propiedades a regresar |
|
No |
Número máximo de objetos espaciales a devolver |
|
No |
Sistema de referencia de coordenadas |
|
No |
OGC Codificación de Filtro |
|
No |
Extensión del Mapa |
|
No |
Ordena los resultados |
En adición a los estándares, QGIS Server apoya los siguientes parámetros extra:
Parámetros |
Necesario |
Descripción |
---|---|---|
Sí |
Archivo de proyecto QGIS |
|
No |
Paginamiento |
|
No |
Tipo de geometría para regresar |
|
No |
Filtrado de expresión |
TYPENAME
Este parámetro permite especificar los nombres de las capas y es obligatorio si no se establece FEATUREID
.
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&TYPENAME=countries
FEATUREID
Este parámetro permite especificar el ID de una característica específica y se forma como typename.fid,typename.fid,...
.
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&FEATUREID=countries.0,places.1
Respuesta 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
Este parámetro se puede utilizar para especificar el formato de la respuesta. Si VERSION
es mayor o igual que 1.1.0
, GML3 es el formato predeterminado. De lo contrario, se utiliza GML2.
Los valores disponibles son:
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
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&FEATUREID=countries.0
&OUTPUTFORMAT=geojson
Respuesta 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
Este parámetro se puede utilizar para especificar el tipo de resultado que se devolverá. Los valores disponibles son:
results
: el comportamiento predeterminadohits
: devuelve solo un recuento de objetos
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&RESULTTYPE=hits
&...
PROPERTYNAME
Este parámetro se puede usar para especificar una propiedad específica para devolver. Una propiedad necesita ser mapeada con un TYPENAME
o un FEATUREID
:
Ejemplo de URL válida:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&PROPERTYNAME=name
&TYPENAME=places
Por el contrario, la siguiente URL devolverá una excepción:
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
Este parámetro permite limitar el número de características devueltas por la solicitud.
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&MAXFEATURES=1000
Nota
Este parámetro puede resultar útil para mejorar el rendimiento cuando las capas vectoriales subyacentes son pesadas.
SRSNAME
Este parámetro permite indicar la salida de respuesta del Sistema de Referencia Espacial así como el SRC BBOX
y tiene que formarse como EPSG:XXXX
.
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&SRSNAME=EPSG:32620
FILTER
Este parámetro permite filtrar la respuesta con el lenguaje Codificación de filtros definido por el estándar OGC Filter Encoding. Por ejemplo:
http://localhost/qgisserver?
SERVICE=WFS&
REQUEST=GetFeature&
TYPENAME=places&
FILTER=<Filter><PropertyIsEqualTo><PropertyName>name</PropertyName><Literal>Paris</Literal></PropertyIsEqualTo></Filter>
En caso de varios nombres de tipo, los filtros deben ir entre paréntesis:
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>)
Filter features that intersect with a polygon:
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
Este parámetro permite especificar la extensión del mapa con unidades según el SRC actual. Las coordenadas deben estar separadas por una coma.
El parámetro SRSNAME
puede especificar el CRS de la extensión. Si no se especifica, se utiliza el CRS de la capa.
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&BBOX=-11.84,42.53,8.46,50.98
El parámetro FEATUREID
no se puede utilizar con BBOX
. Cualquier intento resultará en una excepción:
<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
Este parámetro permite clasificar las características resultantes de acuerdo con los valores de las propiedades y debe formarse como propertyname SORTRULE
.
Valores disponibles para SORTRULE
en caso de clasificación descendente:
D
+D
DESC
+DESC
Valores disponibles para SORTRULE
en caso de clasificación ascendente:
A
+A
ASC
+ASC
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&PROPERTYNAME=name
&MAXFEATURES=3
&SORTBY=name DESC
El resultado correspondiente:
<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
Este parámetro se puede utilizar para especificar el tipo de geometría que se devolverá para las entidades. Los valores disponibles son:
extent
centroid
none
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&GEOMETRYNAME=centroid
&...
STARTINDEX
Este parámetro es estándar en WFS 2.0, pero es una extensión para WFS 1.0.0.
En realidad, se puede usar para omitir algunas funciones en el conjunto de resultados y, en combinación con MAXFEATURES
, proporciona la capacidad de desplazarse por las páginas de los resultados.
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&STARTINDEX=2
&...
EXP_FILTER
Este parámetro permite filtrar la respuesta con expresiones QGIS. El carácter ;
se utiliza para separar los filtros en caso de múltiples nombres de tipo.
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places,countries
&EXP_FILTER="name"='Paris';"name"='France'
3.3.3. DescribeFeatureType
Parámetros estándar para la solicitud Describaeltipodefunción según las especificaciones OGC WFS 1.0.0 y 1.1.0:
Parámetros |
Necesario |
Descripción |
---|---|---|
Sí |
Nombre del servicio (WFS) |
|
Sí |
Nombre de la solicitud (Describaeltipodefunción) |
|
No |
Versión del servicio |
|
No |
Formato de la respuesta |
|
No |
Nombre de las capas |
En adición a los estándares, QGIS Server apoya los siguientes parámetros extra:
Parámetros |
Necesario |
Descripción |
---|---|---|
Sí |
Archivo de proyecto QGIS |
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=DescribeFeatureType
&TYPENAME=countries
Respuesta de salida:
<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. Transacción
Esta solicitud permite actualizar, eliminar o agregar una o varias características gracias a un documento XML. La acción delete se puede lograr con una solicitud POST, así como con el parámetro OPERATION, mientras que las operaciones add y update se pueden lograr a través de la solicitud POST solamente.
Parámetros estándar para la solicitud de Transacción según las especificaciones OGC WFS 1.0.0 y 1.1.0:
Parámetros |
Necesario |
Descripción |
---|---|---|
Sí |
Nombre del servicio (WFS) |
|
Sí |
Nombre de la solicitud (Transacción) |
|
No |
Versión del servicio |
|
No |
OGC Codificación de Filtro |
|
No |
Extensión del Mapa |
|
No |
Filtrar los objetos espaciales por ids |
|
No |
Nombre de las capas |
En adición a los estándares, QGIS Server apoya los siguientes parámetros extra:
Parámetros |
Necesario |
Descripción |
---|---|---|
Sí |
Archivo de proyecto QGIS |
|
No |
Especificar la operación |
|
No |
Filtrado de expresión |
OPERATION
Este parámetro permite eliminar una característica sin usar una solicitud POST con un documento XML dedicado.
URL ejemplo:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=Transaction
&OPERATION=DELETE
&FEATUREID=24
Nota
Los parámetros FEATUREID
, BBOX
y FILTER
se excluyen mutuamente y se priorizan en este orden.
Agrega características
Ejemplo de solicitud POST:
wget --post-file=add.xml "http://localhost/qgisserver?SERVICE=WFS&REQUEST=Transaction"
con el 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>
Actualizar características
Ejemplo de solicitud POST:
wget --post-file=update.xml "http://localhost/qgisserver?SERVICE=WFS&REQUEST=Transaction"
con el 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>
Eliminar características
Ejemplo de solicitud POST:
wget --post-file=delete.xml "http://localhost/qgisserver?SERVICE=WFS&REQUEST=Transaction"
con el 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>