ST_MakeLine — Erzeugt einen Linienzug aus einer Punkt-, Mehrfachpunkt- oder Liniengeometrie.
geometry ST_MakeLine(
geometry geom1, geometry geom2)
;
geometry ST_MakeLine(
geometry[] geoms_array)
;
geometry ST_MakeLine(
geometry set geoms)
;
Erzeugt einen LineString, der die Punkte von Point-, MultiPoint- oder LineString-Geometrien enthält. Andere Geometrietypen verursachen einen Fehler.
Variante 1: akzeptiert zwei Eingabegeometrien
Variante 2: akzeptiert eine Reihe von Geometrien
Variante 3: Aggregatfunktion, die ein Rowset von Geometrien akzeptiert. Um die Reihenfolge der Eingabegeometrien sicherzustellen, verwenden Sie ORDER BY
im Funktionsaufruf oder eine Unterabfrage mit einer ORDER BY
Klausel.
Wiederholte Knoten am Anfang von Eingabe-LineStrings werden zu einem einzigen Punkt zusammengezogen. Wiederholte Punkte in Punkt- und Multipunkt-Eingaben werden nicht zusammengeklappt. ST_RemoveRepeatedPoints kann verwendet werden, um wiederholte Punkte aus dem Ausgabe-LineString zu klappen.
Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.
Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung zur Eingabe von MultiPoint Elementen eingeführt
Verfügbarkeit: 2.0.0 - Unterstützung zur Eingabe von LineString Elementen eingeführt
Verfügbarkeit: 1.4.0 - ST_MakeLine(geomarray) wurde eingeführt. ST_MakeLine Aggregatfunktion wurde verbessert, um mehr Punkte schneller handhaben zu können.
Erstellen Sie eine Linie, die aus zwei Punkten besteht.
SELECT ST_AsText( ST_MakeLine(ST_Point(1,2), ST_Point(3,4)) ); st_astext --------------------- LINESTRING(1 2,3 4)
Erzeugt eine BOX3D, die durch 2 geometrische 3D-Punkte definiert wird.
SELECT ST_AsEWKT( ST_MakeLine(ST_MakePoint(1,2,3), ST_MakePoint(3,4,5) )); st_asewkt ------------------------- LINESTRING(1 2 3,3 4 5)
Erzeugt einen Linienzug aus einer Punkt-, Mehrfachpunkt- oder Liniengeometrie.
select ST_AsText( ST_MakeLine( 'LINESTRING(0 0, 1 1)', 'LINESTRING(2 2, 3 3)' ) ); st_astext ----------------------------- LINESTRING(0 0,1 1,2 2,3 3)
Erstellen Sie eine Zeile aus einem Array, das durch eine Unterabfrage mit Bestellung gebildet wird.
SELECT ST_MakeLine( ARRAY( SELECT ST_Centroid(geom) FROM visit_locations ORDER BY visit_time) );
Erstellen einer 3D-Linie aus einem Array von 3D-Punkten
SELECT ST_AsEWKT( ST_MakeLine( ARRAY[ ST_MakePoint(1,2,3), ST_MakePoint(3,4,5), ST_MakePoint(6,6,6) ] )); st_asewkt ------------------------- LINESTRING(1 2 3,3 4 5,6 6 6)
Diese Beispiel nimmt eine Abfolge von GPS Punkten entgegen und erzeugt einen Datensatz für jeden GPS Pfad, wobei das Geometriefeld ein Linienzug ist, welcher in der Reihenfolge der Aufnahmeroute aus den GPS Punkten zusammengesetzt wird.
Die Verwendung des Aggregats ORDER BY
liefert einen korrekt geordneten LineString.
SELECT gps.track_id, ST_MakeLine(gps.geom ORDER BY gps_time) As geom FROM gps_points As gps GROUP BY track_id;
Vor PostgreSQL 9 kann die Reihenfolge in einer Subquery verwendet werden. Allerdings kann es vorkommen, dass der Abfrageplan die Reihenfolge der Unterabfrage nicht berücksichtigt.
SELECT gps.track_id, ST_MakeLine(gps.geom) As geom FROM ( SELECT track_id, gps_time, geom FROM gps_points ORDER BY track_id, gps_time ) As gps GROUP BY track_id;
ST_RemoveRepeatedPoints, ST_AsText, ST_GeomFromText, ST_MakePoint