miércoles, 26 de julio de 2017

Complementos QGIS para Clasificación Supervisada con Imágenes Sentinel-2, Parte1









Si bien es cierto que el QGIS tiene un excelente complemento como el Semi-AutomaticClassification Plugin, el cual permite realizar clasificación supervisada a partir de imágenes de satélite y que en una entrada anterior se mostró el procedimiento para ello. En esta oportunidad voy a describir un par de complementos que también nos permiten realizar dicha clasificación, en sí me estoy refiriendo al plugin dzetsaka: classification tool y al kNN classifier; mi objetivo es mostrar el primero en esta entrega.

Fuente de Datos


Para el ejemplo usaremos una imagen proveniente del Sentinel2, de una zona comprendida en el Departamento de Madre de Dios en Perú. específicamente la imagen cubre la localidad de Mazuko. Para obtener la imagen ahora existen varias opciones, por mi parte lo hice a través de los datos disponibles a través del Amazon Web Services (AWS) y las imágenes pueden ser descargadas con el buscador Sentinel Image browser. Les recomiendo el vídeo  Tutorial - [Como descargar Sentinel 2 por grillas], como una buena guía de descarga.

Figura 1: Imagen del Sentinel-2 seleccionada para su descarga

De todas las bandas disponibles del Sentinel-2, se descargó las que tienen 10 metros de resolución espacial y luego abiertas en nuestro QGIS.


Figura 2: Vista de las bandas del Sentinel-2 dentro del QGIS.

Preparando nuestros datos


Ahora vamos a recortar nuestra zona de estudio, en mi caso por lo general uso la herramienta del QGIS alinear raster, primero haciendo un acercamiento a la zona de interés para luego considerarlo como zona de recorte a la extensión de la vista de mapa; en sí la herramienta es simple y muy práctica para recortar un raster con las mismas dimensiones y resolución.

Figura 3: Recortando nuestra zona de interés 


Con nuestras bandas al tamaño deseado cubriendo nuestra zona de interés, vamos a generar una composición de todas las bandas, para ello tenemos varias opciones, en mi caso por lo general uso "Images Concatenation" presente dentro de la Caja de herramientas del Orfeo.

Figura 4: Concatenando nuestras bandas para formar una composición.

Con nuestra imagen compuesta por las cuatro bandas (b2, b3, b4 y b8), podemos generar una combinación RGB de color verdadero con la finalidad de visualizar nuestra zona de estudio e iniciar la generación de una capa vector con las áreas de entrenamiento.


Figura 5: Composición RGB color verdadero

Clasificación Supervisada con dzetsaka: classification tool


Como siguiente paso debemos generar una capa vectorial con nuestras áreas o campos de entrenamiento, las cuales son definidas en campo en función al tipo de cobertura presente. Para fines didácticos se han asumido que se realizaron 45 muestras, por eso veremos esa cantidad de polígonos sobre nuestra imagen, asimismo se asumió que se dividen en 5 clases (1: Bosque, 2: Pastos, 3: Suelo desnudo, 4: Edificación, 5: Río y 6: Lecho de río.)

Figura 6: Vista de las áreas de entrenamiento

Para el plugin dzetsaka, tal como lo menciona en la descripción dentro de su repositorio, solo se necesita una capa raster y un archivo tipo Shapefile que contenga el ROI (Región de Interés), pero este último debe presentar una columna que contenga en números las clases designadas.

Figura 7: Tabla de atributos de la Región de Interés con la codificación de las clases
 

Este plugin rápido y fácil de usar, ha sido desarrollado por Nicolas Karasiak; inicialmente basado para el modelo "Gaussian Mixture" desarrollado por Mathieu Fauvel, actualmente soporta Random Forest, KNN y SVM; además se tiene la opción de trabajarlo desde la caja de procesado.

Ahora ya estamos listos para realizar una clasificación supervisada, pero antes no debemos olvidar que es un requisito tener instalado la librería de Python scikit-learn. Tal como se aprecia en la Figura 8, seleccionamos nuestra capa compuesta de las cuatro bandas, nuestro vector y el campo numérico que corresponde a las clases identificadas, luego verificamos que modelo vamos a emplear, le indicamos el archivo resultando y finalmente hacemos clic en "Perform the classification".

