El Blog colaborativo sobre Geotecnologías, GIS y Mapas para la comunidad GEO
  • Política de cookies
  • Más información
  • Contacto
Geotecnologías, GIS y Mapas
  • Proyecto
  • Contacto
Sin resultados
Ver todos los resultados
geomapik

25 funciones de PostGIS para análisis espacial

Raúl Estévez por Raúl Estévez
11 abril, 2020
en Análisis GIS, Desarrollo GIS, Tutoriales
Home Análisis GIS
2.7k
Vistas
CompartirTwitter

En este artículo queremos aportar un pequeño recopilatorio útil sobre las principales funciones de PostGIS para análisis espacial.

Las funciones quedan ordenadas o agrupadas por tipologías de uso y vamos a proponer algunos ejemplos para ver cómo construir una consulta SQL espacial básica por cada caso.

Usar PostGIS para análisis espacial

Las bases de datos espaciales son una herramienta imprescindible para el desarrollo de la mayoría de proyectos basados en información espacial. De entre todas ellas, la más extendida en el sector de las geotecnologías y los Sistemas de Información Geográfica es sin duda PostgreSQL – PostGIS.

PostGIS implementa una cantidad abrumadora de funciones para trabajar con objetos geográficos que nos van a permitir analizar, relacionar y realizar consultas complejas sobre nuestros datos almacenados.

¿Quieres conocer más acerca de PostGIS? Echa un vistazo a este artículo donde explicamos todos los detalles.

Principales funciones espaciales en PostGIS

Funciones para cálculo de atributos geométricos

1. ST_Area. Devuelve el área de un polígono o multipolígono. Debe pasarse la columna que contiene la geometría como parámetro. Para geometrías no poligonales retorna valores de 0. Las unidades de medida corresponden a las que contiene el sistema de referencia de coordenadas de la geometría.

SELECT ST_Area(geom) AS area
FROM datos.poligonos;

2. ST_Perimeter. Devuelve la longitud del perímetro de un polígono o multipolígono. Debe pasarse la columna que contiene la geometría como parámetro. Para geometrías no poligonales retorna valores de 0. Las unidades de medida corresponden a las que contiene el sistema de referencia de coordenadas de la geometría.

SELECT ST_Perimeter(geom) AS perímetro
FROM datos.poligonos;

3. ST_Length. Devuelve la longitud bidimensional de una geometría de tipo línea o multilínea. Debe pasarse la columna que contiene la geometría como parámetro. Para geometrías no poligonales retorna valores de 0. Las unidades de medida corresponden a las que contiene el sistema de referencia de coordenadas de la geometría.

SELECT ST_Length(geom) AS longitud
FROM datos.lineas;

Funciones de PostGIS para construcción o creación de geometrías

4. ST_MakePoint. Permite crear objetos de tipo punto de 2 dimensiones (valores x, y), 3 dimensiones (x, y, z) i 4 dimensiones (x, y, z, m).

SELECT ST_MakePoint(10 15);

SELECT ST_MakePoint(-3.7018, 40.3185);

5. ST_MakeLine. Permite crear una geometría de tipo línea en base a puntos. Existen diversas metodologías.

La más simple:

SELECT  ST_MakeLine(geom) AS linea 
FROM datos.puntos;

De forma ordenada en base a un campo numérico que identifique el orden del trazado de la línea:

SELECT ST_MakeLine(id_puntos.geom) AS linea
FROM (
	SELECT puntos.id, geom
	FROM datos.puntos
	ORDER BY puntos.id
) AS id_puntos ;

O bien mediante un array de puntos:

SELECT ST_MakeLine(
	ARRAY[
		ST_MakePoint(5,2), 
		ST_MakePoint(4,5), 
		ST_MakePoint(8,10)
	]
);

6. ST_MakePolygon. Permite construir una geometría de tipo polígono en base a una geometría de tipo línea. La geometría lineal debe ser cerrada, es decir, que su nodo inicial y final sean coincidentes.

SELECT ST_MakePolygon(
	ST_GeomFromText(
		'LINESTRING(10 10, 15 10, 20 15, 10 15, 10 10)'
	)
);

7. ST_GeomFromText. Devuelve un objeto geométrico en base a una expresión en formato WKT (Well Known Text) que lo defina.

SELECT ST_GeomFromText('POINT(20 20)')

SELECT ST_GeomFromText('LINESTRING(-5 10, 10 10, 10 15, 20 40, -10 20)')

SELECT ST_GeomFromText('POLYGON((10 10, 15 10, 10 15, 5 5, 10 10))')

Si quieres conocer más acerca del formato de codificación de geometrías Well Known Text puedes echar un vistazo a este artículo en el que hablamos sobre ello.

8. AddGeometryColumn y DropGeometryColumn. Permiten crear o eliminar la columna que contiene el objeto geográfico de una tabla. Debe especificarse el esquema de la tabla, el nombre del campo, el SRID o sistema de coordenadas, el tipo de geometría y sus dimensiones.

