lunes, 25 de febrero de 2019

Caso práctico SASPlanet: añadir capas o mapas WMS.

Algunos amigos del blog me comentan que les gustaría tener alguna capa en SASPlanet que contuviera las curvas de nivel de España, de forma que la pudieran superponer fácilmente sobre ortofotos o cualquier mapa que carezca de ellas. En nuestro lote del programa se incluyen algunas capas de relieve pero lo cierto es que ninguna nos parece demasiado convincente... Así pues nos hemos dicho que esta es una buena excusa para explicar con todo detalle el proceso para hacerlo. Vamos allá.

Lo primero que necesitamos es un servicio web que ofrezca lo que buscamos. Y lo encontramos en el WMS del SCN que lleva por título Modelos Digitales de Elevaciones de España. Aunque en su archivo de capacidades tenemos toda la información (sobre la que volveremos más adelante), abrimos el servicio en QGIS para una descripción de su contenido mucho más amable.

La descripción del servicio nos deja muy claro que contiene lo que buscamos, y además ya nos informa que la equidistancia de las curvas es de 50 metros. El servicio contiene también otros elementos en distintas capas: puntos acotados y mapas de pendientes, orientaciones, sombreado y relieve. La URL de este WMS es http://servicios.idee.es/wms-inspire/mdt

Debemos ahora por tanto configurar el archivo necesario para que SASPlanet sea capaz de visualizarlo. Aunque ya explicamos en su día los conceptos básicos para agregar fuentes de mapas al programa, repasamos rápidamente sobre la marcha.
Aunque desde programas como QGIS disponemos de toda la información del servicio cómodamente en agradables ventanas...
... cabe la posibilidad de que no uséis software de este tipo, por lo que vamos a hacerlo con el método infalible que no tiene necesidad de ningún programa alternativo. Todo servicio WMS dispone de un archivo de capacidades que puede invocarse a partir de su URL. Para ello generalmente debemos añadir la expresión ?SERVICE=WMS&REQUEST=GetCapabilities a su dirección URL.

