Cómo hacer consultas espaciales con PostGIS – Parte 2

Contribución:
Ing. Sist. Mauricio Márquez Goa
Infraestructura de Datos Espaciales Córdoba (IDECOR)


21 de abril 2021.

Este artículo continúa una serie de notas publicadas sobre el trabajo con bases de datos espaciales (Paso a paso: cómo añadir capas PostGIS en QGIS) y el desarrollo de cálculos espaciales con PosGIS (Cómo hacer consultas espaciales con PostGIS). En esta nueva entrega, te contamos cómo ejecutar análisis espaciales de superposición y proximidad… Mirá!

Área de influencia

La función st_buffer devuelve un polígono a una distancia determinada desde la geometría del elemento. Para calcular el buffer hay que anteponer la función “st_buffer” al campo “geom” (campo que contiene la geometría) del siguiente modo: “select st_buffer(geom,distancia) from esquema.tabla”, donde distancia es el valor numérico del buffer, calculado sobre el sistema de referencia espacial de la geometría.

Por ejemplo, para calcular el buffer de la capa de Centros de Salud puede utilizarse la siguiente sentencia:

select *,
 (case
 when nombre like ‘%HOSPITAL%’
 and localidad = ‘CORDOBA’
 then st_buffer(geom,1500)
 when nombre not like ‘%HOSPITAL%’
 and localidad = ‘CORDOBA’ 
 then st_buffer(geom,750)
 end) as geom_buffer
 from public.»centros_salud»

Se observa que se agregan otras funciones tales como:

  • case when: para generar condicionales al cálculo.
  • Like: que permite identificar una cadena de caracteres dentro del campo a consultar.

Al ejecutar la sentencia se agrega a la capa de centros de salud un campo virtual denominado “geom_buffer”, el cual contendrá la geometría con la distancia calculada en función del cumplimiento de los condicionales especificados en “case when”.

Imagen 1. Vista de la ejecución de la consulta st_buffer en el gestor de base de datos de QGIS.

Finalmente, si se añade la capa a QGIS, podrá observarse un “buffer” alrededor de cada centro de salud, y dependiendo del tipo, el tamaño del área de influencia (para hospital, la distancia es de 1500 m y para los centros que no son hospitales, una distancia de 750m).

Imagen 2. Capa de área de influencia a centros de salud con distancia definida, dependiendo el tipo de centro (hospitales y no hospital).

Intersección

La función st_intersects determina si una geometría comparte espacio con otra que se superpone Para calcularla debe anteponerse la función “st_intersects” a los campos “geom” de las capas que desean intersecarse.

Ejemplo:

select b.id, b.nomenclatu, b.tipo_parce, b.localidad, a.nombre as area_hospitalaria, b.geom from (select *,
(case
 when nombre like ‘%HOSPITAL%’
 and localidad = ‘CORDOBA’
 then st_buffer(geom,1500)
 when nombre not like ‘%HOSPITAL%’
 and localidad = ‘CORDOBA’ 
 then st_buffer(geom,750)
 end) as geom_buffer
 from public.»centros_salud») as a,
 (select * from public.»parcelas») as b
where st_intersects(b.geom,a.geom_buffer)
and (b.nomenclatu like ‘%1101010629022%’ or b.nomenclatu like ‘%1101010628029%’)

Se observa que se agregan otras funciones tales como:

  • case when: para generar condicionales.
  • Like: que permite identificar una cadena de caracteres dentro del campo a consultar.
  • Where: a los fines de filtrar las parcelas con las identificaciones catastrales mencionadas.
Imagen 3. Vista de la ejecución de la consulta st_intersects en el gestor de base de datos.

Al ejecutar la sentencia como en el ejemplo, se agrega a la capa de parcelas un campo virtual denominado “area_hospitalaria” con el contenido del valor del centro de salud de la parcela, intersectado con el buffer calculado en el punto (función) anterior. Al añadir los datos a la vista de QGIS, se observará una capa con las parcelas indicadas en la selección.

Imagen 4. Consulta de atributos en QGIS donde se observa el nuevo campo añadido.

Dentro de

La función st_within determinará si una geometría se encuentra dentro del espacio con otra que se superpone. Para calcular esta intersección hay que anteponer la función “st_within” a los campos “geom” de las capas que desean analizarse.

Tocar

La función st_touches determinará las entidades que comparten límites en el espacio. Para calcular esta intersección debe anteponerse la función “st_touches” a los campos “geom” de las capas que desean analizarse.

Índice Espacial

Una de las grandes ventajas que brinda PostgreSQL con su extensión PostGIS es la creación de índices espaciales en nuestra Base de Dato Espacial (BDE), lo que permite trabajar de forma más rápida y óptima en las operaciones espaciales descritas.

Una manera de crear el índice espacial tipo GIST, es como se indica a continuación:

CREATE INDEX [Nombre_del_indice] ON [Nombre_de_tabla] USING GIST ([campo_de_geometria]);

Por sugerencias, dudas o inquietudes podés contactar al equipo de IDECOR en [email protected]. Para mantenerte informado seguinos en Instagram idecor.ok y en el canal de YouTube IDECOR.