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;