Figura 8: Ejecución del Complemento para Clasificación Supervisada
 

En primer lugar como ven usaremos el Gaussian Mixture Model, y una vez obtenido el resultado le daremos un estilo que nos permita identificar mejor las clases obtenidas.

Figura 9: Resultado de la Clasificación supervisada con Gaussian Mixture Model

Repitiendo el procedimiento para los otros algoritmos obtendremos resultados muy similares.


Figura 10: Resultado final empleando los otros modelas para Clasificación Supervisada

Finalmente con el complemento también podemos visualizar una matriz de confusión, como una manera de poder evaluar el desempeño del algoritmo, calculando los valores porcentuales del coeficiente de Kappa y la precisión global (Overall Accuracy) entre el mapa clasificado y los datos de referencia.

Figura 11: Vista la matriz de confusión que se genera por cada algoritmo


Como un tema adicional, si verificamos en nuestra caja de herramientas de procesado, veremos que el complemento está presente, teniendo la ventaja de poder realizar otras aplicaciones, como por ejemplo el "Split train and validation", el cual nos permite dividir nuestro datos de entrenamiento total en dos partes, las de entrenamiento en sí y las de validación, es decir que considera un porcentaje del total que serían necesarios para una validación posterior. En nuestro caso, tenemos 45 áreas de entrenamiento, y luego de ejecutar la aplicación vemos que ha dividido 23 zonas para entrenamiento y reserva 22 zonas para una validación, el cual permitirá evaluar nuestro estimador.

Figura 12: Generando una división de nuestras áreas de entrenamiento totales.

Por ahora es lo que tenía pensado mostrar, en la siguiente entrega se presentará al complemento kNN Classifier y sus particularidades.






sábado, 22 de julio de 2017

Cuando se juntan PostGIS+Geoserver+QGIS - Parte 3




Continuando con lo ofrecido, ahora nuestro objetivo es primero importar un archivo raster a nuestro Geoserver y luego desde el QGIS con el GeoServer Explorer gestionar nuestras capas contenidas en el mismo, también importaremos capas vectoriales, para esto último nos apoyaremos del GeoServer tools, el mismo que está disponible desde nuestra caja de herramientas, en fin veremos que ambas herramientas nos presentan o amplían nuestras posibilidades como la creación y editar estilos, asimismo el poder generar grupos sin necesidad de ingresar al GeoServer.


Incorporando datos raster al GeoServer


Como primer paso debemos agregar a nuestro espacio de trabajo, un origen de datos raster, para ello seguimos los mismos pasos vistos en las Figuras 12 y 13 de la entrada anterior, con la única diferencia que ahora se selecciona como origen de datos raster, un archivo GeoTIFF, y luego de ello le indicamos la carpeta donde está contenida nuestro archivo.


Figura 1: Adicionando nuestra capa raster


Ahora ya estamos listos para realizar la publicación de nuestra capa raster.

Figura 2: Capa raster lista para su publicación


En la parte de edición de capa, como ya sabemos podemos darle alguna descripción a nuestra capa y revisar los encuadres, adicionalmente por ser un raster, podemos verificar las características de la banda, es decir veremos si se trata de una capa multibanda o solo contiene una banda simple, este último es nuestro caso, por eso apreciamos que existe está definido por una escala de grises.

Figura 3: Editando nuestra capa raster

Luego de guardar la edición, podemos previsualizarlo con OpenLayers, pero como no le indicamos un estilo específico se verá en escala de grises. Tenemos la opción de como lo vimos antes, empleando el SLD2raster, generar el estilo y luego llevarlo al GeoServer agregando un nuevo estilo y desde ahí seleccionarlo para nuestra capa, pero ahora lo vamos hacer desde el QGIS empleando otro procedimiento.



Empleo del Geoexplorer


Primero en QGIS realizamos la conexión con un servicio WMS para contar con nuestra capa recién publicada, al hacerlo aparecerán todas las capas contenidas en nuestro espacio de trabajo.

Figura 4: Visualizando nuestra primera versión del raster con el estilo por defecto



