Rufen Sie alle Knoten aus einer Liste benachbarter LineStrings in PostGIS ab


8

Ich benutze PostGis und pgRouting. Ich habe eine Tabelle mit Geometrien der angrenzenden Kanten, die von einer Abfrage mit dem kürzesten Pfad zurückgegeben werden. Ich möchte diese Kanten verketten und eine Liste aller Knoten abrufen, aus denen diese Kanten bestehen. Wie mache ich das in SQL?

Ich denke, die Lösung wäre eine Mischung aus LineMerge und GeomUnion, aber gibt es eine clevere Möglichkeit, dies zu tun?

Vielen Dank.


ST_LineMerge erledigt den Job nicht. ST_LineMerge - Gibt einen (Satz von) LineString (s) zurück, der durch Zusammennähen eines MULTILINESTRINGs gebildet wurde. PGRouting sendet Ihnen eine Liste mit Linestring zurück. Vielleicht ist GemUnion der Schlüssel. Ich werde das überprüfen, wenn ich kann.
Fabien Ancelin

Antworten:


4

Ok, also habe ich es selbst mit dieser SQL-Funktion gemacht:

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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.