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.

Hokkos
fuente
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;
Hokkos
fuente