Añadimos pues esta dirección completa a nuestro navegador de internet:
http://servicios.idee.es/wms-inspire/mdt?service=WMS&request=GetCapabilities
Y nos aparece la página con la estructura XML conteniendo toda la información del servicio:
No os asustéis, algunas de estas páginas tienen miles de líneas pero este WMS es cortito. De entre todo este mogollón de caracteres vamos a ir buscando los que nos interesan descendiendo progresivamente por ella.
Lo primero importante son los formatos de salida que soporta el WMS cuando se le hacen las peticiones (sobre todo los de imagen, ya que lo queremos para SASPlanet)...
Importantes son también los sistemas de coordenadas (CRS) que admite. SASPlanet solamente admite unos pocos y nosotros usamos casi siempre WGS84 cuyo EPSG es el 4326...
En esta parte observamos también el llamado BoundinBox, esto es, el marco espacial que cubre el servicio WMS con sus coordenadas límite por norte, sur, este y oeste.
Llegamos después al listado de capas, fácilmente identificables por la palabra Layer. La primera es la de los puntos acotados y en segundo lugar aparece la que nos interesa:
Las capas tienen dos atributos que vamos a necesitar: el nombre (Name) y el nombre del estilo (Style), marcados en verde en la imagen superior. Así tenemos que el Name operativo de nuestra capa de curvas de nivel es EL.ContourLine y que la capa tiene dos estilos de representación posibles bajo los nombres curvasnivel o EL.ContourLine.Default
Inciso: cada WMS es un mundo... Unos tienen un style marcado en cada capa y otros muchos usan default como parámetro de estilo, o incluso está en blanco. Lo que si es común a todos es que cualquier error en la literalidad al transcribir estos parámetros supone que no podamos visualizar su contenido, por lo que debemos asegurarnos de poner exactamente lo mismo que vemos, tanto en la URL como en los nombres de capa y estilo.
Con esto ya tenemos toda la información que necesitamos del archivo de capacidades del WMS. Ahora es el turno de elaborar el archivo de configuración para SASPlanet. Dicho archivo lleva por nombre params.txt, es un archivo de texto simple perfectamente modificable con cualquier editor de texto (como el bloc de notas de Windows), y se encuentran dentro de una carpeta con extensión .zmp junto con dos archivos más: GetUrlScript.txt y un icono del mapa normalmente llamado 24.bmp (aunque valen otros nombres y formatos). Preparamos el directorio resumido en esta imagen:
Estructura y ruta a nuestra nueva carpeta .zmp (le hemos dado un nombre identificativo como Curvas IGN) de configuración del nuevo mapa (capa), dentro de la carpeta Maps del directorio SASPlanet. La hemos ubicado dentro del directorio SPAIN pues queremos que la nueva capa pertenezca a dicho menú.
Los tres archivos del interior de la carpeta .zmp podéis cogerlos de cualquier otro mapa a modo de plantilla (por ejemplo de otro WMS del IGN como el PNOA), y a partir de ahí procedemos a hacer las modificaciones necesarias en el archivo params.txt de acuerdo con la información que hemos sacado del archivo de capacidades. Nuestro params.txt quedaría así:
Archivo params.txt con todas las modificaciones necesarias para configurar el nuevo servicio WMS. Paso a describir los parámetros más importantes:
  • GUID: se trata de un numero único correspondiente a cada mapa y que no debe repetirse. Podéis modificar algún número del mismo o generar uno nuevo aleatorio desde algunas webs.
  • name_es: el nombre con el que el mapa va a aparecer en nuestro menú de mapas de SASPlanet. Una línea por cada posible idioma del programa (español, inglés, ucraniano).
  • ParentSubmenu_es: categoría del menú dentro de la cual se va a ubicar el mapa. Lo mismo para los tres idiomas.
  • NameInCache: nombre de la carpeta donde van a almacenarse los mosaicos de imágenes.
  • asLayer: define si el mapa va a ser mapa principal (0) o CAPA (1). En este caso ya hemos comentado que las curvas las queremos como capa, así pues ponemos 1 para que el mapa nos aparezca en el menú de capas de SASPlanet.
  • DefURLBase: la dirección URL del servicio WMS, con el signo ? pues forma parte de una expresión completa (petición de mapa GetMap). El parámetro TRANSPARENT alude la posibilidad de que el mapa tenga transparencia, lo que es vital para una capa de curvas (true permite la transparencia, false la niega).
  • LAYERS: el nombre de capa que figura en las capacidades del WMS.
  • STYLES: el estilo de representación del servicio. Nosotros hemos elegido curvasdenivel pero como hemos visto más arriba disponemos de dos opciones que pueden venirnos muy bien dependiendo del mapa de fondo: 

A la izquierda el estilo de nombre curvasnivel y a la derecha el estilo llamado EL.ContourLine.Default 
Uno tiene trazo más fino en las curvas y etiquetado y el otro trazo más grueso sin etiquetas de altitud.
Una vez todo listo salvamos los cambios en el archivo params.txt y arrancamos SASPlanet para confirmar que nuestra nueva capa aparece en el menú de capas del programa y dentro de su grupo:

Y la activamos sobre por ejemplo el Mapa Base del IGN para ver el resultado:

Ya tenemos disponibles las curvas de nivel cada 50 metros de todo el territorio nacional a partir de la escala 1:200.000 (zoom 13 o mayor en SASPlanet). Son de enorme utilidad para muchas cartografías que carecen de ellas, como el mapa estándar OSM:

