LINESTRING's an den Kreuzungen splitten

Hallo!
Kann man per SQL einen LINSTRING immer an dem Knoten splitten, an dem er von einem anderen gekreuzt wird oder wo ein Anderer endet? Hintergrund ist folgender:
Ich habe Straßen als LINESTRING’s in einer Tabelle. Darüber möchte ich mit pgrouting Routen berechnen lassen. Leider funktioniert das nicht, wenn an einer Kreuzung die Linien nicht enden, sondern nur “andocken”. Man stelle sich das z.B. wir das “T” vor. Der Querstrich oben ist ein LINESTRING aus 3 Punkten und der senkrechte Strich endet auf dem mittleren Schnittpunkt vom Querstrich. Ergebnis soll sein, dass der Querstrich in der Mitte geteilt wird.
Bei über 400 LINESTRING ist eine manuelle Korrektur zu aufwendig. Zumal man auch die prüfen muss, die passend enden. Weiterhin kommt es vor, dass immer wieder solche “falschen” LINESTRING’s neu in der DB landen.

Bin dankbar für jeden Hinweis.

stargaizer

Ich kann mir aktuell unter einem LINESTRING erst einmal nichts vorstellen.

Wie wäre es mit ein paar Beispielen?

Hallo Andreas,
hier ein Beispiel, welches das von mir genannte “T” darstellt:

LINESTRING(5 0, 5 10)
LINESTRING(0 10, 5 10, 10 10)

Oder falls du folgende beiden Queries z.B. im OpenJUMP laufen läßt, bekommste es schön hingemalt:

SELECT ST_AsBinary(ST_GeometryFromText('LINESTRING(5 0, 5 10)')) AS geometry;
SELECT ST_AsBinary(ST_GeometryFromText('LINESTRING(0 10, 5 10, 10 10)')) AS geometry;

Es geht darum, dass sich die beiden Linien im Punkt (5 10) schneiden. Das Ergebnis soll dann aus

LINESTRING(0 10, 5 10, 10 10)[/QUOTE]ein[quote]LINESTRING(0 10, 5 10)
LINESTRING(5 10, 10 10)

machen.

Ich hoffe das bringt etwas licht ins Dunkel.

ST_Intersection(the_geom1, the_geom2) dürfte sein was du suchst.

Gruß Uwe

Hallo Uwe!

Eine Intersection ist schon klar, aber nicht das was mich der Lösung meines Problems näher bringt. Bei den beiden von mir als Beispiel genannten Geometrien bekomme ich den Schnittpunkt zurück. Ich müsste aber an dem Punkt die Linie in zwei Linien aufteilen. Nächstes Problem ist, dass ich den gesamten Datenbestand, also die ca. 400 Sätze in der Tabelle darauf hin prüfen und ggf. aufteilen müsste.

Matthias

Ein Union der Geometrien sollte die Schnittpunkte auflösen. also irgendwie sowas:

select st_union(t1.the_geom, t2.the_geom)
  from tabelle t1, tabelle t2
  where st_intersects(t1.the_geom, t2.the_geom)

Ohne Kaffee und Gewähr :wink:

Gruß uwe