[FOSSGIS-Talk] Punkte mit Linien splitten 2
Claas Leiner
claas.leiner at gkg-kassel.de
Fr Nov 27 23:43:20 CET 2015
Vielen Dank für die Hinweise,
-Korrektur: es fehlete eine Zeile in der ersten Abfrage.
Ich habe jetzt eine Lösung gefunden:
Mein Beispiel ist eine Linie, mit fünf Punkten, wobei der Start- und
Endpunkt keine Berückischtigung finden, sondern nur die drei Punkte, die
irgendwo auf der Linie liegen. Die Linie soll also in vier Abschnitte
geteilt werden, die in etwa ähnlich lang sind.
Nach dem spliten ist es genau wie Bernhard beschreibt. Es gibt
übereianderliegende Geometrien, die unterschiedlich zerschnittene
Abschnitte repräsentieren. -------------------------------------------------
Create table split1 AS
SELECT
st_split("Testlinie"."geom","testpunkt"."geom") AS geom,
st_astext(st_split("Testlinie"."geom","testpunkt"."geom")) as WKT,
"Testlinie"."test" AS ltest
FROM
public."Testlinie", public."testpunkt"
Where st_contains ("Testlinie".geom, "testpunkt".geom);
--------------------------------------------------------
Ergebnis (zusätzlich die Länge berechnent):
------------------------------------------------------------------------
wkt_geom wkt lange
LineString (520010.98504180478630587 5693403.91599826887249947,
520570.52098783903056756 5693403.91599826887249947)
LINESTRING(520010.985041805 5693403.91599827,520570.520987839
5693403.91599827) 559.54
LineString (520570.52098783903056756 5693403.91599826887249947,
521144.33081004762789235 5693403.91599826887249947)
LINESTRING(520570.520987839 5693403.91599827,521144.330810048
5693403.91599827) 573.81
LineString (520010.98504180478630587 5693403.91599826887249947,
520234.37120393238728866 5693403.91599826887249947)
LINESTRING(520010.985041805 5693403.91599827,520234.371203932
5693403.91599827) 223.39
LineString (520234.37120393238728866 5693403.91599826887249947,
521144.33081004762789235 5693403.91599826887249947)
LINESTRING(520234.371203932 5693403.91599827,521144.330810048
5693403.91599827) 909.96
LineString (520010.98504180478630587 5693403.91599826887249947,
520852.43004228267818689 5693403.91599826887249947)
LINESTRING(520010.985041805 5693403.91599827,520852.430042283
5693403.91599827) 841.45
LineString (520852.43004228267818689 5693403.91599826887249947,
521144.33081004762789235 5693403.91599826887249947)
LINESTRING(520852.430042283 5693403.91599827,521144.330810048
5693403.91599827) 291.9
------------------------------------------------------------------
Meine Lösung ist jetzt nach dem spliten diese Gemometrie erst über
ST_Union zu verschmelzen und dann mit ST_Dump die Einzelgeometrien zu
extrahieren. dann bekomme ich genau die vier einzelnen Abschnitte.
Beide Schritte in einem Statement:
--------------------------------------------------------
Create table fertig AS
Select
(ST_Dump(ST_Union("split1"."geom"))).geom AS Geom,
st_astext((ST_Dump(ST_Union("split1"."geom"))).geom) AS WKT
from "public"."split1"
group by "split1"."ltest"
-----------------------------------------------
Ergebnis (mit zusätzlich berechneter Länge)
wkt_geom wkt lang
LineString (520010.98504180478630587 5693403.91599826887249947,
520234.37120393238728866 5693403.91599826887249947)
LINESTRING(520010.985041805 5693403.91599827,520234.371203932
5693403.91599827) 223.39
LineString (520234.37120393238728866 5693403.91599826887249947,
520570.52098783903056756 5693403.91599826887249947)
LINESTRING(520234.371203932 5693403.91599827,520570.520987839
5693403.91599827) 336.15
LineString (520570.52098783903056756 5693403.91599826887249947,
520852.43004228267818689 5693403.91599826887249947)
LINESTRING(520570.520987839 5693403.91599827,520852.430042283
5693403.91599827) 281.91
LineString (520852.43004228267818689 5693403.91599826887249947,
521144.33081004762789235 5693403.91599826887249947)
LINESTRING(520852.430042283 5693403.91599827,521144.330810048
5693403.91599827) 291.9
----------------------------------------------------------------
Die Abschnitte sind genau an den Punkte getrennt und es gibt keine
übereianderliegenden Abschnitte mehr.
Mit besten Dank und vielen Grüßen,
Claas
--
--
....................................................................
FOSSGIS 2016, Die Konferenz für Open Source GIS mit OpenData und
OpenStreetMap in Zusammenarbeit mit der agit!
4.-6. Juli 2016 in Salzburg
http://www.fossgis.de/konferenz/2016/
FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
GIS-Bereich und Freier Geodaten!
http://www.fossgis.de/ https://twitter.com/fossgis_eV
____________________________________________________________________
FOSSGIS-Talk-Liste mailing list
FOSSGIS-Talk-Liste at fossgis.de
https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste