lunes, 7 de agosto de 2017

Nuevas Opciones para generar leyendas con QGIS 3.0

En una entrada anterior, se mostró una de las novedades sobre estilos que se viene con el QGIS 3.0, en específico la demostración fue sobre una capa de puntos, mostrando la opción "Point cluster". En esta oportunidad, empleando la misma fuente de datos, me permitiré hablar sobre una opción que tenemos para mostrar en nuestro panel de capas, un nuevo estilo de simbología, el mismo que luego podrá ser representado dentro de un mapa como leyenda.

Generando una leyenda colapsada (Collapsed legend)


En realidad es muy sencillo el procedimiento, pero vamos a tener que considerar unos detalles, como por ejemplo, primero debemos revisar nuestra tabla de atributos, sobre todo porque en algunos casos será necesario hacer algunos ajustes. Para esta demostración estoy empleando un capa vectorial de puntos, representando un grupo de centros poblados del Departamento de Apurímac, el mismo contiene un campo denominado "TOT_POB99", con valores de población. 
Si desean los datos para practicar lo pueden descargar desde aquí.

Paso 1: Debemos generar un campo que represente valores enteros que guarden relación o proporción sobre los valores de población, para nuestro caso, el grupo de centros poblados presenta valores desde 500 hasta 7731, por lo tanto, se ha creado el campo "CATEG_POB", con valores de 5, 10, 15 y 20, los cuales considerándose rangos específicos deberán cubrir todos de valores de población.

Figura 1: Ajustando nuestra tabla de atributos

Paso 2: Generar una simbología simple de puntos, pero que el tamaño del marcador esté activado para que esté definido por datos de un campo específico, en este caso de nuestro campo "CATEG_POB".


Figura 2: Configurando para que el tamaño del marcador sea definido por datos

Paso 3: Ahora podemos ir a las opciones avanzadas para generar simbología, seleccionando la opción denominada "Data-defined size legend". Es importante primero realizar el paso anterior, porque de lo contrario no se activará esa opción.

Figura 3: Activando la opción Data-defined size legend


Paso 4: Debemos generar nuestra leyenda colapsada, para ello debemos ir a dicha opción y luego añadir manualmente los tamaños de las clases, tal como lo hemos configurado previamente, es decir desde valores de 5 a 20, para que a su costado podamos incluir el valor real de la población que queremos representar.


Figura 4: Generando una "leyenda colapsada"


Paso 5: Finalmente, veremos que aparecerá dicha simbología en nuestro panel de capas, por lo tanto, ahora podemos representarlo en un mapa, para que lo podamos imprimir.

Figura 5: Vista del resultado de nuestra leyenda generada

Editando la simbología


Al ver el primer resultado, me pregunté si podría hacer que los símbolos tengan colores diferentes por cada tamaño generado, por lo tanto, lo que hice fue generar una simbología de tipo "Graduated", para lograr generar con ello una rampa de coloración, claro está en función a los datos de población.
Con la finalidad de que se mantenga los rangos similares, se optó que la opción del modo de separación de las 4 clases sea por "rupturas naturales".

Figura 6: Generando una simbología graduada

Con este cambio, vamos a visualizar nuestros valores en una leyenda compuesta por dos simbologías, la que ya habíamos generado anteriormente y la otra que representa una coloración establecida por nosotros.

Figura 7: Vista del resultado incorporando coloración graduada


En general me parece interesante esta nueva opción que vendría en la nueva versión del QGIS 3.0, les invito a probarlo en la versión de desarrollo del QGIS.


martes, 1 de agosto de 2017

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









Con la finalidad de completar lo ofrecido, ahora trataremos sobre el plugin kNN classifier, el cual emplea el método K -vecinos más cercanos, en inglés K-Nearest Neighbors Algorithm (KNN), logrando crear una nueva capa con los píxeles clasificados, además de realizar la evaluación de la precisión del proceso de clasificación. Se debe mencionar que los principios de las funciones y del trabajo del plugin están basados en el paper de la referencia 1.

Preparando los datos:


