¿Qué cambios trae el nuevo PostGIS 3?

La versión de PostGIS 3.0 acaba de ver la luz. Por el momento se trata de una versión 3.0.0 alfa o lo que es lo mismo, una versión preliminar de lo que será PostGIS 3.

PostGIS 3 será la extensión espacial de la base de datos PostgreSQL 12.

Existen muchos motivos para comenzar a trabajar con esta base de datos espacial. Cuenta con características nativas, como son:

  • Los índice espaciales (GiST).
  • Funciones geométricas como ST_Area, ST_Length, ST_Distance, ST_As*, ST_From*.
  • Funciones de análisis espacial como ST_Intersects (Point/Polygon).
  • El tipo Geography (ST_Length, ST_Area, ST_Intersects).

Novedades de PostGIS 3

PostGIS 3 cuenta con las versiones más recientes de librerías externas muy maduras que le proporcionan robustez:

  • GEOS 3.8 (geometría computacional)
    • PointOnSurface
    • BuildArea
    • MakeValid
    • Snap Rounding.
    • Robust Overlay.
  • Proj 6 (para proyectar coordenadas). Proj 6 brinda transformaciones de datos más precisas y soporte para proyecciones WKT.
    • Soporte de datum basado en tiempo ✅
    • Soporte de datum vertical ✅
    • WKT2 ✅
    • Base de datos EPSG incrustada ✅
  • GDAL (algoritmos raster): ST_PixelAsPolygons.

Cambio en la extensión raster

Desde PostGIS 2.0, la funcionalidad raster ha formado parte de la misma extensión PostGIS:

CREATE EXTENSION postgis

geometry
geography
raster

Pero esta extensión creció tanto que ya es tan grande como los tipos vectoriales geometrygeography. Algunas personas se habían quejado de las 300 funciones extras que tenían que «recorrer» sin ser usuarias de la funcionalidad Raster.

Después de mucho discutir sobre la mejor manera de resolver esto y hacer una actualización sencilla, se presentó un plan y el trabajo necesario para desvincular las funcionalidades raster de la extensión PostGIS y convertirla en una propia extensión.

Uno de los cambios principales en PostGIS 3.0 es que la funcionalidad de ráster se ha dividido como una extensión independiente:

CREATE EXTENSION postgis
geometry
geography

CREATE EXTENSION postgis_raster
raster

Dicho esto, si estamos actualizando desde una versión anterior a la 3, debemos actualizar de la siguiente manera:

ALTER EXTENSION postgis UPDATE;
SELECT PostGIS_Extensions_Upgrade ();

Si no necesitamos el raster, podemos seguir el ejemplo anterior complementándolo con:

DROP EXTENSION postgis_raster;

Es decir, sucede como con la extensión de topología o enrutamiento pg_routing, que desde sus inicios fueron extensiones independientes.

PostGIS en paralelo y PgSQL 12

Tal y como nos explica Paul Ramsey en su blog, durante los últimos dos ha estado probando la compatibilidad con el procesamiento de consultas en paralelo en PostgreSQL, particularmente en conjunción con la extensión espacial PostGIS.

Las consultas espaciales tienden a estar vinculadas con la CPU, por lo que la aplicación del procesamiento en paralelo suele ser una gran ganancia para el usuario.

Con la llegada de PostgreSQL 12 y PostGIS 3, todo ha cambiado. Todos los tipos de consulta estándar ahora se pueden paralelizar fácilmente usando nuestros costos predeterminados. Eso significa ejecución paralela de:

  • Exploraciones de secuencias en paralelo.
  • Agregados en paralelo.
  • ¡Joins en paralelo!.

PostgreSQL 12 y PostGIS 3 finalmente han resuelto el problema de ejecución de consultas espaciales en paralelo, y todas las consultas principales se ejecutan en paralelo sin una intervención extraordinaria.

Características más importantes de PostGIS 3

  • Se introduce `–with-wagyu` como opción para validar los polígonos MVT.
  • ST_AsGeoJSON(fila) genera objetos geográficos completos de GeoJSON.
  • Mejoradas las funciones de PostGIS ST_Area, ST_Distance, ST_Intersection, ST_Difference, ST_Union, ST_Intersects, ST_3DIntersects, ST_3DDistance para manejar tipos (Solid PolyhedralSurface, TINS) que solo estaban disponibles en SFCGAL.
  • Eliminado el interruptor postgis.backend.
  • Soporte SP-Gist y Gist para índices N-D, overlaps, contains, within, equals.
  • Conversión de json (geometry) y jsonb (geometry) para la generación implícita de GeoJSON. Es decir json::geometry y jsonb::geometry 

Más info:

Seguiremos actualizando este artículo si aparece alguna novedad más.

1 comentario en «¿Qué cambios trae el nuevo PostGIS 3?»

  1. Buenos días Aurelio, Tengo una duda: hace unos días creando una base de datos me dijeron que se podía almacenar en una sola tabla diferentes tipos de geometría que a su vez tienen diferentes tipos de sistemas de coordenadas. no estoy muy segura si eso puede ser una buena práctica. podrías darme tu opinión al respecto?

Los comentarios están cerrados.