名称

ST_MakeLine — 从点、多点或线串几何中创建一个线串。

语法

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

geometry ST_MakeLine(geometry set geoms);

描述

创建一个包含点、多点或线串几何的点的线串。其他几何类型会导致错误。

变体 1:接受两个输入几何

变体 2:接受一个几何数组

变体 3:接受几何行集的聚合函数。若要确保输入几何的顺序,请在函数调用中使用 ORDER BY,或使用包含 ORDER BY 子句的子查询。

输入线串开头重复的节点将折叠成一个点。点和多点输入中的重复点不会折叠。 ST_RemoveRepeatedPoints 可用于折叠输出线串中的重复点。

此函数支持 3d,并且不会丢弃 z 索引。

可用性:2.3.0 - 引入了对多点输入元素的支持

可用性:2.0.0 - 引入了对线串输入元素的支持

可用性: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)

从两个不相交的线串创建一个线。

 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 点序列,并为每个轨迹创建一个记录。结果几何是线串,由 GPS 轨迹点按行进顺序组成。

使用聚合 ORDER BY 提供一个按正确顺序排列的线串。

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;

另请参阅

ST_RemoveRepeatedPoints, ST_AsEWKT, ST_AsText, ST_GeomFromText, ST_MakePoint, ST_Point