Un último apunte para terminar. Si queréis aprovechar el mismo archivo .zmp y enriquecerlo con más información, podéis añadir otra de las capas disponibles en este mismo WMS como son los puntos acotados. Recordad que también tenían dos estilos a elegir... Simplemente añadimos el nombre de la nueva layer y del nuevo estilo en su capítulo correspondiente separados por comas, tal que así:
De esta forma podéis añadir varias capas de un mismo WMS en un mismo archivo, teniendo siempre en cuenta si se prestan a ello por contenido, transparencia, orden de visualización, etc...

Notas:
1.- El archivo params.txt tiene otros muchos parámetros (formato de imagen, tiempo de espera en el servidor, sistema de coordenadas, color de fondo, bounding box, etc...) que podrían ser importantes a la hora de configurarlo.
2.- No todos los WMS son tan sencillos y bien estructurados como este ejemplo. En ocasiones somos incapaces de hacerlos funcionar en SASPlanet, por incompatibilidad de proyección, del mismo servicio, o simplemente por insuficientes conocimientos.
3.- Explicado queda para los restos lo más importante de lo que sabemos a la hora de añadir mapas o capas a SASPlanet... Suerte!!

lunes, 11 de febrero de 2019

Caso práctico QGIS: acciones.

Las acciones de QGIS nos permiten añadir muchas funcionalidades extra a nuestros mapas, permitiendo por ejemplo obtener información visual de un objeto o enlazarlo con diverso contenido web. Por resumirlo con claridad, una acción es algo que ocurre cuando pinchamos en un elemento.

Para un primer ejemplo vamos a utilizar imágenes, de forma que al clicar sobre los elementos de nuestro mapa se nos muestre la imagen que hayamos predefinido en sus propiedades. Para este caso práctico vamos a utilizar el archivo de una hoja BTN25 (entidades de población-polígonos). Comenzamos:
Archivo con entidades de población para este caso práctico cargado en QGIS.
1.- Crear el campo para las imágenes.
Lo primero que necesitamos es que la tabla de atributos de nuestro elemento contenga el campo necesario para asociar las imágenes. Seleccionamos nuestra capa de entidades de población y entramos en sus Propiedades (doble click o click derecho sobre ella y Propiedades), y dentro de ellas en la pestaña Campos.

Activamos la edición de la capa (1), pulsamos crear nuevo campo (2) y lo rellenamos con las características (3) que veis en la siguiente secuencia:
Aceptamos y nuestro nuevo campo de nombre IMAGEN queda añadido a la tabla de atributos de nuestra capa de entidades de población. 
El siguiente paso no sería necesario pues podemos añadir la ruta a la imagen directamente en el campo, pero seguimos los consejos de nuestro artículo guía de mappingGIS, ya que de esta forma es más elegante y nos permite mayor control de las opciones.
A continuación vamos a la pestaña Formulario de atributos y seleccionamos nuestro nuevo atributo IMAGEN:
En Tipo de control seleccionamos Adjunto y marcamos la casilla Usar un hiperenlace para la ruta de documentos (esto nos genera un link clicable en la ruta del archivo). Podemos activar Mostrar la ruta completa (en el link a la imagen) y Integrated Document Viewer en Tipo: Imagen si queremos tener un thumbnail de la imagen.
Aplicamos y aceptamos.
2.- Vincular la imagen al elemento. 
Sin salir del modo edición utilizamos la herramienta Identificar objetos espaciales para hacer click en aquel al que deseamos vincular la imagen. En nuestro ejemplo el pueblo de San Martín del Castañar.
Al estar en modo edición tenemos activo el botón para buscar la ruta a nuestra fotografía en el campo IMAGEN (círculo rojo).



Tras buscar la ruta al destino de la fotografía seleccionada, nuestra ventana de atributos nos muestra en el campo IMAGEN el texto con el nombre de la imagen (que además es un hiperlink que ya por sí mismo nos abre la imagen en  nuestro visor de imágenes por defecto) y una miniatura de la misma adaptable al tamaño de la ventana.

Aceptamos y repetimos el mismo proceso con todas las imágenes que necesitemos vincular con cada elemento vectorial.

