Namn

ST_MakeLine — Skapar en LineString från Point-, MultiPoint- eller LineString-geometrier.

Synopsis

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

geometry ST_MakeLine(geometry set geoms);

Beskrivning

Skapar en LineString som innehåller punkterna i geometrierna Point, MultiPoint eller LineString. Andra geometrityper orsakar ett fel.

Variant 1: accepterar två inmatningsgeometrier

Variant 2: accepterar en array av geometrier

Variant 3: Aggregerad funktion som accepterar en rad med geometrier. För att säkerställa ordningen på geometrierna i indata, använd ORDER BY i funktionsanropet eller en underfråga med en ORDER BY-klausul.

Upprepade noder i början av LineString-indata komprimeras till en enda punkt. Upprepade punkter i Point- och MultiPoint-indata komprimeras inte. Komponenterna i MultiLineString hanteras i den ordning de förekommer i samlingen. ST_RemoveRepeatedPoints kan användas för att komprimera upprepade punkter från LineString-utdata.

Denna funktion stöder 3d och kommer inte att tappa z-index.

Tillgänglig sedan: 3.7.0 – stöd för MultiLineString-indataelement infördes

Tillgänglighet: 2.3.0 - Stöd för MultiPoint-indataelement infördes

Tillgänglighet: 2.0.0 - Stöd för LineString-indataelement infördes

Tillgänglighet: 1.4.0 - ST_MakeLine(geomarray) introducerades. ST_MakeLine aggregatfunktioner förbättrades för att hantera fler punkter snabbare.

Exempel

Variant med två indata.

Skapa en linje som består av två punkter.

Kod
SELECT ST_MakeLine(ST_Point(1, 2), ST_Point(3, 4));
Utdata
LINESTRING(1 2,3 4)
Figur
Geometry figure for visual-st-makeline-01

Skapa en 3D-linje från två 3D-punkter.

Kod
SELECT ST_MakeLine(ST_MakePoint(1, 2, 3), ST_MakePoint(3, 4, 5));
Utdata
LINESTRING(1 2 3,3 4 5)
Figur
Geometry figure for visual-st-makeline-02

Skapa en linje från två åtskilda LineStrings.

Kod
SELECT ST_MakeLine('LINESTRING(0 0,1 1)', 'LINESTRING(2 2,3 3)');
Utdata
LINESTRING(0 0,1 1,2 2,3 3)
Figur
Geometry figure for visual-st-makeline-03

Matrisvariant.

Skapa en rad från en matris som bildas av en underfråga med ordning.

Kod
SELECT ST_MakeLine(ARRAY(SELECT ST_Centroid(geom) FROM visit_locations ORDER BY visit_time));

Skapa en 3D-linje från en array av 3D-punkter

Kod
SELECT ST_MakeLine(ARRAY[ST_MakePoint(1, 2, 3), ST_MakePoint(3, 4, 5), ST_MakePoint(6, 6, 6)]);
Utdata
LINESTRING(1 2 3,3 4 5,6 6 6)
Figur
Geometry figure for visual-st-makeline-04

Aggregatvariant.

I detta exempel ställs frågor om tidsbaserade sekvenser av GPS-punkter från en uppsättning spår och en post skapas för varje spår. Resultatgeometrierna är LineStrings som består av GPS-spårpunkterna i den ordning de färdats.

Om du använder aggregatet ORDER BY får du en korrekt ordnad LineString.

Kod
SELECT gps.track_id, ST_MakeLine(gps.geom ORDER BY gps_time) AS geom
FROM gps_points AS gps
GROUP BY gps.track_id;

När ordning inom aggregatet inte är möjlig kan ordning i en underfråga användas. Frågeplanen kan dock ibland ignorera ordningen i underfrågan.

Kod
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 gps.track_id;