Como siguiente paso activamos el panel del plugin GeoServer Explorer, asumimos que en pasos previos se empleo el SLD2raster para elevar nuestro estilo al GeoServer, ahora lo vamos a definir para nuestra capa ya presente en el QGIS. Ahora solo necesitamos agregar un nuevo "Catálogo".

Figura 5: Primeros pasos con el GeoServer Explorer


Ahora nos aparecerá nuestro espacio de trabajo con toda las capas que hemos publicado, lo que nos interesa ahora es adicionar el nuevo estilo que ya se encuentra en nuestro GeoServer a nuestra capa, para ello buscamos primero nuestra capa y en un subpanel inferior veremos las opciones que tenemos, en mi caso modifique el título y luego active "Add style to layer..", escogiendo luego el que habría sido elevado al GeoServer, se recomiendo luego activar la casilla de estilo por defecto.

Figura 6: Adicionando estilo a una capa raster con GeoServer Explorer

El paso siguiente será añadir de nuevo el servicio WMS y ahora comprobaremos que tenemos además de la opción del raster por defecto otra que nos mostrará el raster con el estilo definido. Es decir que ahora lo veremos de la siguiente manera:

Figura 7: Resultado de incorporar un estilo propio a nuestro raster

Hay que considerar que podemos aumentar otros estilos desde nuestra capa original, por lo tanto, vamos a abrir nuestro raster llamado "chicama" para ello podemos activar la opción "Add to current QGIS project", luego generamos otro estilo al que lo llamaremos "chicama_new", ahora comprobamos que lo podemos adicionar directamente a nuestro GeoServer, pero ahora será activando la opción "New style from QGIS layer..".

Figura 8: Incorporando estilos desde capas presentes en nuestro panel de capas



Bueno, ya vimos que este plugin nos facilita la gestión de nuestras capas subidas al GeoServer, en este caso trabajamos un archivo raster, lo mismo podríamos realizar para nuestras capas vectoriales, es cuestión de ir probando.

Una aplicación interesante por ejemplo es el hecho que podemos generar grupos, esto sobre todo si requerimos visualizar varias capas en una sola vista, por ejemplo supongamos que tenemos capas vectoriales y queremos subirlas al GeoServer y luego generar un grupo, para resolver nos apoyaremos del GeoServer tools.


Empleando el GeoServer tools


Dentro de la Caja de herramientas de procesado vamos a ubicar si esta activado al GeoServer tools, el cual presenta un grupo de geoalgoritmos, para nuestro caso emplearemos "Upload vector", porque necesitamos subir las capas vectoriales "estaciones_pluviometricas", "ana_administracion_local" y "rios_peru" (tomar en cuenta que se modificaron los nombres para no generar conflictos con las capas ya subidas desde el PostGIS, aunque también tienen la opción de crear otro espacio de trabajo).

Figura 9: Uso del GeoServer tools para adicionar capas vectoriales al GeoServer


Luego de subir todas las capas, debemos comprobar con el GeoServer explorer que se encuentran en nuestro espacio de trabajo, diferenciándose de los que fueron subidos con el PostGIS.

Figura 10: Vista actualizada de nuestro espacio de trabajo con las nuevas capas


Creando Grupos en GeoServer


Ahora vamos a crear nuestro Grupo denominado "ANA", seleccionando las capas vectoriales que acabamos de subir. 

Figura 11: Generando un Grupo en GeoServer con capas vectoriales

Luego de realizar esto, verificamos la creación del grupo y lo adicionamos directamente a nuestro lienzo activando "Add to current QGIS project..".

Figura 12: Vista de nuestro Grupo con estilos por defecto

Como se aprecia se visualiza sin estilo, ahora que sabemos manejar estilos y conocemos las opciones que tenemos para generar, vamos a recuperar los que ya hemos generado o extraerlo de las capas vectoriales que hemos empleado, lo importante ahora es editar nuestro grupo para que tenga el estilo que deseamos, finalmente hacemos clic en "Overwrite".

Figura 13: Editando nuestro grupo para incorporar nuestros estilos


Bien, finalmente para poder añadir este servicio WMS, pero como la categoría de grupo está a un nivel superior de capas y de espacio de trabajo, debemos crear una nueva conexión (Ver Figura 14 ), la cual va mostrar todo lo que tenemos en nuestro GeoServer, es decir todos nuestros espacios de trabajo y por supuesto el nuevo grupo creado.

