[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