Buffers en PostGIS: ST_Buffer y ST_Rotate

Para obtener regiones buffer en PostGIS se recurre al comando ST_Buffer de la sección de ‘Geometry Processing’. Como tiene más detalles de ejecución que los comandos referidos en posts anteriores se va a incluir el link a la documentación en línea de PostGIS:

Para ejemplificar como trabaja se empleó, en primer lugar, una tabla de puntos (points) que se ha cargado previamente a la base de datos con ogr2ogr a partir de un archivo vectorial de tipo shapefile. Los comandos siguientes:

SELECT ST_AsText (ST_BUFFER(points.geom, 500, 1)) AS geom
FROM points;

ejecutados en la consola de posgresql producen este resultado:

buffer1

Todos los polígonos de la lista los desplegamos en la Map View de QGIS con ayuda del plugin QuickWKT y efectuamos un ‘Zoom In’ para observar mejor los detalles de sólo uno de ellos; tal como se presenta en la imagen siguiente:

buffer2

El buffer obtenido (500 m) es un cuadrado rotado 90º porque el entero 1 del tercer argumento indica que sólo se tendrá un punto por cuadrante. Si se elige 2 serían dos puntos por cuadrante y el resultado entonces sería un buffer con geometría de octágono. El default es 8 y prácticamente se observa circular. No obstante, sería conveniente para nosotros que el buffer obtenido se pudiese rotar 90º [pi()/4] para desplegarlo de manera normal como un cuadrado. Eso es posible con el editor de geometría de PostGIS ST_Rotate.

En un sólo paso tendríamos lo siguiente:

SELECT ST_AsText (ST_Rotate(ST_BUFFER(points.geom, 500, 1), pi()/4, points.geom)) AS geom
FROM points;

donde el centro de rotación es el propio punto (para líneas y polígonos elegiriamos el centroide) y repitiendo el mismo procedimiento con el plugin QuickWKT corroboramos que funciona:

buffer3

Para finalizar, vamos a producir el buffer (también de 500 m) rotado 90º (con eje de rotación en el centroide de route) para la ‘LINESTRING’ route del post pasado . La secuencia de comandos, para producir la tabla (buffer_route500), es la siguiente:

CREATE TABLE buffer_route500 AS (SELECT ST_Rotate(ST_BUFFER(route.geom, 500), pi()/4, ST_CENTROID(route.geom)) AS geom
FROM route);

ALTER TABLE buffer_route500 ADD COLUMN id SERIAL;
ALTER TABLE buffer_route500 ADD PRIMARY KEY (id);

Se visualiza en QGIS de la manera siguiente:

buffer4

Funcionó tal como se esperaba.

Esta entrada fue publicada en Postgres+postgis, QGIS, SIG, Software Libre. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s