Una vez terminado guardamos los cambios y salimos del modo edición.







3.- Creando la acción.
De nuevo abrimos las Propiedades de la capa para entrar en la pestaña Acciones. Procedemos según esta secuencia:
1.- Pulsamos el botón + para añadir una nueva acción. 2.- En la ventana completamos campos: en Tipo seleccionamos Abrir, en Descripción añadimos el texto descriptivo de la acción, y en la ventana de texto de la acción debemos insertar el texto [%IMAGEN%]. Esto puede hacerse manualmente o buscando el atributo IMAGEN en la pestaña de campos y pulsando el botón Insertar.
Cuando esté todo listo aceptamos y la acción creada aparece en la ventana de la lista de acciones.
Aplicamos y aceptamos.
4.- Ejecutando la acción.
Con nuestra capa de entidades de población activa clicamos el botón de acciones y seleccionamos la acción que acabamos de crear "Mostrar imagen".
Si hubiera más acciones disponibles aparecerían en la lista desplegable como veremos más adelante.
El cursor cambia a una cruz y hacemos click sobre el elemento en cuestión:
Nuestro visor de imágenes por defecto (en mi caso XnView) nos muestra la imagen enlazada al elemento.
Conseguido. Este es el proceso básico de añadir una acción explicado al detalle. En base a él podemos añadir muchos tipos de acciones, algunas válidas para todos los elementos de la capa y sin necesidad de crear campos específicos, como por ejemplo Buscar en la web por valor de un atributo.

En la imagen de la izquierda vemos la configuración de la acción, en la que aprovecharemos como elemento de búsqueda el atributo ETIQUETA de nuestra capa de entidades de población, ya que es el que contiene el nombre de los pueblos y por tanto el ideal para una búsqueda en Google.

Una vez añadida la acción nos aparecerá para elegirla en el desplegable del botón de acciones.








Usando la acción en tres entidades diferentes cada una nos abre una ventana del explorador con la búsqueda de Google.

Ejemplo de acción "Abrir archivo" con un PDF enlazado al polígono de San Martín del Castañar.
Acciones hay muchas y puede haber las que os dicte vuestra imaginación o los conocimientos de códigos para crearlas. En la ventana de acciones están disponibles unas cuantas predeterminadas con las que podemos empezar a hacer nuestros pinitos. Y a partir de ahí es cuestión de maña enriquecer nuestros proyectos con este montón de posibilidades paralelas que nos dan las acciones. Saludos.
Abriendo directamente la búsqueda en la web de Wikipedia por el atributo ETIQUETA del elemento (nombre el pueblo).

lunes, 4 de febrero de 2019

CORINE Land Cover 2018

