名稱

ST_MakeLine — 從點 (Point)、多點 (MultiPoint) 或線串 (LineString) 幾何建立線串 (LineString)。

概要

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

geometry ST_MakeLine(geometry set geoms);

描述

建立一個包含點 (Point)、多點 (MultiPoint) 或線串 (LineString) 幾何點的線串 (LineString)。其他幾何類型會導致錯誤。

變體 1: 接受兩個輸入幾何。

變體 2: 接受一個幾何陣列。

變體 3: 聚合函數,接受幾何的資料列集合。為了確保輸入幾何的順序,請在函式呼叫中使用 ORDER BY,或使用帶有 ORDER BY 子句的子查詢。

輸入線串 (LineString) 開頭的重複節點會被摺疊為單一點。點 (Point) 和多點 (MultiPoint) 輸入中的重複點不會被摺疊。ST_RemoveRepeatedPoints 可用於摺疊輸出線串 (LineString) 中的重複點。

此函數支援 3D,且不會丟棄 z 索引。

可用性:2.3.0 - 引入了對多點 (MultiPoint) 輸入元素的支援

可用性:2.0.0 - 引入了對線串 (LineString) 輸入元素的支援

可用性:1.4.0 - 引入了 ST_MakeLine(geomarray)。增強了 ST_MakeLine 聚合函數以更快地處理更多點。

範例:雙輸入變體

建立一個由兩個點組成的線。

SELECT ST_AsText( ST_MakeLine(ST_Point(1,2), ST_Point(3,4)) );

	  st_astext
---------------------
 LINESTRING(1 2,3 4)

從兩個 3D 點建立一個 3D 線。

SELECT ST_AsEWKT( ST_MakeLine(ST_MakePoint(1,2,3), ST_MakePoint(3,4,5) ));

		st_asewkt
-------------------------
 LINESTRING(1 2 3,3 4 5)

從兩個不相連的線串 (LineString) 建立一條線。

 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)

範例:陣列變體

從由帶有排序的子查詢形成的陣列建立一條線。

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

從 3D 點陣列建立一條 3D 線。

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)

範例:聚合變體

此範例從一組軌跡查詢基於時間的 GPS 點序列,並為每個軌跡建立一個記錄。結果幾何是線串 (LineString),由行進順序的 GPS 軌跡點組成。

使用聚合 ORDER BY 可提供正確排序的線串 (LineString)。

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

在 PostgreSQL 9 之前,可以使用子查詢中的排序。但是,有時查詢計畫可能不會遵循子查詢的順序。

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;