domingo, 3 de diciembre de 2017

Adicionando WMS desde Sentinel Hub con QGIS








En esta oportunidad voy a mostrar las ventajas de trabajar con Sentinel Hub, que representa una Infraestructura de imágenes satelitales que pone a disposición de los usuarios finales a través de servicios web, la facilidad de integrar gran cantidad de imágenes que nos ayudan al manejo de los mismos. 

Nuestro objetivo será lograr configurar servicios de tipo WMS a través del Sentinel Hub, que nos permita visualizar un grupo personalizado de imágenes del satélite Sentinel 2, los cuales lo mostraremos como nuevas coberturas en nuestro QGIS.


Primeros pasos con Sentinel Hub


Lo primero que debemos hacer es registrarnos, para ello dentro de la página principal hay que solicitar una suscripción al servicio (https://services.sentinel-hub.com/oauth/subscription), el cual luego de una confirmación de nuestro correo, estaremos debidamente registrados.



Luego nos vamos a las aplicaciones existentes (http://sentinel-hub.com/apps), desde aquí podremos elegir dentro de las aplicaciones independientes a "Configuration Utility". Una vez que entramos, nos va a solicitar nuestros datos de inscripción.


Ahora solo nos queda hacer clic en Login e ingresar a nuestro ambiente para realizar la configuración de nuestro servicio. Comprobaremos que en el lado derecho está nuestro nombre y ya podemos empezar a generar nuestra primera configuración.



Configurando nuestro Servicio de Sentinel Hub


Nuestro paso siguiente será adicionar una nueva configuración, para ello primero le indicamos un nombre, luego seleccionamos una plantilla disponible y finalmente la creamos.


Luego ya podremos ver que nos ha generado un ID a nuestra configuración, para editarlo hacemos clic en Edit.



Ahora veremos que tenemos disponible un grupo de combinaciones de bandas de las imágenes del Sentinel 2, los que están representados con un nombre que los distingue en función a su aplicación, como por ejemplo "Agriculture". Pero antes de ver ese detalle, es importante definir nuestro ámbito de trabajo, para ello, nos vamos a la parte inferior de nuestra configuración (Maps bounds)




En este caso, voy a seleccionar un ámbito que cubra parte de la Zona Norte del Perú, específicamente dentro del Departamento de Lambayeque. Simplemente ajustamos un rectángulo y lo confirmamos, tal como se aprecia en la siguiente figura.



Capas de Agricultura


Vamos a mostrar el detalle de una de las capas que se generaron, hablamos de "Agriculture", al desplegar el detalle de dicha capa, veremos que se creó con la combinación RGB de las bandas 11,8 y 2. Podemos hacer una pre-visualización de nuestra capa. Para conocer mayor detalle de la capa, se recomienda revisar el script de procesamiento empleado.




Configurar nuestro servicio WMS


Para lograr tener nuestro URL del servicio WMS, entramos dentro del portal a http://www.sentinel-hub.com/apps/wms/wms-parameters, para ver la manera de emplear nuestro ID.





Añadiendo servicios WMS en QGIS


Ahora ya estamos listos para añadir un servicio WMS dentro de nuestro QGIS, para ello nos vamos a Capa --> Añadir Capa --> Añadir Capa WMS/WMTS.. Seguimos los pasos indicados en la siguiente figura:


Luego de conectarnos al servicio, como ejemplo añadimos la capa denominada "Agriculture".


Ahora lo podemos ver en nuestra vista de mapa.



Si nos vamos a nuestro "Panel del explorador",  podremos apreciar también todas las capas que podemos incorporar, solamente lo arrastramos a nuestra vista de mapa.


Como ejemplo se mostrará una ampliación de una zona que representa al INIA  Vista Florida, visualizando las capas de Agriculture, Moisture Index y NDVI.



Finalmente, es importante mencionar que con el Identificador de objetos espaciales, podemos conocer información del punto que seleccionemos, tal como se aprecia en la siguiente figura.



Bueno, espero que puedan aprovechar la ventaja de usar el Sentinel Hub, se recomienda probar otras capas y analizar los resultados.  Hasta la próxima.




martes, 10 de octubre de 2017

Empleando coberturas Geopackage en QGIS





En esta oportunidad voy a mostrar las ventajas de usar el formato Geopackage, sobre todo porque es una interesante alternativa al uso de los ESRI Shapefiles, sobre todo porque nos permite empaquetar varias capas en un solo archivo, lo que nos facilita mucho cuando necesitamos compartir nuestro trabajo, sobre todo si son varias capas, la lista de total de archivos que involucran a los Shapefiles pueden ser tantos que nos puede causar algunos inconvenientes.

Para este post como ejemplo, usaremos un proyecto con capas vectoriales principalmente, los cuales ya presentan sus estilos. Nuestro objetivo será adicionar todas las capas vectoriales y una capa raster en un solo archivo en formato Geopackage, incluir sus estilos dentro de la base de datos del formato y poder exportarlo empleando el plugin  QGIS map styling GeoPackage extension.

Datos de Entrada


El ámbito elegido es el Departamento de Pasco en Perú, dentro del mismo superpondremos capas que cubren la Provincia de Oxapampa, tal como se aprecia en la siguiente figura.

Fig. 1: Vista de un proyecto con capas vectoriales (Shapefiles) y raster


Generando Coberturas Geopackage


Luego de algunos intentos para adicionar en un mismo archivo GPKG, una capa raster y las capas vectoriales que tenía. Como primer paso, usaremos las herramientas de GDAL para convertir un archivo tipo GeoTiff en GPKG; para nuestro ejemplo seleccionamos la capa llamada Dem Fill (Ver Fig. 2), para luego en la parte inferior de las opciones, donde dice "Convertido", vamos a guardarlo como "oxapampa.gpkg".

Fig. 2: Uso de herramientas GDAL para convertir un GeoTiff a GPKG



Como segundo paso empezaremos a cargar las capas vectoriales en base al archivo convertido, para ello tenemos dos opciones para hacerlo. El primero directamente realizando el "Guardar como..." (Ver Fig. 3), el segundo apoyados por el "Administrador de BBDD" (Ver Fig. 4).


Fig. 3: Opción para generar un Geopackage desde un Shapefile existente

Fig. 4: Opción de importar capas vectoriales con el Administrador de BBDD



Por cualquiera de las opciones, debemos repetirlo por cada capa vectorial de nuestro proyecto, al final debemos tener algo parecido a esto.

Fig. 5: Resultado de importar capas dentro de un Geopackage

Generando Estilos


Un paso importante es la generación de estilos, si bien como lo mencionamos antes, nuestro proyecto ya presentaba sus propios estilos, lo que debemos hacer es guardarlo dentro de nuestra base de datos, repitiendo este procedimiento para cada capa vectorial.

Fig. 6: Guardando estilos en una base de datos Geopackage


La ventaja de este procedimiento, es que lo manejamos los estilos dentro de una base de datos, lo que permite tener más de un estilo y cargarlo dependiendo nuestro requerimiento, por ello se crea una tabla exclusiva para los estilos.

Fig. 7: Detalle de la tabla de estilos generados


Uso del Plugin GeoPackage QGIS


Una vez que tenemos nuestras coberturas en un solo archivo gpkg, existe la posibilidad de guardarlo y compartirlo, pero si lo queremos volver a verlo, simplemente con "añadir una capa vectorial", seleccionamos la lista de coberturas que deseamos insertar. Ahora, existe una alternativa si instalamos un plugin denominado QGIS map styling GeoPackage extension, a través del cual, tenemos la opción de guardar a nivel de nuestro proyecto, es decir podemos empaquetar mejor nuestro proyecto.

Fig. 8: Instalación del Plugin



Luego de ser instalado y habilitado, en la barra de herramientas se visualiza los iconos que nos permitirán, primero empaquetar el proyecto y luego supongamos que lo hemos compartido o lo deseamos abrir en otra máquina, tenemos la opción de leer nuestro archivo gpkp.

Fig. 9: Iconos del plugin




Bueno, es una opción interesante, sobre todo porque un proyecto tiene la opción no solo de establecer los estilos por defecto, sino que nos permite generar un diseño de mapa y cuando lo empaquetamos, tendremos la opción de recuperar ese detalle.
Los invito a probar el plugin y me indican si han tenido problemas, sobre todo sería interesante saber si alguien lo puede abrir empleando otros software SIG. Les dejo el resultado final para que lo puedan descargar desde aquí.


domingo, 24 de septiembre de 2017

Propuesta de Curso sobre QGIS para principiantes












Plataforma Virtual EDUCAGIS


En esta oportunidad voy a mostrarles un proyecto que desde hace un tiempo lo vengo trabajando, me refiero a contar con un Entorno Virtual de Aprendizaje (EVA), es decir tener un espacio que me permita ofrecer cursos bajo la modalidad Online. Esperando que sea un inicio de algo que cada vez se vaya fortaleciendo, mi idea es seguir elaborando material de enseñanza sobre las herramientas de software libre para SIG (en especial del QGIS); teniendo en cuenta que a través de mi blog he logrado compartir en los últimos años, metodologías para emplear sus herramientas. Si bien los que revisaron mi blog, en un 90% hablo sobre QGIS, en el presente proyecto de contar con esta plataforma denominada EDUCAGIS, lo quiero orientar a todos aquellos que se complementan muy bien, es decir me refiero al SAGA, GRASS y OTB principalmente.

Bueno, vamos a iniciar con un curso a nivel básico (fecha de inicio sería el 20 de octubre del 2017), lineas abajo se describe parte de la información del curso que estoy proponiendo, los que están interesados, pueden descargar el brochure del curso desde aquí, y la ficha de inscripción desde aquí.


Presentación del Curso


Ante el incremento de la tendencia al uso de herramientas de software libre para los Sistemas de Información Geográfica (SIG), en esta oportunidad se brinda la propuesta de un curso bajo la modalidad Online denominado funcionalidades de los SIG con QGIS (nivel básico), en donde a través de la presentación de diversos temas seleccionados, pretendemos que el participante que se viene iniciando en el mundo de los SIG, pueda tener una inmersión progresiva de los principales conocimientos relacionado a las funcionalidades que involucran esta tecnología, los que serán demostradas a través del software QGIS, teniendo en cuenta su gran potencial en el desarrollo de las mismas, por los cuales en la actualidad al QGIS se le reconoce cada vez más.



Objetivos del Curso


General


Proporcionar al participante los conocimientos básicos sobre el uso del Software QGIS, orientado el mismo a las funcionalidades de los Sistemas de Información Geográfica, buscando que de manera progresiva y didáctica aprenda a desenvolverse en un ambiente ligado al uso de información geoespacial apoyado con el uso de tecnologías libres.

Específicos

  • Conocer el entorno de usuario, herramientas y las principales funcionalidades del software QGIS.
  • Realizar la búsqueda, selección y descarga de datos geográficos de fuentes externas.
  • Identificar, explorar y visualizar los datos espaciales apoyados por el QGIS Browser.
  • Gestionar una base de datos espacial para la creación, edición y consulta de los mismos apoyados con el DBManager.
  • Generar estilos personalizados a las capas vectoriales de puntos, líneas y polígonos.
  • Manipular y editar capas vectoriales y de raster empleando herramientas de edición del QGIS.
  • Diseñar mapas individuales y en conjunto como un atlas para su publicación e impresión.
  • Combinar capas de tipo vectorial apoyados por las herramientas más comunes de geoprocesamiento en el QGIS.
  • Combinar capas de tipo raster apoyados por las herramientas más comunes de geoprocesamiento e integrar algunos procesos empleando el modelador gráfico del QGIS.
  • Usar herramientas de teledetección para ejecutar procesos que tiene como fuente de datos las imágenes de satélite.


Bueno, espero que los que se están iniciando en QGIS les pueda interesar; de manera adicional se ha creado un repositorio en GitHub del proyecto de este primer curso, en donde iré actualizando con información, los que desean revisarlo pueden ingresar a https://github.com/ccarbajal16/qgis_basico.




martes, 12 de septiembre de 2017

R + SAGA Geoprocesamiento con RSAGA Package





En la presente entrada trataré un tema un poco diferente a lo acostumbrado, sobre todo porque será la primera vez que me refiero al Software R, al que de un tiempo muy reciente lo estoy practicando; por otro lado, aunque tampoco me acuerdo haber discutido sobre SAGA GIS específicamente, es un software del cual ya tengo muchos años trabajándolo, y en donde me siento más cómodo, sobre todo porque se complementa muy bien con el QGIS.

Bueno, en esta aventura voy a mostrar mi experiencia probando el package "RSAGA", por el que me animé luego de leer este enlace, a partir de ello, estuve revisando otras fuentes y decidí intentarlo empleando solamente una capa raster de elevación, el cual será nuestro punto de partida.

Fuente de Datos:


Para esta oportunidad como lo indicaba se empleará una capa raster tipo DEM, el cual está disponible a través del Modelo Digital de Superficie ALOS World 3D -30m (AW3D30), solamente se tienen que registrar y podrán descargar los datos, para el presente ejemplo se seleccionó la zona que comprende el Departamento de Lima-Perú.

Figura 1: DEM (30 m) de la cuenca del río Rimac 


Pasos Previos


Debemos tener en cuenta que el package "RSAGA", al parecer por temas de actualización no funciona con las últimas versiones de SAGA, por lo tanto, es recomendable instalar las versiones 2.14 o  2.2. En relación a R, se recomienda que instalen el RStudio, sobre todo para tener un entorno que nos facilite nuestro trabajo, como por ejemplo la instalación de otros paquetes adicionales requeridos.



Manos a la Obra


Paso 1: Como primer paso, una vez dentro de RStudio, debemos definir el directorio de trabajo, para ello, lo podemos hacer desde la consola con  setwd("Ruta del Directorio"), o también te puedes activar el menú de "Session", y luego dirigirte a "Choose Directory", tal como se aprecia en la figura 2.

Figura 2: Definiendo nuestro directorio de trabajo


Paso 2: Instalar y Activar el Package RSAGA

install.packages("RSAGA")
library ("RSAGA")

Paso 3: Quizás el más importante, porque ahora debemos establecer un ambiente en R. La finalidad es poder usar el objeto, en este caso "env_test" para dirigir las funciones RSAGA. En algunos casos podemos indicar en donde tenemos ubicado nuestro software SAGA.







Paso 4: Vamos a importar nuestro archivo raster que está en formato tif (dem_rimac.tif), para convertirlo en el formato de SAGA (dem_test.sgrd)

rsaga.import.gdal("F:/WORKS/SAMPLES/rtest/dem_rimac.tif", "dem_test.sgrd", env = env_test)


Paso 5: Verificamos la lista de la librería de módulos disponibles con las que podemos trabajar, es decir, todas las herramientas que a través de SAGA podemos ejecutar dentro del ambiente de R. Para nuestro caso vamos a incidir en aquellos relacionados al análisis del territorio. Es importante revisar los nombres, porque deberán ser considerados en nuestra línea de código para cuando sea requerido un módulo en específico.

rsaga.get.libraries(path=env_test$modules)

Figura 3: Lista de la librería de módulos


Paso 6: Vamos a lista la lista de funciones de geoprocesamiento que trabajaremos, teniendo en cuenta lo remarcado en la Figura 3. Por ahora nos dedicaremos a lo relacionado a "ta_morphometry".

rsaga.get.modules(lib = "ta_morphometry", env=env_test)


Figura 4: Funciones relacionados a morfometría

Paso 7: Configurar las herramientas de geoprocesamiento llamando a los módulos dentro de la biblioteca "ta_morphometry". Se pueden emplear cualquiera de los módulos que fueron listados previamente, solo se debe cambiar en "module = _ _ ". Tener en cuenta que también se puede colocar el número de código asignado, por ejemplo para "TPI Based Landform Classification", podemos ingresar "19".

rsaga.get.usage(lib= "ta_morphometry", module = "Slope, Aspect, Curvature", env = env_test)

rsaga.get.usage(lib= "ta_morphometry", module = 19, env = env_test)


Al ejecutar tendremos una vista de la lista de los parámetros (entrada y salida) a considerar, sobre todo, es importante verificar aquí las opciones que tenemos para personalizar nuestros resultados. También nos ayuda a revisar los formatos de ingreso (si es un texto o número), las unidades con los que se trabaja y cuales son las opciones por defecto, esto en caso que no ingresemos un parámetro. Para el primero se tendrá un resultado similar al siguiente.

> rsaga.get.usage(lib= "ta_morphometry", module = "Slope, Aspect, Curvature", env = env_test)
library path: C:\PROGRA~1\SAGA-GIS\modules\
library name: ta_morphometry
library     : Morphometry
Usage: saga_cmd ta_morphometry 0 -ELEVATION [-SLOPE ] [-ASPECT ] [-C_GENE ] [-C_PROF ] [-C_PLAN ] [-C_TANG ] [-C_LONG ] [-C_CROS ] [-C_MINI ] [-C_MAXI ] [-C_TOTA ] [-C_ROTO ] [-METHOD ] [-UNIT_SLOPE ] [-UNIT_ASPECT ]
  -ELEVATION:   Elevation
Grid (input)
  -SLOPE:       Slope
Grid (output)
  -ASPECT:     Aspect
Grid (output)
  -C_GENE:     General Curvature
Grid (optional output)
  -C_PROF:     Profile Curvature
Grid (optional output)
  -C_PLAN:     Plan Curvature
Grid (optional output)
  -METHOD:     Method
Choice
Available Choices:
[0] maximum slope (Travis et al. 1975)
[1] maximum triangle slope (Tarboton 1997)
[2] least squares fitted plane (Horn 1981, Costa-Cabral & Burgess 1996)
[3] 6 parameter 2nd order polynom (Evans 1979)
[4] 6 parameter 2nd order polynom (Heerdegen & Beran 1982)
[5] 6 parameter 2nd order polynom (Bauer, Rohdenburg, Bork 1985)
[6] 9 parameter 2nd order polynom (Zevenbergen & Thorne 1987)
[7] 10 parameter 3rd order polynom (Haralick 1983)
Default: 6
  -UNIT_SLOPE: Slope Units
Choice
Available Choices:
[0] radians
[1] degree
[2] percent
Default: 0
  -UNIT_ASPECT: Aspect Units
Choice
Available Choices:
[0] radians
[1] degree 


Paso 8: Ejecutar el Geoprocesamiento, para lo cual existen dos maneras fundamentalmente, el primero, cuando existe una función específica del RSAGA, tenemos la opción de obtener nuestro resultado. Para nuestro ejemplo, puede darse el caso que deseamos obtener la pendiente, el aspecto y la curvatura en un mismo procedimiento, para ello podemos escribir:

rsaga.slope.asp.curv("dem_test.sgrd", out.slope = "slope_dem1", out.cprof = "cprof_dem1", out.cplan = "cplan_dem1", method = "poly2zevenbergen", env=env_test)

También se pude realizar de manera individual, es decir cuando existe la función para calcula la pendiente:

rsaga.slope("dem_test.sgrd", "slope_dem2", method = "maxslope", env=env_test)

Por último existe la opción, el cual me parece más interesante, porque tenemos la posibilidad de obtener el mismo resultado si ejecutamos la función del Geoprocesador, para lo cual debemos guiarnos de lo mostrado como producto del Paso 7.

rsaga.geoprocessor(lib = "ta_morphometry", module = 0, param = list(ELEVATION = "dem_test.sgrd",SLOPE = "slope_dem3.sgrd", ASPECT = "aspect_dem2.sgrd", C_GENE= "curv_gener1.sgrd", METHOD= "0", UNIT_SLOPE="percent", UNIT_ASPECT="degree"), env = env_test)

Figura 5: Salida del Geoprocesamiento realizado


Paso 9: Ahora vamos a realizar un paso previo para lograr visualizar nuestros resultado. Como vieron en la Figura 5. los archivos se guardaron en formato de SAGA (*.sgrd), el cual lo podemos abrir no solo en ese Software, sino también en QGIS por ejemplo, pero para hacerlo más interesante lo vamos a convertir a un formato tipo ASCII (*.asc). Para ello, volvamos a revisar la Figura 3 e identifiquemos el módulo que requerimos, en este caso hablamos de "io_grid"

rsaga.get.modules(lib="io_grid", env=env_test)

Figura 6: Módulos para gestión de archivos raster


rsaga.get.usage(lib = "io_grid", module =0, env=env_test)

rsaga.geoprocessor(lib="io_grid",module=0,param=list(GRID="dem_fill1.sgrd",FILE="dem_esri.asc"),  env=env_test)


rsaga.geoprocessor(lib="io_grid",module=0,param=list(GRID="slope_dem4.sgrd",FILE="dem_slope.asc"), env=env_test)

rsaga.geoprocessor(lib="io_grid",module=0,param=list(GRID="aspect_dem4.sgrd",FILE="dem_aspect.asc"), env=env_test)


En caso se tengan muchos archivos, existe también una manera más rápida que nos permite realizar este proceso de conversión, a continuación muestro un ejemplo que logré ejecutar, considerando que estuve probando otros módulos.

rsaga.sgrd.to.esri(in.sgrds = c("cprof_dem4", "cplan_dem4", "carea1", "wetindex1", "hillshade1", "direction_dem3","connet_dem3", "order_dem3", "basin_dem3"), out.grids = c("esri_cprof", "esri_cplan", "esri_carea", "esri_wetindex", "esri_hillshade", "esri_direction", "esri_connect", "esri_order", "esri_basin"), out.path = getwd(), format = "ascii", env = env_test)

Paso 10: Vamos a definir los archivos raster para que podamos plotearlos


Es importante tener instalado y activado el Package "raster" y "sp"












plot(elevation)






plot(slope)







plot (aspect)







Visualización en Google Earth


Si bien no lo considero un paso adicional, me encontré con el siguiente enlace, a partir del cual traté de realizar el procedimiento, aunque no me siento muy satisfecho con los resultados, si alguien que lo intente a ver si le sale mejor, lo pueda compartir. En sí, primero debemos remontarnos a nuestra Figura 6, para definir nuestro módulo, en este caso será el "10", porque nuestro objetivo es convertirlo a un archivo PNG (que nos permitirá hacer transparencias).


Es importante tener instalado y activado el Package "rgdal", "maptools"

rsaga.get.modules(lib="io_grid", env=env_test)

rsaga.get.usage(lib= "io_grid", module = "10", env=env_test)


# Generando nuestro archivo tipo PNG

rsaga.geoprocessor(lib="io_grid", module=10, param=list(IMAGE="aspect_dem4.sgrd", FILE="aspect1.png"))

# Definiendo nuestro raster









# Creando nuestro objeto KML








# Creando nuestro archivo KML, con la función kmlOverlay, para mayor detalle revisar aquí.



kmlOverlay(aspect.kml, kmlfile="aspect1.kml", imagefile="aspect1.png", name="Aspecto_rimac")


Figura 7: Salida en Google Earth 


Muy bien, por mi parte seguiré investigando sobre las ventajas que se tiene el poder trabajar dentro de R, sobre todo a partir de nuestros productos obtenidos, aprovechando las ventajas de funciones estadísticas que podemos explotar. Espero que se animen a probarlo.