El Blog colaborativo sobre Geotecnologías, GIS y Mapas para la comunidad GEO
  • Política de cookies
  • Más información
  • Contacto
geomapik
  • 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
20.2k
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.

¿Qué es PostGIS? Extensión GIS para PostgreSQL

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;

En este punto no nos podemos olvidar de una de las principales funciones de análisis de relación espacial entre tablas: el join espacial. En el siguiente artículo damos todos los detalles para conocer en profundidad cómo llevar a cabo operaciones de join espacial en PostGIS.

Cómo realizar un join espacial en PostGIS

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
Compartir646Tweet404
AVISO
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

Geógrafo y Geoinformático. 8 años de experiencia. Apasionado de los GIS y la geotecnología, el análisis espacial y la cartografía digital. Especializado en gestión, análisis, integración y visualización de geoinformación. No entiendo el mundo sin los mapas.

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

Comentarios 1

  1. fernando yevenes says:
    2 años atrás

    me imagino para hacer esas 25 pruebas de funciones postgis tienes que tener una base de datos =D pienso yo ya que apuntas al esquema y una tabla

    Responder

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

Instalar paquetes python qgis - portada osgeo

Instalación de paquetes de Python para QGIS

14 diciembre, 2018
10.6k
Geoinformática, geotecnologías y GIS en la era de los datos

Geoinformática, geotecnologías y GIS en la era de los datos

30 noviembre, 2018
2.1k
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

python visualizacion datos

Librerías Python para visualización de datos

21 febrero, 2023
1.2k
geopandas leer archivos GIS

Cómo leer archivos GIS con Geopandas

20 febrero, 2023
1k
Join espacial PostGIS

Cómo realizar un join espacial en PostGIS

19 febrero, 2023
636
Overture Maps. ¿Rival para Google Maps?

Overture Maps ¿una nueva plataforma de mapas con datos abiertos?

19 diciembre, 2022
551
El futuro de los GIS según OpenAI

El futuro de los GIS y el sector geoespacial según OpenAI

9 diciembre, 2022
561
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

Librerías Python para visualización de datos

21 febrero, 2023
1.2k
Spatial Data Science

Cómo leer archivos GIS con Geopandas

20 febrero, 2023
1k
Análisis GIS

Cómo realizar un join espacial en PostGIS

19 febrero, 2023
636
Novedades GIS

Overture Maps ¿una nueva plataforma de mapas con datos abiertos?

19 diciembre, 2022
551

Etiquetas

Análisis (16) Análisis de datos (6) Análisis geoespacial (3) aprender GIS (5) ArcGIS (5) Bases de Datos Espaciales (5) Cartografía (29) Data Analysis (6) Data Science (6) Datos (9) Desarrollo GIS (16) Diseño cartográfico (6) ESRI (3) geoestadística (2) Geoinformática (8) GeoJSON (2) Geopackage (2) Geopandas (4) Geoproceso (2) Geotecnología (5) GIS (44) Javascript (4) Jupyter Notebook (3) Mapas (20) Matplotlib (2) MDT (3) Medio Ambiente (2) OpenStreetMap (3) pgAdmin (2) plugins (7) PostGIS (8) PostgreSQL (7) Programación (17) Python (10) QGIS (25) R (5) Shapefile (2) Sistemas de Información Geográfica (34) Spatial Data Science (4) SQL (7) Tutorial (14) visor de mapas (3) visualización (3) Webmapping (11) WKT (2)

© 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