Figura 14: Incorporando una nueva conexión WMS para visualizar todas las capas 
y grupos de nuestro servidor de mapas



Finalmente tendremos nuestro grupo "ANA" en nuestro lienzo, aunque creo que voy a tener que ajustar mejor el estilo, el objetivo se logró.

Figura 15:  Vista final en la vista de mapa de nuestro grupo creado 

Bueno, por ahora sería todo lo que quería mostrarles, como ven hay opciones que podemos considerar al manejar el GeoServer junto con el QGIS, les invito a probarlas. 
Hasta la próxima.


Referencias:

  1. https://github.com/boundlessgeo/qgis-geoserver-plugin
  2. http://boundlessgeo.github.io/qgis-plugins-documentation/geoserver/index.html
  3. https://mappinggis.com/2017/01/geoserver-plugin-configura-y-gestiona-geoserver-desde-qgis/
















martes, 18 de julio de 2017

Cuando se juntan PostGIS+Geoserver+QGIS - Parte 2



Importando un Raster al PostGIS







En esta segunda parte vamos a importar un archivo raster al PostGIS, para ello se cuenta con el ejecutable denominado raster2pgsql.exe, el cual permite para convertir fuentes de datos raster en tablas de base de datos. Si hemos realizado la instalación por defecto la aplicación se ubica en la ruta "C:\Program Files\PostgreSQL\9.6\bin\". 

Figura 1: Ubicación del ejecutable para importar raster a la base de datos



Para realizar el procedimiento ingresamos a la consola de Windows tipeando "cmd" y ejecutándolo como administrador, ya dentro podemos realizar la sentencia raster2pgsql -G, que nos permite conocer primero el listado de los diversos drivers disponibles para el manejo de datos raster.


Figura 2:  Opción para visualizar los formatos raster que funcionan con el raster2pgsql


Una vez que hemos seleccionado nuestra capa raster, para el ejemplo será un archivo tipo GeoTiff denominado "palcazu.srtm.tif", luego ejecutamos la siguiente sentencia.


Figura 3: Vista en consola de la secuencia de comandos para importar un raster a la base de datos


Para entender lo que se ha ejecutado de acuerdo a la opciones de los comandos considerados se tiene:

1. -s    Especifica el CRS a emplearse (EPSG: 4326, WGS84)
2. -I    Crea un índice espacial GIST en la columna ráster. 
3. -C   Define un conjunto de restricciones estándar en la columna ráster, después de que se cargar los  rasters.
4. -M  Ejecuta el comando VACUUM ANALIZE sobre la columna raster creada.
5.  Se define la ruta de ubicación del archivo raster a emplearse.
6.  -F   Adiciona una columna con el nombre de archivo raster. Por defecto rast
7.  -t    Corta un raster en "Tiles" para insertarlos uno por cada fila de la tabla creada. El  es expresado como WIDTHxHEIGHT, para este caso se indicó que sea 100x100.
8.  Se define el esquema donde se almacenará, en este caso "public" seguido del nombre de la tabla para la base de datos (dem1).
9.  Con psql se ingresa al terminal del  PostgreSQL, permitiendo con ello ejecutar consultas o scripts, en este caso se usa para primero definir al usuario de la base de datos "-U", el cual por lo general es "postgres", luego el nombre de la base datos al cual se conectará "-d", después se especifica el nombre de host de la máquina en la que se ejecuta el servidor "-h", como trabajamos en nuestra máquina se emplea el "localhost" y finalmente se especifica el puerto TCP, definido durante la instalación del PostgreSQL, por lo general es 5432.


Finalmente, tendremos como resultado una tabla adicionada dentro del Schema "public" de nuestra base de datos "peru", el cual como vimos en la Figura 3 se denomina "dem1".


Figura 4: Vista de la Tabla con nuestro raster dentro de la base de datos



Abriendo nuestro Raster en QGIS


