Obtenga todos los nodos de una lista de LineStrings adyacentes en PostGIS


8

Yo uso PostGis y pgRouting. Tengo una tabla con geometrías de los bordes adyacentes devueltos por una consulta de ruta más corta. Quiero concatenar estos bordes y recuperar una lista de todos los nodos en los que consisten estos bordes. ¿Cómo hago esto en SQL?

Creo que la solución sería una mezcla de LineMerge y GeomUnion, pero ¿hay alguna forma inteligente de hacerlo?

Gracias.


ST_LineMerge no hará el trabajo. ST_LineMerge - Devuelve un (conjunto de) LineString (s) formado al coser un MULTILINESTRING. PGRouting le devuelve una lista de cadenas lineales. Quizás GemUnion es la clave. Lo comprobaré si puedo.
— Fabien Ancelin

Respuestas:


4

Ok, entonces lo hice yo mismo con esa función sql:

CREATE OR REPLACE FUNCTION adjacent_linestring_array_to_set_of_points(array_geom geometry[])
   RETURNS SETOF geometry AS
$$
DECLARE
    accu_line geometry;
    temp_line geometry;
BEGIN

FOR temp_line in select * from unnest(array_geom) LOOP
    IF accu_line is NULL THEN
        accu_line := temp_line;
    END IF;
    accu_line := linemerge(GeomUnion(accu_line, temp_line));
END LOOP;

RETURN QUERY SELECT ST_PointN(accu_line, generate_series(1, ST_NPoints(accu_line)));
END;
$$

LANGUAGE 'plpgsql' VOLATILE STRICT;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.