Seguiremos empleando la misma fuente de datos con la que venimos trabajando en la entrada anterior,  es decir nuestra imagen compuesta del satélite Sentinel-2, del mismo modo se trabajará con nuestra capa vectorial de las áreas de entrenamiento, la cual deberá ser modificada, teniendo en cuenta los requisitos del plugin.

En resumen el plugin KNN classifer requiere lo siguiente:

  • Un archivo raster multibanda con la extensión TIF, en nuestro caso tenemos una imagen del Sentinel-2 compuesta por cuatro bandas (comb2348_test.tif).
  • Un archivo Shapefile que contenga un campo con la clasificación (roi_set16_test1.shp), pero además los descriptores requeridos, en este caso serán los valores de las bandas contenidos en cada uno de los polígonos (45), para lo cual vamos a emplear una herramienta ubicada en la menú raster, denominada "Estadísticas de zona".

Lo primero que haremos será aplicar "Estadísticas de zona", considerando nuestra imagen multibanda y la capa vectorial, para ello se considerará el valor de la media de cada una de las bandas. 

Figura 1: Aplicando Estadísticas de zona para recopilar datos de nuestra imagen por cada banda


El proceso se repite para las demás bandas, obteniendo al final cuatro campos con los valores medios de las bandas, los que ahora serán considerados como nuestros descriptores.


Figura 2: Adición de los descriptores con valores de las bandas de la imagen raster


Empleo del KNN Classifer


Ahora podemos activar el plugin desde nuestra barra de herramientas, luego del cual nos aparecerá una ventana (Ver Figura 3), en donde dentro de la pestaña "Basic", se especifica nuestra capa raster y luego nuestra capa vectorial actualizada. Posteriormente hay que indicarle lo siguiente:
  • Una carpeta de salida de nuestros resultados.
  • El número de vecinos más cercanos (k), es decir el número de vectores de muestra (polígonos) más cercanos de acuerdo con la distancia.
  • La selección de las bandas disponibles para ser considerados.
  • Lista de los descriptores provenientes de la tabla de atributos de la capa vectorial, solo deben ser considerados los campos relevantes para la clasificación.
  • El parámetro a ser clasificado, existiendo la opción de realizar una clasificación con múltiples parámetros.
  • Finalmente se indica el modo de clasificación, el cual está en relación al parámetro a ser clasificado, "c" para el parámetro categórico y "n" para el parámetro continuo.

Es importante mencionar que debemos emplear la tecla "Ctrl" para realizar múltiples selecciones, como las bandas y los descriptores.

Figura 3: Configuración requerida para ejecutar el plugin kNN


Primeros Resultados Obtenidos


Luego de ejecutar el plugin en nuestro panel de capas aparecerá la nueva capa raster con el resultado de la clasificación, el cual presenta la siguiente estructura: SC_ + nombre de la imagen + nombre del parámetro + _valor de k + modo de clasificación (SC_comb2348_test2Clase_ID_3c). Luego para visualizar mejor podemos emplear el estilo que venimos trabajando.

Figura 4: Vista del resultado de clasificación con la configuración básica


También se genera un archivo de texto (.txt), con la evaluación de la precisión del algoritmo empleado con los valores ingresados, el cual se almacena en la carpeta de salida elegida. La interpretación del mismo sería:

  • OA: Precisión general - todos los píxeles clasificados correctamente (todos los tipos) / todos los píxeles clasificables (todos los tipos)
  • PA: Precisión de los "productores" - Muestra el porcentaje de cuántos píxeles de cada tipo se clasifican correctamente. Correctamente clasificado (de un solo tipo) dividido por el número total de píxeles de prueba del mismo tipo de acuerdo con los datos de referencia. Para nuestro ejemplo se muestran seis (6) valores que corresponden a las clases consideradas.
  • UA: Precisión de los usuarios - Muestra la probabilidad de que el tipo específico realmente represente ese tipo. Correctamente clasificados (de un solo tipo) / clasificados (de un solo tipo).
  • KHAT: Este valor describe qué tan bien el algoritmo kNN clasifica los píxeles si se compara con el clasificador aleatorio. Por lo tanto, valores cercanos a 1 indicarán un buen desempeño del algoritmo.
