Anfang- und Endpunkt einer Linie finden

Gibt es die Möglichkeit, Anfangs- und Endpunkt einer Linie zu ermitteln?

Line(x1,y1, x2,y2, x3,y3)

Anfang (x1,y1)
Ende (x3, y3)

Du kannst dazu ST_PointN(the_geom, int) verwenden. 1 für den ersten Punkt der Linie und st_numpoints(the_geom) für den letzten.

Grüssle Uwe

Aha, merci.

Hab eine Seite gefunden, auf der viel Befehle stehen.
Chapter*7.*PostGIS Reference

Jetzt habe ich damit aber noch ein anderes Problem noch nicht gelöst:

Ich habe zwei Tabellen: Linie und Punkte. Die Punkte sind immer da platziert wo eine Linie endet.

Jetzt suche ich aus der Tabelle Linien jenen Linienanfangspunkt, wenn ich einen bestimmtem Punkt aus der Tabelle Punkt selektiere.

Ich dachte, ich setze um einen Punkt einen Buffer. Innerhalb diesen Buffers suche ich nach Linienanfangspunkten. Wie groß muss der Buffer aber mindestens sein?

SELECT schacht.id_schacht
 FROM schacht , trassensegment
 WHERE Within  ( 
    (SELECT astext(st_pointn(the_geom, 1))as startpunkt FROM trassensegment WHERE trassensegment.gid = 4) , 
    (SELECT astext(setsrid((buffer(the_geom,2)),4326)) FROM schacht WHERE schacht.schacht_id = 'S000000062')
    ) = TRUE;
SELECT astext(st_pointn(the_geom, 1))as startpunkt FROM trassensegment WHERE trassensegment.gid = 4

ergibt einen Punkt: _POINT(8.47275134976024 49.4803102352417)

_

 (SELECT astext(setsrid((buffer(the_geom,0.5)),4326)) FROM schacht WHERE schacht.schacht_id = 'S000000062')

Ergibt ein Polygon:
POLYGON((8.97275134976024 49.4803102352417,8.96314398996186 49.3827650742336,8.93469111601589 …


Welches wohl aber viel zu groß ist.

Bei der kompletten Abrage werden mir viel zu viele Punkte ausgegeben.

AFAIR gibst du bei WGS84(=4326) die Buffer-Distanz als Winkeldistanz im Raum ein. D.H. dein Buffer ist bei 0,5 übern Daumen 30 km groß :wink: .
Ich würde hier aber auch nur dann mit Geometrien arbeiten, wenn ich unbedingt müsste. Ich würde die Verbindung zwischen Trasse und Schacht über eine Topologie lösen, also dem Trassenstück nur zwei Verweise auf einen Eintrag in der Schacht-Tabelle mitgeben. Die Punktgeometrie des Schachts kann man wie oben dann bei Bedarf aus der Linie generieren. Ist aber eine Frage, was das Datenmodell denn genau leisten soll.

Gruß Uwe

30km, uups. Doch ein bisschen zu groß.

Ich habe ein Topologiemodell für ein Routing. Anbei ein Screenshot.

Das Problem ist aber, dass ich für den dijkstra-Algorithmus zuvor die Tabelle-Trassensegmente bearbeiten muss. (Die PostGIS-Funktion)

--ALTER TABLE trassensegment ADD COLUMN gid serial;
--ALTER TABLE trassensegment ADD COLUMN source integer;
--ALTER TABLE trassensegment ADD COLUMN target integer;

--Start und Endknoten der Abschnitte eintragen

SELECT assign_vertex_id('trassensegment', 0.001, 'the_geom', 'gid');

Dann geht das Routing über die Trassensegmente

SELECT the_geom FROM dijkstra_sp('trassensegment', 1, 35);

1 und 35 kommen hier aus der source und target Spalte.
Statt diesen Spalten müsste ich meine Schächte eintragen können.

Ich dachte halt, ich kann die Linienanfangspunkte über die Geometrie verschneiden. Aber das geht ja schlecht.

Du könntest anstatt mit Buffern und recht teuren st_within-Abfragen auch mit st_distance den Abstand ausrechnen und das Minimum suchen.
Dann könntest du diese Punkt-Id entweder in eine Spalte ‘Anfang’ oder ‘Ende’ deiner Linientabelle schreiben und schon hast du eine ‘lightweight-Topologie’ die aber die Verbindung zwischen den Punkt und Linien ohne teure Geometrieabfragen und Ungenauigkeiten herstellt. Bis auf einmal bei der Erstellung halt.

Grüssle Uwe

Du meinst also, die Geometrie einmal her nehmen zum Verschneiden, später dann aber die ‘lightweight-Topologie’ verwenden?

Sonst würde es ja nur manuell gehen, dass ich die Start- und Endpunkte der Trasse mit “meinen” Knotenpunkte verknüpfe. Da wäre ich aber eine Weile beschäftigt.

Ja. Aber wie gesagt, da hängt von den Anforderungen ab. Wenn du viele Sachen mit den Punkten machen willst, lohnt sich eine eigene Geometrie.

Nicht unbedingt. Du könntest die Geometrien halt nicht in WGS84 prozessieren, sondern in GK4 oder dem jeweils passenden Streifen. Dann könntest du die Bufferdistance in m angeben. Allerdings ist da auf den richtigen Streifen zu achten, da sonst eventuell Abweichungen auftreten können.
Gruß Uwe

Wie gesagt, ich habe eine eigene Topologie.

Das hätte ich ein bisschen genauer anschauen sollen. Jetzt bin ich darauf gekommen.

Das trassensegment bekommt von uns eine ID. Zusätzlich, über andere Tabellen wird angegeben, welcher Knoten vorne und hinten ist, bzw. welche Knoten miteinander verbunden sind.

Dadurch konnte ich die source und target-Spalte vom dijkstra mit unseren Start und Ziel-Spalten verknüpfen.

oder so ähnlich…

Trotzdem merci für die ganzen Tipps!