Ahora que ya tenemos nuestro raster en el PostGIS, lo podremos abrir dentro de nuestro QGIS, para ello luego de habernos conectarnos a nuestra base de datos, podemos abrir la aplicación "Administrador de BB DD", el cual nos permite administrar todas nuestras bases de datos creadas hasta el momento, en este caso luego de activarlo (se ubica en la barra de menú llamada Base de datos), dentro de PostGIS vamos a comprobar que se adicionó una tabla a las ya creadas con datos vectoriales.

Figura 5: Vista de nuestra Tabla desde el Administrador de BB DD en QGIS


Para visualizarlo en la vista del mapa, simplemente hacemos un clic derecho y le indicamos la acción de "Añadir al lienzo" y desde ahí generamos un estilo para una mejor visualización.


Figura 6: Vista de nuestro raster aplicándole un estilo



Ahora si bien nosotros podemos darle nuestro propio estilo, a diferencia de las capas vectoriales, el QGIS no presenta la opción de forma directa para guardar estilo de tipo "SLD", el cual lo podríamos emplear cuando trabajemos con el Geoserver. Por lo tanto, vamos a emplear un plugin denominado "SLD4raster" y tal como lo indica en su descripción, soporta estilos multibanda, pseudocolor en banda simple,  gradiente (blanco a negro, negro a blanco), también de tipo interpolación de color y niveles de opacidad. Pero lo más importante es que se integra con la API de GeoServer Rest, es decir que proporciona la carga directa de los estilos que se genere previamente en el QGIS.


Figura 7: Entorno del SLD4raster con la opción de exportar un SLD o subirlo al GeoServer


Trabajando con GeoServer




Sin entrar en detalles GeoServer actúa como un Servidor Web, permitiendo servir mapas y datos de diferentes formatos para aplicaciones web; está escrito en Java y es de código abierto. Es resumen los usuarios solo necesitarían un Web Browser para visualizar los mapas tal como tu lo has creado.

Empecemos, una vez que instalan el GeoServer y entran desde su web browser, el cual por lo general es desde "http://localhost:8080/geoserver/", desde ahí solo tienen que identificarse como administrador, por defecto el usuario es "admin" y el password es "geoserver", y claro se recomienda  por seguridad luego cambiar esos datos.

Figura 8: Vista de nuestro GeoServer como administrador 


Como primer paso vamos a crear nuestro espacio de trabajo.

Figura 9: Creando nuestro espacio de trabajo

Luego procedemos a configurar dicho espacio, es decir le indicamos un nombre y después un URI con el cual nos van a identificar y que se relaciona con nuestro espacio de trabajo.

Figura 10: Configurando nuestro espacio de trabajo


Ahora ya podemos editar nuestro espacio de trabajo, sobre todo para habilitar los servicios que vamos a brindar con nuestros datos, en este caso habilitamos todos (WMS, WFS, WCS, WMTS). Desde aquí una vez activado la casilla de "Habilitado", podemos también indicar nuestros datos más específicos, como la persona de contacto y nombre de la Organización.

Figura 11: Editando nuestro espacio de trabajo.


Como paso siguiente, vamos a crear nuestro primer almacén de datos para el espacio de trabajo. Es decir que le indicaremos nuestra fuente de datos.

Figura 12: Creando un nuevo almacén de datos


Para nuestro ejemplo nuestro origen o fuente de datos serán vectores pero que provengan de nuestro base de datos PostGIS.


Figura 13: Seleccionando al PostGIS como nuestro nuevo origen de datos

Ahora además de indicarle el nombre de nuestro origen de datos, necesitamos llenar la información de conexión.


Figura 14: Configurando nuestro conexión al PostGIS en el GeoServer

Luego ya podremos verificar que dentro de nuestro origen de datos establecido, se pueden apreciar una lista de tablas, las cuales serán todas aquellas que están presentes en nuestra base de datos, y nosotros ya estaríamos listos para publicar aquellos que necesitamos que se compartan por la web.


Figura 15: Vista en GeoServer de nuestras tablas presentes en nuestra base de datos


A partir de aquí nos vamos a dedicar a configurar nuestro recursos a publicar, indicando sus principales características de nuestras capas, para ello en la pestaña de "Datos" uno de los puntos importantes a revisar es el sistema de referencia a considerar, del mismo modo que los "Encuadres" que especifican los límites en coordenadas de nuestra capa.


