Análisis espacial con PostGIS Raster

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (5 votos, media: 5,00 sobre 5)
Cargando…

Desde la versión 2.0 de PostGIS, es posible cargar y manipular datos de naturaleza ráster en una base de datos espacial, gracias a PostGIS Raster.

En PostGIS 3 se sigue manteniendo estas capacidad ráster pero en esta ocasión las funcionalidades se encuentran en una extensión independiente denominada postgis_raster  que debemos añadir a nuestra base de datos si queremos usarlas.

El almacenamiento de datos ráster en una base de datos relacional como PostgreSQL resulta de utilidad ya que aprovecha todas las características de un sistema de gestión de base de datos, (restricciones de acceso, soporte de consultas SQL, arquitectura cliente-servidor para acceso simultáneo, datos centralizados, mejoras en la actualización…).

Vamos a realizar un par de ejercicios sencillos donde realizar operaciones de análisis combinado datos ráster y vectoriales.

Añadiendo las extensiones postgis y postgis_raster.

Lo primero que debemos hacer es dotar de funcionalidad geográfica a nuestra base de datos añadiendo la extensión postgis si no a tenemos instalada, para pasar depués a repetir el paso pero con la extensión postgis_raster.

Usando la consola de comandos para conectarnos a nuestra base de datos con psql debemos añadir las extensiones de la siguiente manera:

psql -U postgres rasterdb
rasterdb>CREATE EXTENSION postgis;
rasterdb>CREATE EXTENSION postgis_raster;

Cargando datos con raster2postgis

Para añadir un archivo ráster a nuestra base de datos podemos usar el comando raster2plsql.

Hemos descargado el Modelo Digital del Terreno – MDT200 de la provincia de Córdoba (España) desde la web de descargas del Centro Nacional de Información Geográfica (CNIG).

Descarga de modelo digital del terreno 1ª Cobertura con paso de malla de 200 m de la web del CNIG.
Descarga de modelo digital del terreno 1ª Cobertura con paso de malla de 200 m de la web del CNIG.

Completamos la creación del sql con raster2pslql añadiendo parámetros de interés (sistema de referencia, índice, restricciones…).

raster2pgsql -s 25830 -I -C PNOA_MDT200_ETRS89_HU30_Cordoba.asc 
cordobadem200 > dem-cordoba.sql
Ejemplo de raster2postgres
Ejemplo de raster2postgres

Seguimos ahora cargando el sql en nuestra base de datos.

raster2pgsql -s 25830 -I -C dem-cordoba.tif cordobadem200 > dem-cordoba.sql
Para terminar, ejecutamos el archivo SQL creado, añadiendo con ello la nueva tabla raster con el modelo digital de elevación.
psql -U postgres -f dem-cordoba.sql rasterdb

Si usamos QGIS, definimos la conexión a nuestra base de datos y cargamos la nueva tabla ráster.

Carga de capa en QGIS desde PostGIS
Carga de capa en QGIS desde PostGIS

Asignando valores Z a una capa puntual.

Supongamos que tenemos un conjunto de localizaciones puntuales (ej. antenas, torres eléctricas…) situadas en nuestro ámbito de trabajo a la que queremos añadir un atributo con el valor de la altura.

Podemos usar las funciones de PostGIS junto a los comandos SQL para añadir el valor deseado de la siguiente manera.

ALTER TABLE puntos ADD COLUMN z integer;
UPDATE puntos SET z= st_value (rast, 1, st_transform (geom, 25830))
FROM cordobadem WHERE cordobadem.rast && st_transform (puntos.geom, 25830);

Realizamos una consulta a la nueva tabla, esta vez con el cliente gráfico pgAdmin4, y vemos el resultado.

Calculo de valor z desde tabla ráster.
Calculo de valor z desde tabla ráster.

Estadística Zonal

El objetivo de este otro ejemplo es obtener los datos estadísticos (total de celdas, media, máxima, mínima y desviación estándar) relativos a Z de cada uno de los municipios de la provincia de Córdoba.

En esta ocasión hemos creado una nueva tabla vectorial con los resultados.

CREATE TABLE estadistica_municipios as
SELECT stats.id, stats.nombre, stats.geom, 
(ST_SummaryStatsAgg(stats.intersectx,1,true)).*
FROM
(SELECT id, nombre, geom, 
ST_Intersection(rast,1,ST_AsRaster(geom, rast),1) as intersectx
FROM cordobadem, municipios_cordoba
WHERE ST_Intersects(geom, rast)) as stats
WHERE stats.intersectx IS NOT NULL;

Si cargamos los datos en QGIS y creamos un mapa categorizado podemos ver el resultado.

Resultado del análisis de estadistica zonal en QGIS
Resultado del análisis de estadística zonal en QGIS

El manejo de estas y otras funciones con datos ráster en PostGIS es uno de los tema de nuestro Curso Superior en Gestión de Bases de Datos Espaciales: POSTGRESQL y POSTGIS

Referencias:

  • M. Montesinos, I. Brodin, V.Agazzi, J. Arévalo (2011): Accediendo a la Base de Datos PostGIS Raster desde gvSIG Desktop. V Jornadas de SIG Libre PDF

Dejar respuesta

Please enter your comment!
Please enter your name here