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

GetCapabilities

Devuelve metadatos XML con información sobre el servidor

GetFeature

Devuelve una selección de objetos espaciales

DescribeFeatureType

Devuelve una descripción de los tipos de entidades y propiedades.

Transaction

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

SERVICE

Nombre del servicio (WFS)

REQUEST

Nombre de la solicitud (GetCapabilities)

VERSION

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

MAP

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

SERVICE

Nombre del servicio (WFS)

REQUEST

Nombre de la solicitud (GetFeature)

VERSION

No

Versión del servicio

TYPENAME

No

Nombre de las capas

FEATUREID

No

Filtrar los objetos espaciales por ids

OUTPUTFORMAT

No

Formato de Salida

RESULTTYPE

No

Tipo de resultado

PROPERTYNAME

No

Nombre de las propiedades a regresar

MAXFEATURES

No

Número máximo de objetos espaciales a devolver

SRSNAME

No

Sistema de referencia de coordenadas

FILTER

No

OGC Codificación de Filtro

BBOX

No

Extensión del Mapa

SORTBY

No

Ordena los resultados

En adición a los estándares, QGIS Server apoya los siguientes parámetros extra:

Parámetros

Necesario

Descripción

MAP

Archivo de proyecto QGIS

STARTINDEX

No

Paginamiento

GEOMETRYNAME

No

Tipo de geometría para regresar

EXP_FILTER

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 predeterminado

  • hits: 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

SERVICE

Nombre del servicio (WFS)

REQUEST

Nombre de la solicitud (Describaeltipodefunción)

VERSION

No

Versión del servicio

OUTPUTFORMAT

No

Formato de la respuesta

TYPENAME

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

MAP

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

SERVICE

Nombre del servicio (WFS)

REQUEST

Nombre de la solicitud (Transacción)

VERSION

No

Versión del servicio

FILTER

No

OGC Codificación de Filtro

BBOX

No

Extensión del Mapa

FEATUREID

No

Filtrar los objetos espaciales por ids

TYPENAME

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

MAP

Archivo de proyecto QGIS

OPERATION

No

Especificar la operación

EXP_FILTER

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>