QGIS Server es una aplicación de código abierta compatible con la certificación Web Map Service (WMS), Web Feature Service (WFS) y Web Coverage Service (WCS). Implementa pues, los protocolos estándares open web que establece el Open Geospatial Consortium (OGC).
QGIS Server utiliza un proyecto de QGIS como back-end para crear el servicio. Los mismos datos y estilos de QGIS se mostrarán en el servicio WMS. Es por tanto, una herramienta muy útil para todos los usuarios de QGIS, pues pueden crear servicios de OGC directamente desde los datos de su proyecto.
QGIS Server puede servir datos de acuerdo con los protocolos estándar descritos por Open Geospatial Consortium (OGC):
- WMS 1.1.1 y 1.3.0
- WFS 1.0.0 y 1.1.0
- OGC API – Features (WFS3)
- WCS 1.1.1
- WMTS 1.0.0
QGIS Server es una aplicación FastCGI/CGI (Common Gateway Interface) escrito en C++ que trabaja junto con un servidor web (por ejemplo, Apache, Lighttpd). Tiene compatibilidad con los complementos creados con Python, lo que permite un desarrollo e implementación rápidos y eficientes de nuevas funciones.
Índice
¿Qué podemos hacer con QGIS Server?
- Crear servicios WMS: publicar en la web tanto las capas como los mapas creados con QGIS. Como el QGIS de escritorio y QGIS Server usan las mismas bibliotecas de visualización, los mapas que se publican en la web tienen el mismo aspecto que en el escritorio SIG.
- Utilizar una simbolización cartográfica avanzada
- Identificación de las características y visualización de datos de atributos.
- Salidas en PDF.
¿Qué es un WMS?
En Europa y España, para facilitar el acceso, manipulación e intercambio de información geográfica en la web, se siguen las especificaciones de interoperabilidad del Open Geospatial Consortium. El objetivo es facilitar el intercambio de información geográfica.
Un servicio web de mapas o Web Map Service (WMS) es un protocolo estándar definido por el OGC que sirve imágenes de mapas a partir de información geográfica.
En este caso, un mapa no consiste en los propios datos, sino en una imagen de los mismos.
Las operaciones WMS se invocan utilizando un navegador estándar (p. ej. Firefox) o mediante aplicaciones de escritorio (p. ej. QGIS) y realizando peticiones en la forma de URL. El contenido de la URL depende de la operación solicitada.
En el artículo de cómo crear un WMS con Geoserver explicamos con detalle cómo crear peticiones GetMap y GetCapabilities, por lo que te remitimos a leer aquel artículo y no repetir el mismo contenido.
En nuestro curso online desarrollo de aplicaciones webmapping te explicamos cómo crear reglas de solicitud WMS, crear operaciones GetCapabilities, GetMap, GetFeatureInfo, DescribeLayer y GetLegendGraphic; Web Feature Service (WFS): sus operaciones y reglas de solicitud; Web Coverage Service (WCS) y sus operaciones; el Servicio de Procesamiento Web (WPS) y el perfil Styled Layer Descriptor (SLD).
Trabajando con servicios WMS en QGIS Server
QGIS Server no dispone de una interfaz de administración Web como la que sí tiene GeoServer. En su lugar la configuración la realizaremos directamente desde QGIS. Lo que sí debemos realizar antes de comenzar a trabajar con QGIS Server es iniciar Apache. Si hemos realizado la instalación con Xamppp como indicamos en este tutorial, bastará con abrir el panel de control de XAMPP e iniciar el módulo de Apache, haciendo clic sobre el botón Start:
Crear el proyecto .gqs
Para crear un servicio WMS el primer paso será crea un nuevo proyecto de QGIS. Lo denominaremos paises y añadiremos un par de capas, una de países (countries) y otra de ciudades de mundo (cities).
Aunque podemos guardar el proyecto de QGIS en cualquier directorio, es recomendable ubicar el proyecto .qgs en el directorio C:\OSGeo4W\apps\qgis\bin. Si ponemos el proyecto en este directorio, será servido por defecto sin tener que utilizar el parámetro de mapa opcional.
En nuestro caso hemos creado el proyecto paises.qgs y lo hemos ubicado en el directorio C:/Ejemplos_QGIS_Server. ASí que utilizamos el parámetro MAP y la ruta al proyecto.
Podemos hacer una petición a un servicio WMS, escribiendo en el navegador la siguiente url:
Petición GetCapabilities
http://localhost/cgi-bin/qgis_mapserv.fcgi.exe? SERVICE=WMS& VERSION=1.3.0& REQUEST=GetCapabilities
Para obtener el documento de capacidades del proyecto concreto debemos utilizar el parámetro opcional de mapa indicando la ruta en la que se encuentra el proyecto:
http://localhost/cgi-bin/qgis_mapserv.fcgi.exe? SERVICE=WMS& VERSION=1.3.0& REQUEST=GetCapabilities& MAP=C:\Ejemplos_QGIS_Server\paises.qgs
Al solicitar de nuevo el documento de capacidades, el XML debería aparecer esta vez con los elementos consultables del proyecto. Podemos solicitar:
- GetMap: Devuelve un mapa.
- GetFeatureInfo: Recupera datos (geometría y valores) para una ubicación de píxeles.
- GetLegendGraphics: Devuelve símbolos de leyenda.
- DescribeLayer: Devuelve información sobre la disponibilidad de WFS y WCS respectivamente para capas vectoriales y ráster
- GetStyles: Devuelve un documento XML con descripción de estilo en SLD.
En el documento de capacidades también vemos las capas consultables y los sistemas de referencia de coordenadas disponibles:
<Layer queryable="1"><br /> <Name>countries</Name><br /> <Title>countries</Title><br /> <CRS>CRS:84</CRS><br /> <CRS>EPSG:4326</CRS><br /> <CRS>EPSG:3857</CRS> <EX_GeographicBoundingBox> </EX_GeographicBoundingBox> <BoundingBox CRS="EPSG:3857" maxy="18428919.358" miny="-44927335.428" maxx="20026376.394" minx="-20026376.394"/><BoundingBox CRS="EPSG:4326" maxy="179.9" miny="-179.9" maxx="83.6341" minx="-89.9"/> <Style> <Name>country_polygons</Name> <Title>country_polygons</Title>
Bueno, pues ya tenemos las capas del proyecto disponibles a través de un WMS.
Para comprobarlo, crearemos una nueva conexión WMS en QGIS, incluyendo como url la misma petición GetCapabilities que acabamos de mostrar:
Una vez creada aparecerán las capas disponibles en el servidor de mapas:
Seleccionamos la capa y podemos añadirla al proyecto, de esta forma ahora tendremos dos capas aparentemente iguales:
- La primera es la capa del servicio WMS, a la que nos hemos conectado de forma remota.
- La segunda es la original. Es una capa almacenada en local y en formato GeoPackage.
La petición GetMap
Ahora vamos a ver en el navegador la capa de ciudades de nuestro proyecto, para mostrar la capa necesitamos una petición GetMap.
En nuestro proyecto de QGIS (variable MAP) al menos debemos tener una capa LAYERS que se denomine countries.
La variable BBOX viene definida por el SRID, en este caso las capas están en el EPSG:4326, es decir el sistema WGS84, cuyas coordenadas máximas en latitud son 90º, -90º y las coordenadas máximas y mínimas de longitud son 180º y -180º.
http://localhost/cgi-bin/qgis_mapserv.fcgi.exe? SERVICE=WMS& VERSION=1.3.0& SRS=EPSG:4326& REQUEST=GetMap& MAP=C:\Ejemplos_QGIS_Server\paises.qgs& LAYERS=countries& BBOX=-90,-180,90,180& WIDTH=2000& HEIGHT=1000& FORMAT=image/png
Como resultado obtenemos una imagen con el mapa web:
La petición GetFeatureInfo
Parámetros obligatorios estándar para la petición GetFeatureInfo de acuerdo con las especificaciones OGC WMS 1.1.1 y 1.3.0 :
- SERVICE: Nombre del servicio (WMS)
- REQUEST: Nombre de la solicitud (GetFeatureInfo)
- WIDTH y HEIGHT: Ancho y alto de la imagen en píxeles.
- QUERY_LAYERS: Capas a consultar
- LAYERS: Capas para mostrar (idénticas a QUERY_LAYERS)
- SRS / CRS: Sistema de referencia de coordenadas
Ejemplo:
http://localhost/cgi-bin/qgis_mapserv.fcgi.exe? SERVICE=WMS& VERSION=1.3.0& SRS=EPSG:4326& REQUEST=GetFeatureInfo& MAP=C:\Ejemplos_QGIS_Server\paises.qgs& LAYERS=countries& QUERY_LAYERS=countries& BBOX=-90,-180,90,180& WIDTH=2000& HEIGHT=1000& FEATURE_COUNT=3& I=500& J=250
Resultado:
GetFeatureInfo results Layer 'countries' Feature 18 fid = '18' iso_a2 = 'US' NAME = 'United States of America' FIPS_10_ = 'US' ISO_A3 = 'USA' WB_A2 = 'US' WB_A3 = 'USA'
La petición GetFeatureInfo también se puede realizar en QGIS haciendo clic con el botón de identificar, de esta manera se abre en la ventana de resultados de la identificación una tabla en formato HTML. Esta tabla incluye la información del objeto geográfico sobre el que hayamos hecho clic:
La petición GetPrint
QGIS Server tiene la capacidad de crear una salida del Diseñador de impresión en formato PDF o de píxel. Las ventanas del Diseñador de impresión del proyecto se utilizan como plantillas. En la solicitud getprint, el cliente tiene la posibilidad de especificar los parámetros de los mapas y etiquetas del diseñador de impresión.
Nuestro proyecto tiene un único diseñador de impresión. En la respuesta del GetCapabilities, se enumeran las posibles plantillas de impresión (ComposerTemplate).
La petición que deberíamos realizar sería (es importante indicar las capas que queremos mostrar):
http://localhost/cgi-bin/qgis_mapserv.fcgi.exe? SERVICE=WMS& REQUEST=GetPrint& MAP=C:\Ejemplos_QGIS_Server\paises.qgs& LAYERS=countries,cities& SRS=EPSG:4326& TEMPLATE=Mundo& map0:EXTENT=-90,-180,90,180& WIDTH=1000&HEIGHT=500& FORMAT=pdf& DPI=300& TRANSPARENT=true
Y este es el resultado:
La petición GetLegendGraphic
Parámetros estándar para la solicitud GetLegendGraphics según las especificaciones OGC WMS 1.1.1 y 1.3.0:
Parametro | Requerido | Descripción |
---|---|---|
SERVICE | Si | Nombre del servicio (WMS) |
REQUEST | Si | Nombre de la solicitud (GetLegendGraphics) |
VERSION | No | Versión del servicio |
LAYERS | Si | Capas a mostrar |
Ejemplo:
http://localhost/cgi-bin/qgis_mapserv.fcgi.exe? MAP=C:\Ejemplos_QGIS_Server\paises.qgs& SERVICE=WMS& VERSION=1.3.0&REQUEST=GetLegendGraphic& LAYER=countries& FORMAT=image/png& STYLE=default& SLD_VERSION=1.1.0
Resultado:
Trabajando con servicios WFS en QGIS Server
El protocolo WFS 1.x incorporaba 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.
Para poder disponer de las capas como servicio WFS es necesario publicar las capas. Para ello debemos ir al menú superior Proyecto → Propiedades… → Servidor de QGIS → Pestaña WFS/OAPIF
Solicitud GetCapabilities
Los parámetros estándar para la solicitud GetCapabilities según las especificaciones OGC WFS 1.0.0 y 1.1.0 son SERVICE, REQUEST y VERSION. El parámetro MAP es opcional. Ejemplo:
http://localhost/cgi-bin/qgis_mapserv.fcgi.exe? MAP=C:/Ejemplos_QGIS_Server/paises.qgs& SERVICE=WFS& VERSION=1.1.0& REQUEST=GetCapabilities
Esta sería la url a utilizar para acceder desde cualquier cliente web o de escritorio para acceder a los servicios WFS.
La petición GetFeature
La petición GetFeature nos devuelve una selección de entidades de una fuente de datos. Los parámetros estándar obligatorios para la solicitud GetFeature de acuerdo con las especificaciones OGC WFS 1.0.0 y 1.1.0 son:
- SERVICE: Nombre del servicio (WFS).
- REQUEST: Nombre de la solicitud (GetFeature)
En adición a los estándares, QGIS Server soporta el parámetro extra MAP para indicar la ruta al archivo de proyecto QGIS. Ejemplo:
http://localhost/cgi-bin/qgis_mapserv.fcgi.exe? MAP=C:/Ejemplos_QGIS_Server/paises.qgs& SERVICE=WFS& VERSION=1.1.0& REQUEST=GetFeature& TYPENAME=countries& OUTPUTFORMAT=application/json
Y por último, para las peticiones a WFS OGC API os dejamos este completo tutorial.
La verdad es que trabajar con este servidor es realmente fácil y las respuestas obtenidas son iguales que las composiciones creadas con QGIS.
Licenciado en Geografía. Máster en Sistemas de Información Geográfica. Consultor GIS desde el año 2004. En MappingGIS desde el año 2012 para ayudarte a impulsar tu perfil GIS y diferenciarte de la competencia. Echa un vistazo a todos nuestros cursos de SIG online.