Figura 16: Configurando el sistema de referencia y el encuadre de nuestra capa

Si lo guardamos así como está ya podemos verificar que se agregó una capa dentro de la lista de capas del GeoServer.


Figura 17: Vista de nuestra nueva capa publicada en GeoServer

Con el objetivo de comprobar cómo se aprecia en un entorno web nuestra capa publicada, nos vamos a "Previsualización de capas".


Figura 18: Vista de las opciones de previsualización

Cuando activamos la opción de previsualizar a través del OpenLayers, vamos a tener como resultado la siguiente imagen.

Figura 19: Vista en OpenLayers de nuestra capa vectorial

Añadiendo el Servicio dentro del QGIS


Ahora nuestro objetivo es añadir un servicio de tipo WMS dentro de nuestro QGIS, para ello seguimos los pasos de la siguiente imagen.


Figura 20: Secuencia para añadir un servicio WMS dentro del QGIS

Luego de ello, podremos comprobar que ya contamos con la capa publicada con el GeoServer (Administracion_local) y que podemos añadirlo a nuestra vista de mapa del QGIS.

Figura 21: Vista de la capa disponible luego de conectarse al servicio WMS

Finalmente en nuestro QGIS lo veremos con el estilo de defecto (polígono), tal como lo apreciamos en el OpenLayers.

Figura 22: Vista de la capa en formato PNG desde nuestro servicio WMS generado


Dándole Estilo a la Capa


Si revisan el post anterior, en la Figura 9, se exportó el estilo a nuestra base de datos, pero también existía la opción de generar un SLD a nuestra capa vectorial, que fue lo que también se realizó, ahora vamos a importar ese archivo para que lo lea el GeoServer.

Figura 23: Vista de los estilos guardados como SLD de nuestras capas

Dentro del GeoServer nos vamos a Estilos, para agregar luego indicarle que vamos a agregar un nuevo estilo.

Figura 24: Opción en el GeoServer para agregar nuevos estilos



Debemos configurar nuestro estilo, primero denominándolo, luego indicando el espacio de trabajo y el formato a considerar (SLD), luego le indicamos la ubicación de nuestro archivo de estilo y finalmente subirlo.

Figura 25: Configurando nuestro nuevo estilo a importar



Ahora que ya tenemos el estilo, podemos validarlo y si todo esta bien lo enviamos para que se encuentre como una alternativa de estilo adicional.

Figura 26: Vista del archivo SLD importando y listo para enviarse

Como siguiente paso nos vamos a nuestras capas, con la finalidad de editar la capa con el nuevo estilo disponible, para ello se ingresa a la pestaña "Publicación".


Figura 27: Edición de nuestra capa con el nuevo estilo importado


Una vez realizado este paso, podemos ir a previsualizar la capa y verlo en un entorno web con OpenLayers.

Figura 28: Vista en OpenLayers de nuestra capa vectorial con el estilo importado

Muy bien, ahora nos vamos al QGIS para añadir como ya conocemos nuestro servicio y veremos la diferencia, sobre todo observen que ya se adiciono el estilo como propiedades de la capa.

Figura 29: Vista de cuando añadimos un servicio WMS con el nuevo estilo generado.

Finalmente ya dentro de nuestra vista de mapa del QGIS podemos apreciarlo, y si requerimos dar unos ajustes a los colores, es específico relacionado a brillo, saturación y contraste lo podemos realizar desde el panel de estilos.

Figura 30:  Vista final de nuestra capa con el estilo generado y con la opción para algunos ajustes


Bueno, se cumplió con el objetivo de primero importar un archivo raster al PostGIS, y luego empezar a trabajar con el GeoServer, sobre todo para ver las opciones que tenemos para la publicación de mapas web, en este caso vimos a través de un servicio WMS, pero como habilitamos también la opción de WFS, también lo podemos realizar, a ver si lo intentan y me comentan.

No voy a extender más esta entrada, está pendiente para la siguiente parte dos procedimientos: (1) cómo se importa un archivo raster al GeoServer agregándole estilo y (2) la gestión de nuestras capas de GeoServer empleando el plugin Geoserver Explorer.