Como anunciamos hace unos días en nuestra página de Facebook, ya se encuentra disponible la nueva versión de la base europea de ocupación del suelo Corine Land Cover 2018 (CLC2018). Podemos obtenerla a través del Centro de Descargas del CNIG, y se trata de la actualización pertinente de Corine 2012 de la que ya hablamos en el blog. Analizamos su contenido.
Listado de productos por año Corine disponibles en el Centro de Descargas, incluida la versión 2018 objeto de este artículo. Incluye las versiones de 1990, 2000, 2006, 2012 y 2018, así como los mapas de cambios de ocupación del suelo entre los años 1990-2000, 2000-2006, 2006-2012 y 2012-2018.
Lo primero que llama la atención de esta nueva versión de Corine es los formatos en los que se ofrece. Al igual que sucedió con el reciente SIOSE 2014, el IGN ha abandonado el formato shape SHP en favor de los formatos vectoriales .GDB (ArcGIS) y GeoPackage. Es este último formato abierto .GPKG el que nos interesa en Cartografía Digital, no sin antes reiterar nuestra extrañeza por el abandono de un formato actualmente universalizado como .shp en favor de uno comercial.
El IGN ofrece también acceso a la descarga de información auxiliar del producto (con exhaustiva documentación técnica sobre su creación) y enlace a los metadatos de cada versión, en los que encontramos información relevante como esta definición general: Mapa de ocupación del suelo en España correspondiente al proyecto europeo CORINE Land Cover (CLC) con una nomenclatura de 44 clases, versión del año de referencia 2018. En España el Sistema geodésico de referencia utilizado es ETRS89 (en Canarias, WGS84/REGCAN95) y proyección UTM huso 30 (en Canarias, huso 28). El proyecto CORINE Land Cover (CLC) es responsabilidad desde 1995 de la Agencia Europea del Medio Ambiente con el objetivo fundamental de obtener una base de datos europea de ocupación del suelo a escala 1:100.000, útil para el análisis territorial y la gestión de políticas europeas. En la actualidad este proyecto está incluido en el Programa «Copernicus», cuyo principal objetivo es establecer un Sistema de Observación de la Tierra bajo el mandato de la Comisión Europea.
O este otro interesante párrafo: El CORINE Land Cover se obtuvo mediante fotointerpretación sobre imágenes de satélite Sentinel 2, Landsat en falso color (combinación de bandas 453) y Spot como referencia básica del proyecto, utilizándose como apoyo otras bases de datos geográficas, como mapas topográficos o temáticos relativos a la ocupación del suelo y ortofotografías aéreas, así como otra información exógena de apoyo a la fotointerpretación. La producción se produjo de manera coordinada entre diferentes organismos públicos. Sobre las imágenes se delimitaron áreas o zonas susceptibles de representar una unidad de ocupación del suelo según CORINE Land Cover, asociando a cada zona una clase de nomenclatura CLC y extendiendo esta delimitación a un conjunto de zonas de la imagen que presentaran características similares, consiguiendo una base de datos continua para todo el territorio.
La descarga del paquete comprimido 2018 - CLC2018-GPKG.ZIP correspondiente a todo el territorio nacional tiene un tamaño de 1,23 Gigas, y en su interior encontramos el siguiente contenido:

- CLC2018_ES.gpkg: es la base vectorial Corine propiamente dicha en formato GeoPackage.
- LEER_DatosCLC2018_gpkg.pdf: archivo PDF explicativo de la descarga y que contiene los imprescindibles códigos de la nomenclatura Corine.
LEYENDA_CLC.lyrLEYENDA_CLC.sld: archivos con la simbología de capas CLC en esos dos formatos (.lyr para ArcGIS y .sld para software abierto).



Una vez descomprimido nuestro archivo GeoPackage vemos que tiene el nada desdeñable tamaño de 2,83 Gigas, por lo que un ordenador de cierta potencia se agradecerá en su manejo. Con toda seguridad las diferentes regiones irán ofreciendo próximamente recortes autonómicos de un tamaño más comedido del producto. Cargamos Corine en QGIS para ver lo que nos ofrece:

De nuevo observamos las bondades de este formato .gpkg abierto en QGIS: la simbología de capas se muestra por defecto, lo que hace que la primera impresión del producto ya sea inmejorable. En cuanto al contenido, nuestro archivo CLC2018_ES.gpkg nos ofrece cuatro capas perfectamente diferenciadas (QGIS nos da la opción previa de cargarlas todas o de forma individual).


- CHA18_ES: capa de cambios 2012-2018 para Península e Islas Baleares.
- CHA18_ES_Canarias: idem para las Islas Canarias.
- CLC18_ES: Corine Land Cover 2018 para Península e Islas Baleares.
- CLC18_ES_Canarias: idem para las Islas Canarias.



