[FOSSGIS-Talk] Punkte mit Linien splitten

Claas Leiner claas.leiner at gkg-kassel.de
Fr Nov 27 23:36:58 CET 2015


Vielen Dank für die Hinweise,

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
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

--