[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