OGC API – Features (OAPIF): el servicio WFS de nueva generación

Hasta ahora, el acceso a los objetos geográficos vectoriales (líneas, puntos, polígonos, …) a través de la Web ha sido respaldado por el estándar de la OGC Web Feature Service (WFS). WFS utiliza un estilo arquitectónico Remote-Procedure-Call-over-HTTP mediante XML. Cuando el estándar WFS se diseñó originalmente (a fines de la década de los 90 y principios del 2000), esta era la forma de trabajar.

El protocolo WFS 1.x ha incorporado mecanismos para explorar la estructura de un proyecto (capas, formato de salida, extensiones, …) u obtener información sobre los objetos espaciales. De hecho, es posible gracias al concepto de REQUEST. Las solicitudes WFS más básicas son GetCapabilities, DescribeFeatureType y GetFeature.

Entonces, el flujo de trabajo típico para trabajar con WFS 1.x es:

  • Recuperar la estructura del proyecto gracias a la solicitud GetCapabilities.
  • Solicitar información de características para una capa específica con una solicitud GetFeature.

La petición GetFeature nos devuelve una selección de entidades de una fuente de datos

http://localhost/cgi-bin/qgis_mapserv.fcgi.exe?MAP=C:/Ejemplos_QGIS_Server/paises.qgs&
SERVICE=WFS&
VERSION=1.1.0&
REQUEST=GetFeature&
TYPENAME=ciudades&
OUTPUTFORMAT=application/json

Qué es OGC API – Features

El desarrollo pionero del estándar OGC fue WFS 3, ahora denominado oficialmente “OGC API – Features”. Este nuevo estándar se ha escrito completamente desde cero y mejora sustancialmente a su predecesor WFS 1.x o 2.0. Es la primera implementación de la nueva generación de protocolos OGC.

A diferencia del anterior WFS 1.x, donde el formato de salida básico es el XML, OGC API se basa en el estándar Open API y JSON. Las características de la nueva OGC API admiten capacidades similares, pero utilizan un enfoque moderno que sigue la arquitectura web actual y, en particular, las mejores prácticas del W3C/OGC para compartir datos espaciales en la web. De esta forma, aunque los mecanismos básicos sean idénticos, el concepto de REQUEST o SERVICE ya no existe. OGC API muestra los datos a través de una página web o mejor dicho, de una API.

La idea de utilizar tecnologías API hace que la exploración de datos sea más amigable tanto para el navegador web como para el desarrollador web.

Aquí hay un resumen de las diferencias más importantes entre el conocido protocolo WFS y WFS3:

  • WFS3 está basada en una API REST.
  • API WFS3 debe seguir las especificaciones OPENAPI.
  • WFS3 admite múltiples formatos de salida, pero no dicta ninguno (solo GeoJSON y HTML están disponibles actualmente en QGIS WFS3) y usa negociación de contenido para determinar qué formato se servirá al cliente.
  • JSON y HTML son los lenguajes por defecto en WFS3.
  • WFS3 se autodocumenta (a través del punto final /api).
  • WFS3 es totalmente navegable (a través de enlaces) y navegable.

QGIS Server implementa OGC API

QGIS Server implementa los protocolos estándares open web más comunes que establece el Open Geospatial Consortium (OGC). Es compatible con la certificación Web Map Service (WMS), Web Coverage Service (WCS), Web Feature Service (WFS) y ahora OGC API. Por el momento ni GeoServer ni ArcGIS Server aún no lo soportan.

Vamos a ver algunos ejemplos prácticos de uso de WFS3 (OGC API). En lugar de explorar un proyecto con una solicitud GetCapabilities, se recupera una colección JSON con capacidades de capas con una url similar a esta:

http://localhost/cgi-bin/qgis_mapserv.fcgi.exe/wfs3/collections.json

La plantilla HTML

Lo interesante de la especificación Open API es su elegante simplicidad, lo que significa que mostrar una colección en HTML es bastante fácil. El estándar OGC API – Features también alienta a los implementadores de software de servidor a hacer que los servicios hablen el idioma nativo de la Web: la página de destino del servicio HTML, mucho más amigable en comparación con tener el documento  de capacidades XML del servicio web OGC tradicional. La gran ventaja radica en que cualquier usuario puede explorar los datos servidos por el servidor a través de una simple página web.

De esta forma, QGIS Server proporciona una plantilla HTML predeterminada. La página de inicio de OGC API – Features para QGIS Server está disponible en la siguiente URL:

http://localhost/cgi-bin/qgis_mapserv.fcgi.exe/wfs3/

El resultado es la vista de la Página de destino:

OGC API - Features

Desde aquí podemos explorar la API haciendo clic en API description o incluso mostrando información en una capa específica gracias al enlace Feature Collections. También podemos acceder a la página HTML correspondiente a través de la misma solicitud que para recuperar las capacidades de las capas:

http://localhost/cgi-bin/qgis_mapserv.fcgi.exe/wfs3/collections/cities.html?MAP=C:/Ejemplos_QGIS_Server/paises.qgs

También podemos seleccionar un objeto espacial de la siguiente forma:

http://localhost/cgi-bin/qgis_mapserv.fcgi.exe/wfs3/collections/cities/items/20?MAP=C:/Ejemplos_QGIS_Server/paises.qgs

Filtros de atributos

Ejemplo filtrando por un atributo (en la documentación de QGIS Server viene mal explicado

http://localhost/qgisserver/wfs3/collection_one/items.json?attribute_one=my%20value

http://localhost/cgi-bin/qgis_mapserv.fcgi.exe/wfs3/collections/cities/items?MAP=C:/Ejemplos_QGIS_Server/paises.qgs&NAME=Minsk

Como resultado hemos obtenido una página web que nos muestra los valores para la ciudad seleccionada y el mapa correspondiente. Observa que estamos utilizando:

  • collections/cities: para indicar la capa sobre la que hacemos la consulta.
  • items/20: para seleccionar el valor a consultar, en este caso es la ciudad identificada con el id=20
  • NAME=Minsk para seleccionar por columna.

Se puede indicar en la url el formato de la página. Por ejemplo, si cambiamos en la petición anterior collections/ por collections.json la página se muestra en formato JSON.

Acceso a servicios OGC API – Features desde QGIS

Como podemos ver en la imagen siguiente, QGIS puede acceder de forma nativa a OGC API – Features al realizar la conexión con servicios WFS:

OGC API desde QGIS

Más info:

  • https://docs.qgis.org/3.16/es/docs/server_manual/services.html#wfs3-ogc-api-features
  • https://github.com/opengeospatial/ogcapi-features
  • https://docs.ogc.org/is/17-069r3/17-069r3.html
  • https://pblottiere.github.io/2019/09/18/wfs3/
  • https://www.spatineo.com/what-is-wfs3-ogc-api-features/
  • https://www.geosolutionsgroup.com/blog/wfs3-geoserver/

También os dejamos un vídeo de las conferencias FOSS4G sobre la API de OGC: