Name

ST_MakeLine — Erzeugt einen Linienzug aus einer Punkt-, Mehrfachpunkt- oder Liniengeometrie.

Synopsis

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

geometry ST_MakeLine(geometry set geoms);

Beschreibung

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.

Beispiele: Verwendung der Feld-Version

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)

Beispiele: Verwendung der Feld-Version

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)

Beispiele: Spatiale Aggregatversion

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;