SELECT AddGeometryColumn('datos', 'nuevospuntos', 'geom', 25830, 'POINT', 2)

SELECT DropGeometryColumn('datos', 'nuevospuntos', 'geom')

Funciones de PostGIS para análisis espacial

9. ST_Buffer. Devuelve una geometría que representa todos aquellos puntos comprendidos dentro de un radio determinado desde un objeto geométrico dado. Los cálculos se basarán en el SRID de la geometría.

SELECT ST_Buffer(geom, 750) 
FROM datos.lineas;
st_buffer postgis

10. ST_SymDifference. Devuelve una geometría que representa las partes de los objetos de la tabla A y la tabla B que no se interescan. Recibe el nombre de diferencia simétrica porque da exactamente lo mismo pasar como primer argumento una u otra tabla, es decir, ST_SymDifference(A,B) = ST_SymDifference(B,A).

SELECT ST_SymDifference(
	parques.geom, 
	ST_Buffer(papeleras.geom, 500))
FROM 
datos.poligonos as parques, 
datos.puntos as papeleras;
st_symdifference postgis

11. ST_Intersection. Devuelve la geometría que representa los puntos comunes entre dos geometrías de entrada. Es importante, en este caso, recordar que al tratarse de puntos en común entre ambas capas, se evalúan A y B de la misma manera, es decir, ST_Intersection(A, B) = ST_Intersection(B, A)

SELECT ST_Intersection(
	parques.geom, 
	ST_Buffer(papeleras.geom, 500))
FROM 
datos.poligonos as parques, 
datos.puntos as papeleras;
st_intersection postgis

12. ST_Union. Devuelve una geometría que representa la unión de dos tablas con datos espaciales.

SELECT ST_Union(lineas.geom, poligonos.geom) 
FROM datos.lineas, datos.poligonos;
st_union postgis

13. ST_Centroid. Devuelve el centroide calculado a partir de las geometrías de entrada.

SELECT ST_Centroid(poligonos.geom)
FROM datos.poligonos;

14. ST_Envelope. Devuelve una geometría que representa el bounding box de las geometrías que contiene la tabla.

SELECT ST_Envelope(lineas.geom)
FROM datos.lineas;
st_envelope postgis

Funciones booleanas para relaciones entre geometrías

15. ST_Contains. Retorna un valor booleano True para todas aquellas geometrías de B contenidas en A que si, y solo si, ninguno de sus puntos se encuentran fuera de los límites de A. En caso contrario retorna el valor booleano False.

SELECT ST_Contains(poligonos.geom, lineas.geom) 
FROM datos.lineas, datos.poligonos;

16. ST_Intersects. Retorna el valor booleano True si las geometrías de A y B comparten algún punto en común. Es decir, si se sobreponen en algún punto del espacio.

SELECT ST_Intersects(poligonos.geom, lineas.geom) 
FROM datos.lineas, datos.poligonos;

17. ST_Overlaps. Retorna el valor booleano True si la geometría B se sobrepone a la geometría A, pero B sobrepasa los límites de A. Es decir, si ocupan parte del mismo espacio en las mismas dimensiones pero sin llegar a contenerse la una a la otra.

SELECT ST_Overlaps(poligonos_a.geom, poligonos_b.geom) 
FROM datos.poligonos_a, datos.poligonos_b;

18. ST_Touches. Devuelve True si las geometrías de A y B tienen algún punto de sus bordes / límites en común. Para puntos, aplica si sus coordenadas coinciden con algún punto situado en el límite de un polígono.

SELECT ST_Touches(poligonos.geom, lineas.geom) 
FROM datos.lineas, datos.poligonos;

19. ST_Covers. Retorna True si ningun punto de B se encuentra fuera de A, es decir, si el área que ocupa A es capaz de cubrir todos los elementos geométricos por completo de B.

SELECT ST_Covers(poligonos.geom, lineas.geom) 
FROM datos.lineas, datos.poligonos;

Funciones relativas a sistemas de coordenadas y posición

23. ST_Translate. Permite desplazar o mover la geometría, tanto en 2 dimensiones como en 3 dimensiones. Debemos pasar como argumentos la geometría y los valores de desplazamiento en cada eje.

SELECT ST_SetSRID(ST_Point(-3.7018, 40.3185), 4326);

22. ST_Transform. Permite reproyectar las geometrías a un sistema de referencia de coordenadas definido. En nuestro caso reproyectamos del SRID original (EPSG: 25830) de los polígonos de la tabla al EPSG:4326:

SELECT ST_Translate(geom, -0.05, 0.25) 
FROM datos.poligonos;

21. ST_SRID. Permite consultar cuál es el SRID de una geometría o conjunto de geometrías. Devuelve una columna en la que muestra el valor del código EPSG del SRID (en nuestro caso devuelve: 25830 que se corresponde al ETRS89 UTM 30N):

SELECT ST_Transform(geom, 4326) 
FROM datos.poligonos;

20. ST_SetSRID. Permite establecer / asignar el SRID o Sistema de Referencia de Coordenadas de una geometría o conjunto de geometrías. En este caso estamos asignando el EPSG:4326 (WGS 84) al punto con sus coordenadas definidas:

SELECT ST_SRID(geom) 
FROM datos.poligonos;

Funciones para verificación de geometrías

24. GeometryType. Permite conocer el tipo de geometría de un objeto. Retorna un valor que define la tipología dentro de PostGIS, como: ST_Point, ST_Linestring, ST_Polygon, ST_Multipoint…

SELECT ST_GeometryType(geom) as tipo
FROM datos.poligonos;

25. ST_IsValid. Permite conocer si una geometría es válida. Retorna un valor booleano por cada geometría.

SELECT ST_IsValid(geom) as validez
FROM datos.poligonos;

Si por ejemplo quisiéramos conocer cuántas geometrías de una tabla son válidas e inválidas podríamos realizar una consulta del estilo:

SELECT ST_IsValid(geom) as validez, 
(select count(ST_IsValid(geom)) as numero)
FROM datos.poligonos
GROUP BY validez

Etiquetas: AnálisisBases de Datos EspacialesBufferGeometríasGeoprocesoGISpgAdminPostGISPostgreSQLSistemas de Información GeográficaSQL
Compartir86Tweet54
Post anterior

Cargar geometrías en formato WKT en QGIS

Post siguiente

Cómo instalar pgAdmin 4 en Ubuntu para PostGIS

Raúl Estévez

Raúl Estévez

Post siguiente
cómo instalar pgAdmin 4

Cómo instalar pgAdmin 4 en Ubuntu para PostGIS

cómo cargar csv en qgis

Cómo cargar un CSV en QGIS

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Posts Recomendados

qgis extraer valores raster

Cómo obtener valores de una capa ráster en QGIS

13 mayo, 2019
aprender programacion GIS gratis

Aprender programación GIS gratis: 15 webs de referencia

11 diciembre, 2018
Geotecnologías GIS Mapas Cartografía Digital

Geotecnologías, GIS y Mapas

Información, recursos de aprendizaje y novedades del sector GEO para los usuarios especializados en el manejo de la información geográfica, su análisis y su representación.

Posts Nuevos

que es la geoestadistica

¿Qué es la Geoestadística? Análisis geoestadístico con R, ArcGIS y QGIS

8 mayo, 2020
libros R Data Science GIS

Libros gratis de R para GIS y Análisis de datos espaciales

2 mayo, 2020
productos ESRI GIS

Principales productos de ESRI para GIS

26 abril, 2020
como cargar wms wmts qgis

Cómo cargar servicios WMS y WMTS en QGIS: proceso y diferencias

15 abril, 2020
kepler gl mapbox mapas analisis datos

Kepler.gl de Mapbox: mapas interactivos y visualización de datos

13 abril, 2020
Geotecnologías GIS Mapas Cartografía Digital

El blog colaborativo sobre Geotecnologías, GIS y Mapas para la comunidad GEO

Información, recursos de aprendizaje y novedades del sector GEO para los usuarios especializados en el manejo de la información geográfica, su análisis y su representación.

Todo reunido en un blog colaborativo y abierto. ¿Te animas a colaborar con geomapik?

Categorías

  • Análisis GIS
  • Desarrollo GIS
  • Novedades GIS
  • Recursos GIS
  • Spatial Data Science
  • Tutoriales
  • Uncategorized
  • Webmapping
Sin resultados
Ver todos los resultados
Spatial Data Science

¿Qué es la Geoestadística? Análisis geoestadístico con R, ArcGIS y QGIS

8 mayo, 2020
Spatial Data Science

Libros gratis de R para GIS y Análisis de datos espaciales

2 mayo, 2020
Novedades GIS

Principales productos de ESRI para GIS

26 abril, 2020
Tutoriales

Cómo cargar servicios WMS y WMTS en QGIS: proceso y diferencias

15 abril, 2020

Etiquetas

Análisis (15) Análisis de datos (4) aprender GIS (5) ArcGIS (5) Bases de Datos Espaciales (5) Big Data (2) CARTO (2) Cartografía (27) catastro (2) Data Analysis (4) Data Science (4) Datos (9) Desarrollo GIS (15) Diseño cartográfico (6) ESRI (3) Geoinformática (7) Geomarketing (2) Geotecnología (4) GIS (37) Javascript (4) Jupyter Notebook (3) leaflet (2) Mapas (19) Mapbox (2) mapeo colaborativo (2) MDT (3) OpenLayers (2) OpenStreetMap (2) OSGEO (2) plugins (7) PostGIS (6) PostgreSQL (6) Programación (12) Python (7) QGIS (24) R (5) ráster (2) Sistemas de Información Geográfica (29) SQL (6) Teledetección (2) terreno (2) Tutorial (12) visor de mapas (3) visualización (3) Webmapping (11)

© 2018 geomapik - Geotecnologías, GIS y Mapas

Sin resultados
Ver todos los resultados
  • Proyecto
  • Contacto

© 2018 geomapik - Geotecnologías, GIS y Mapas

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies