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.
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;

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;

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;

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;

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;

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.
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
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