[FOSSGIS-Talk] Punkte mit Linien splitten
Bernhard Ströbl
bernhard.stroebl at jena.de
Fr Nov 27 12:16:56 CET 2015
Hallo Claas,
bei mir funktioniert das untere Beispiel aus der Anleitung [1]. Auch
wenn ich es folgendermassen umbaue (d.h. der Splitpunkt ist nicht
gleichzeitig Vertex der Linie), geht es:
SELECT ST_AsText(ST_Split(mline, pt)) As wktcut
FROM (SELECT
ST_GeomFromText('LINESTRING(10 10, 10 30, 10 90)') As mline,
ST_Point(10,15) As pt) As foo;
Vielleicht testest Du es mal in einem einfachen SELECT mit nur _einem_
Punkt, der _sicher_ auf _einer_ Linie liegt.
SELECT
ST_Split(tl"."geom", tp."geom") AS geom
FROM "public"."testlinie" tl, "public"."testpunkte" tp
WHERE tl.gid = xy AND tp.gid = zz
Grundsätzlich ist die Aufgabe nicht so trivial, wie sie vielleicht
scheint, denn als Ergebnis willst Du doch sicher die Linienstücke, die
entstehen, wenn man alle Linien mit allen Punkten schneidest, d.h. aber,
Du müsstest eigentlich jeweils das Splitergebnis einer Splitoperation
als Input für die nächste benutzen. Beispiel:
Linie mit vier Punkten (A,B,C,D), Du benutzt zum splitten die Punkte B
und C, dann erhältst Du als Ergebnis ((A,B),(B,C,D)) und
((A,B,C),(C,D)), Du willst aber vermutlich ((A,B),(B,C),(C,D))
Ich habe sowas zum Splitten von Linien mit Linien gemacht [2]
Grüße
Bernhard
[1] http://postgis.net/docs/manual-2.2/ST_Split.html
[2]
https://github.com/qgis/QGIS/blob/master/python/plugins/processing/algs/qgis/SplitLinesWithLines.py
Am 27.11.2015 um 11:39 schrieb Claas Leiner:
> Guten Tag zusammen,
>
> manchmal gibt es ja GIS-Probleme, die auf den ersten Blick einfach
> erscheinen aber sich doch nicht so einfach lösen lassen.
>
> Für das Zerteilen von Linien mit Punkten gibt es im QGIS und auch in der
> Toolbox über GRASS bzw Saga kein passendes Werkzeug.
> Die PostGIS-Funktion ST_Split verspricht jedoch diese Ziel umzusetzen.
> Allerdings hat das Werkzeug bei mir nicht getan was es sollte. Das
> gleiche gilt für LinesCutAtNodes aus SpatiaLite.
>
> Müssten nicht die Testpunkte, die genau auf der Linie liegen, die Linie
> zerschneiden, wenn dieses Statement ausgeführt wird?
> ----------------------------------------------------
> Create table split AS
> SELECT Distinct
> ST_Split("testlinie"."geom", "testpunkte"."geom") AS geom,
> "testlinie"."spalte"
> FROM "public"."testlinie", "public"."testpunkte"
> ----------------------------------------------------
>
> Um die resultierende Geometriecollection aufzulösen, habe ich das ganze
> folgendermaßen durchgeführt:
>
> ----------------------------------------------------
> Create table split AS
> Select DISTINCT
> ST_CollectionExtract("l"."geom",2) AS Geom,
> "l"."test"
> from
> (SELECT
> ST_Split("testlinie"."geom", "testpunkte"."geom") AS geom,
> "testlinie"."test"
> FROM "public"."testlinie", "public"."testpunkte") AS l
> ----------------------------------------------------------
>
> Die resultierende Linie ist unzerschnitten. Auch wenn ich vorher Punkte
> und Linie mit ST_Snap aufeinander fangen lasse.
>
> Hat jemand das Werkzeug erfolgreich angewandt und kann mir einen Tip
> geben - oder gibt es eine Alternative?
>
> Mit besten dank und vielen Grüßen,
>
> Claas
> --
__________ Information from ESET Mail Security, version of virus signature database 12633 (20151127) __________
The message was checked by ESET Mail Security.
http://www.eset.com