Dapatkan semua Node dari Daftar LineStrings yang berdekatan di PostGIS

8

Saya menggunakan PostGis dan pgRouting. Saya punya tabel dengan geometri tepi yang berdekatan dikembalikan oleh kueri jalur terpendek. Saya ingin menyatukan ujung-ujung ini dan mengambil daftar semua simpul yang terdiri dari tepi-tepi ini. Bagaimana saya melakukan ini dalam SQL?

Saya pikir solusinya akan menjadi campuran LineMerge dan GeomUnion, tetapi apakah ada cara cerdas untuk melakukannya?

Terima kasih.

hokkos
sumber
ST_LineMerge tidak akan melakukan pekerjaan itu. ST_LineMerge - Mengembalikan (set) LineString yang dibuat dengan menjahit bersama MULTILINESTRING. PGRouting mengirimi Anda kembali daftar linestring. Mungkin GemUnion adalah kuncinya. Saya akan periksa apakah saya bisa.
Fabien Ancelin

Jawaban:

4

Ok, jadi saya melakukannya sendiri dengan fungsi 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
sumber