¿Qué campos nos ofrece la tabla de atributos de cada capa?
Las capas correspondientes a la versión 2018: CODE_18: código CLC. AREA_HA: superficie del polígono en hectáreas. Las capas correspondientes a los cambios 2012-2018: CODE_12: código CLC en 2012. CODE_18: código CLC en 2018. CHANGE: código 2012-código 2018. 
La documentación adjunta a CLC2018 afirma que las capas de cambios 2012-2018 llevan también el atributo AREA_HA, pero parece que no. A ellos hay que sumarle el campo ID que otorga un identificador único en la tabla a cada polígono.
Obviamente para trabajar con los datos CLC se hace imprescindible conocer los códigos que identifican el uso de cada parcela, y que como hemos comentado se encuentran en el archivo PDF de la descarga.
Tabla de códigos CLC por categoría correspondientes al atributo CODE del archivo vectorial.
De esta forma sabremos rápidamente que un CODE 312 (3.1.2.) corresponde a una parcela con bosque de coníferas, o que el CODE 222 (2.2.2.) identifica una zona con frutales. Igualmente si el atributo CHANGE es 333-211, sabremos de inmediato que la parcela en cuestión era un espacio con vegetación escasa en 2012 y ha pasado a ser en 2018 tierra de labor en secano. La herramienta Identificar objetos espaciales de QGIS es para ello de gran comodidad.

Incluso la comodidad sería aún mayor si agregáramos un campo a las tablas con el texto de cada CODE, lo que nos evitaría tener que consultar la documentación para conocer el uso descriptivo del polígono.

De la misma forma que trabajábamos con los datos SIOSE, aunque la complejidad de códigos es aquí mucho menor al haber un único uso de suelo por parcela, podemos efectuar consultas espaciales sobre los datos CLC. Un ejemplo sencillo sería buscar las parcelas catalogadas como viñedos y con una extensión mayor de 3 hectáreas y menor de 50:
Resultados de la selección por expresión reflejados en la tabla de atributos: 17 parcelas.
Respecto a la capa de cambios producidos entre CLC2012 y CLC2018 (casi 20000 en la capa peninsular) no hay mucho que añadir. Esta capa no contiene simbología integrada y nos discrimina aquellos polígonos que han sufrido algún cambio en los usos del suelo (o simplemente en su extensión manteniendo el uso) durante dicho periodo.
Capa de cambios (negro) mostrando aquellas parcelas CLC2012 que en 2018 (derecha) han cambiado de uso o extensión.
No queremos terminar sin hablar del archivo con la simbología de capas presente en la descarga, el mencionado LEYENDA_CLC.sld de formato abierto. Os preguntaréis para qué sirve si el archivo GeoPackage ya se abre en QGIS con la simbología correcta cargada... Aparte de que el archivo puede servirnos para otros softwares que no actúen como lo hace QGIS, imaginaos que yo he hecho un recorte de CLC2018 de la zona de Valencia y lo he guardado en formato SHP. Cuando cargue dicho archivo en QGIS lo hará con una simbología única:

Peeeero gracias a nuestro archivo SLD de simbología nos será muy fácil cargarle el estilo CLC2018. Nos vamos a las Propiedades de la capa, pestaña Simbología, botón Estilo en la parte inferior. 
Seleccionamos Cargar estilo... y buscamos la ruta a nuestro archivo LEYENDA_CLC.sld
Pulsamos en Cargar estilo y.....
La simbología basada en reglas de CLC2018 se carga en nuestra capa.
Simplemente aplicamos y aceptamos y nuestro recorte SHP queda configurado con la simbología CORINE del GeoPackage original.
En realidad trabajando con QGIS podríamos haber salvado nosotros mismos el estilo del archivo GeoPackage en un archivo SLD, pero desconozco si otros softwares cargan el GPKG con la simbología integrada, por lo que este archivo de estilo sería muy importante.
El producto CLC2018 ya se encuentra así mismo disponible a través de los servicios web de ocupación del suelo del IGN (WMS, WMTS y WFS) con la misma simbología vista en este artículo.
Y ya que teníamos todo cargado no nos hemos resistido a jugar un poco con el diseñador de impresión para finalizar.... Saludos!!