Anillos exteriores de un polígono en PostGIS: ST_ExteriorRing

En el post anterior se consideró la determinación de la línea más corta entre geometrías empleando ST_ShortestLine. El objetivo era encontrar las líneas más cortas, de todas las posibles, entre los rasgos de una geometría tipo polígono y otra tipo punto. Sin embargo, si los puntos coincidían con los rasgos del polígono la distancia era determinada indefectiblemente como cero.

Una forma de soslayar este inconveniente es utilizando la geometría correspondiente a los anillos exteriores del polígono. Para ello, creo la tabla (pol8_rings) correspondiente a los anillos del polígono (LINESTRING) en la database con:

CREATE TABLE pol8_rings AS (SELECT fid, ST_Collect(ST_ExteriorRing(geom)) AS geom
FROM (SELECT fid, (ST_Dump(geom)).geom As geom
FROM polygon8) AS foo
GROUP BY fid);

Cuando se carga en la Map View de QGIS se puede observar que funcionó de manera satisfactoria (geometría de bordes color rojo):

rings1

Ahora la consulta siguiente, usando pol8_ring en lugar de polygon8, no produce distancias iguales a cero; tal como se puede observar en el resultado colocado inmediatamente a continuación:

FROM pol8_rings, random_points AS rp
utah-# GROUP BY pol8_rings.fid
utah-# ORDER BY pol8_rings.fid;

  fid |       min        
 -----+------------------
    0 | 7973.82638451241
    1 | 68.0391393152481
    2 |  947.47570748184
    3 |   714.0772000191
    4 | 821.511702702019
    5 | 1656.74159284979
    6 | 2499.72683210753
    7 | 398.864971983412
(8 rows)

No obstante, para consultar las geometrías es preciso crear una nueva tabla para incluir todas las distancias que antes eran cero. Esto se hace con:

CREATE TABLE lines2 AS(
SELECT pol8_rings.fid, ST_ShortestLine(pol8_rings.geom, rp.geom) AS geom, 
    ST_LENGTH((ST_ShortestLine(pol8_rings.geom, rp.geom))) AS length
    FROM pol8_rings, random_points AS rp
ORDER BY pol8_rings.fid, length ASC
);

Las geometrías faltantes son:

0102000020647F000002000000C802775AC2DB1941735C419AEDF4504102E31E24AFDC194101919537E5F45041
0102000020647F0000020000003FA2D159B2D81C41FF4F6ED30300514193F85596E6C91C41F1268CC80B005141
0102000020647F0000020000002AC9F5D0694F1641D10F67ED72EF5041143E5C05A63816410789C5BEADEE5041
0102000020647F0000020000005BF5367CFB041D4102700B67FADF50419AB97C7A75061D410F36A1475BE05041

que con el plugin QuickWKT se ubican fácilmente en la imagen siguiente:

rings2

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