Liniendatensatz anhand Punktdatensatz aufsplitten (ST_Split?)

Hallo,

ich möchte einen Liniendatensatz anhand eines Punktdatensatzes aufsplitten. Die Linien und Knotenpunkte liegen mir als separate Tabellen in der Datenbank vor.
Konkret möchte ich mit dem Aufsplitten der Linien an den Knotenpunkten einen Wegenetzgraphen routingfähig machen. Ist das über ST_Split möglich? Im PostGIS Manual 2.0.0 habe ich das Beispiel 2 unter 8.9.25 ST_Split (S. 328) - leicht abgewandelt - ausprobiert und daraus einen View erstellt, der sich auch problemlos im GIS-Programm einlesen ließ. Dort bietet ST_Split genau die von mir gesuchte Funktionalität.
Nur werden bei mir die Linien- und Punktgeometrien nicht wie im Beispiel 2 innerhalb dieser SQL-Abfrage als Geometriecollection erstellt, sondern liegen bereits als einzelne Tabellen in der Datenbank vor (verwendete Software pgAdmin III). Kann mir jemand weiterhelfen?
Vielen Dank für eure Antwort!

LG Steve.

Hallo noch mal,

kann mir niemand helfen? Oder war meine Beschreibung unverständlich?

LG Steve.

DIe Collection ist doch die Ausgabe? Die Geometrien werden im Beispiel als normale Linien und Punkte erzeugt soviel ich sehe. Wenn ich Zeit hab, schau ichs mir morgen mal an.

Grüßle Uwe

Hallo Uwe,
du hast Recht. Im Ergebnis erhält man eine Collection mit den gesplitteten Geometrien, die aus 4 Linien (statt vorher 2) besteht. Wenn ich einen View erstelle und diesen in OpenJump einlese, ist das auch graphisch gut nachvollziehbar.
Eine Ausgabe als Collection wäre für mich ok. Nur möchte ich als Eingangsdaten meine beiden Tables verwenden. Und an dieser Stelle komme ich nicht weiter. Hier mal das Skript für den View zur Info:

CREATE VIEW split_line_point (st_split) AS
SELECT ST_Split(mline, pt)
FROM (SELECT
ST_GeomFromText(‘MULTILINESTRING((10 10, 190 190), (15 15, 30 30, 100 90))’) As mline, ST_Point(30,30) As pt) As foo;

Das “As foo” habe ich mal blind übernommen. Da ist mir auch unklar, was das bedeutet.

Vielen Dank und lG,
Steve.

Das ‘as foo’ ist lediglich ein Alias für die Tabelle, die aus ‘(select …)’ entsteht, denn für das ‘FROM’ benötigt man einen Tabellennamen. Im Prinzip: ‘select … from (erstelle eine neue tabelle) und nenne diese foo’, so daß daraus dann ‘select … from foo’ wird.


Andreas

Für die beiden Geometrien im Beispiel kann du deine beiden Tabellen verwenden, das sind nur Aliase. Allerdings würde ich die irgendwie joinen oder anderweitig einschränken, ansonsten wird versucht alles mit allem zu kreuzen, was sehr langwierig sein kann.

Gruß Uwe

Hallo Uwe und Andreas,

danke euch für die Hilfe! Mit dem As foo hat sich also bei mir nun auch geklärt. Wenn ich das richtig verstanden habe, müsste das mit meinen beiden Ausgangstabellen (Tabelle1, Tabelle2) ungefähr so aussehen:CREATE VIEW split_line_point (st_split) ASSELECT ST_Split(mline, pt)
FROM (Tabelle1 As mline, Tabelle2 As pt) As foo;

PGAdmin bringt mir da immer noch einen Syntaxfehler in der letzten Zeile bei dem Komma nach “mline”. Ich habe schon verschiedene Varianten ausprobiert wie weitere Klammern, Komma weglassen usw. Hat aber leider alles nichts gebracht.

LG Steve.

[I][size=75]CREATE VIEW split_line_point AS[/size][/I][size=75]
 [I]SELECT ST_Split(mline.the_geom, pt.the_geom)[/I]
 [I]FROM Tabelle1 As mline, Tabelle2 As pt;
[/I][/size]

So wird eher ein Schuh draus. Ist aber aus dem hohlen Bauch und ohne Handbuch und Gewähr :wink:

Grüßle Uwe

Hallo Uwe,
vielen Dank! Das war der alles erlösende Tip. Ich habe es ausprobiert und es hat funktioniert!

LG Steve.