En nuestro caso obtuvimos un KHAT igual a 0.859, lo que significa que la clasificación es un 86% mejor que un clasificador aleatorio proporcionado.


Figura 5: Vista del resultado de la evaluación del algoritmo en un archivo de texto


Es recomendable ir probando valores de k distintos para ver el valor que mejor se ajusta, en este caso luego de realizar pruebas con otros valores, se comprobó que el valor de 3 es el más adecuado. Para tener otros criterios al momento de elegir este parámetro, recomiendo revisar la referencia 2.


Editando nuestra configuración para clasificar


Ahora vamos a probar algunas otras opciones que tenemos, todo ello con la finalidad de personalizar nuestra configuración inicial. Para ello, en primer lugar nos debemos ir a la pestaña "Advance", desde aquí veremos que podemos realizar algunos ajustes:

  • Distance calculation: La modificación de esta opción que por defecto está marcado en "Euclidean", puede alterar la velocidad en el procesado para obtener los resultados; esto se debe a que ambos métodos de cálculo emplean distintas fórmulas, siendo la de Manhattan, la que consume menor tiempo de procesado. El principio de ambos se puede resumir si apreciamos la Figura 6, en donde podemos apreciar las fórmulas que consideran ambos métodos:

Figura 6: Representación gráfica de los métodos de cálculo de distancias (Fuente: Ref. 2)


  • Mask layer: Te permite incorporar una capa raster que indique solo aquellos píxeles que deben ser clasificados, dicha capa debe contener valores de 0 (píxeles que no son considerados) y 1 (píxeles a ser considerados).
  • GeoDistance: Proporciona al usuario una opción para seleccionar datos de muestra a la distancia deseada desde un píxel clasificable. Esta opción limita nuestros datos de muestra y reduce la influencia de las muestras ubicadas más lejos. La distancia se mide en kilómetros [km]. Al habilitar esta opción, el usuario debe verificar que los datos de entrenamiento tienen columnas denominadas "x" e "y" que contienen coordenadas de los puntos de datos de entrenamiento.
  • Feature weights: Te permite realizar un tipo de ponderación a nuestros descriptores, por lo tanto valores mayores a 1 incrementa la significancia del descriptor; los valores deben estar separados por comas.

Figura 7: Configuración de opciones avanzadas del plugin


En resumen, tal como se aprecia en la Figura 7, se seleccionó a "Manhattan" como método de cálculo de la distancia, no se activo ninguna capa máscara, se indicó a 1 km como GeoDistance, pero al momento de ejecutar el algoritmo, se mostró la advertencia que no se cuenta con suficientes puntos de muestreo, lo cual es comprensible, teniendo en cuenta la reducida extensión con la que estamos trabajando, también se habilitó la opción de estandarización y finalmente la generación de ponderación, se le asignó mayor peso a las bandas 3 y 4, las que corresponden a las bandas roja e infrarroja del Sentinel-2 respectivamente.

Figura 8: Resultado obtenido al modificar algunos parámetros.

Si apreciamos la Figura 8, veremos que el resultado no fue satisfactorio si lo comparamos con nuestro primer resultado, esto nos permite descartar la opción de emplear "Manhattan" como método de cálculo de la distancia. Por lo tanto, si mantenemos los cambios y volvemos a emplear "Euclidean" obtendremos un resultado similar al primero, pero visualmente se comprueba que existe algunas mejoras.

Figura 9: Resultado de la clasificación empleando ponderaciones


Bueno, con esta parte cumplo con lo ofrecido, teniendo la intensión de poder mostrar otras opciones que tenemos para realizar una clasificación supervisada. Para que puedan profundizar sobre esta metodología, recomiendo revisar la referencia 3, en donde el autor del plugin explica detalladamente las características del mismo y que por mi parte traté de resumirlas en esta entrada.

Referencias:

  1. http://www.sciencedirect.com/science/article/pii/S0034425701002097
  2. http://www.oldemarrodriguez.com/yahoo_site_admin/assets/docs/Presentación_-_KNN.20085205.pdf
  3. https://github.com/m6ev/kNN/blob/master/kNN_Documentation.pdf

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/