[FOSSGIS-Talk] Geometrien einer Linie in räumlich korrekter Folge anordnen

lars lingner lars at lingner.eu
Mi Jun 8 22:37:29 CEST 2022


Hallo Claas,

ich habe neulich ein ähnliches Problem gehabt. Ich beschreibe es mal kurz.

- Polygone (Parkflächen) liegen neben einer Linie (Straße)
- Stützpunkte der Polygone werden extrahiert mit ST_DumpPoints()
- Snapping der Punkte auf die Linie mit ST_ClosestPoint()
- mit ST_MakeLine() eine Linie aus den Punkten machen

Der Trick dabei ist, mit Hilfe von ST_MakeLine(... ORDER BY ...) die 
Reihenfolge der Punkte zu sortieren unter Zuhilfenahme der 
ursprünglichen Linie (Straße)

Die Frage ist, wonach sortiert man. Wenn du an deinen Punkten einen 
Zeitstempel hast, kannst du den benutzen. Im Postgis-Handbuch [1] ist 
dazu ein Beispiel.

SELECT gps.track_id, ST_MakeLine(gps.geom ORDER BY gps_time) As geom
	FROM gps_points As gps
	GROUP BY track_id;

Ich hatte leider keinen Zeitstempel. Deswegen habe ich 
ST_LineLocatePoint() zur Hilfe genommen. Damit bekommst du die Position 
eines Punktes auf einer Linie und zwar als Wert zwischen 0 (Startpunt) 
und 1 (Endpunkt). Das nutze ich dann als Sortierkriterium.

Als SQL sieht das dann so aus:

ST_MakeLine(
   ST_ClosestPoint(
     line.geom,
     point.geom
   ) ORDER BY
     ST_LineLocatePoint(
       line.geom,
       ST_ClosestPoint(line.geom, point.geom)
       --zur Sicherheit snappe ich hier die Punkte nochmal auf die Linie
     )
)

line ist die Straße, point sind die Stützpunkte der Flächen.


Ein Zusatz noch: wenn du mit Postgis und ST_DumpPoints() die GPX-Traks 
auseinander nimmst, erhältst du ein Set bestehend aus der Geometrie und 
einem "Path". Letzterer entspricht der fortlaufenden Nummer in der Linie.


[1] https://postgis.net/docs/ST_MakeLine.html

-- 
Viele Grüße

Lars
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : OpenPGP_signature
Dateityp    : application/pgp-signature
Dateigröße  : 840 bytes
Beschreibung: OpenPGP digital signature
URL         : <http://lists.fossgis.de/pipermail/fossgis-talk-liste/attachments/20220608/0b121f48/attachment.sig>


Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste