ST_MakeLine — Skapar en LineString från Point-, MultiPoint- eller LineString-geometrier.
geometry ST_MakeLine(
geometry geom1, geometry geom2)
;
geometry ST_MakeLine(
geometry[] geoms_array)
;
geometry ST_MakeLine(
geometry set geoms)
;
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 indata LineStrings kollapsas till en enda punkt. Upprepade punkter i Point- och MultiPoint-indata kollapsas inte. ST_RemoveRepeatedPoints kan användas för att kollapsa upprepade punkter från utdata LineString.
Denna funktion stöder 3d och kommer inte att tappa z-index.
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.
Skapa en linje som består av två punkter.
SELECT ST_AsText( ST_MakeLine(ST_Point(1,2), ST_Point(3,4)) ); st_astext --------------------- LINESTRING(1 2,3 4)
Skapa en 3D-linje från två 3D-punkter.
SELECT ST_AsEWKT( ST_MakeLine(ST_MakePoint(1,2,3), ST_MakePoint(3,4,5) )); st_asewkt ------------------------- LINESTRING(1 2 3,3 4 5)
Skapa en linje från två åtskilda LineStrings.
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)
Skapa en rad från en matris som bildas av en underfråga med ordning.
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
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)
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.
SELECT gps.track_id, ST_MakeLine(gps.geom ORDER BY gps_time) As geom FROM gps_points As gps GROUP BY track_id;
Före PostgreSQL 9 kan ordning i en underfråga användas. Ibland kanske dock frågeplanen inte respekterar ordningen på underfrågan.
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;