Name

ST_MakeLine — 从Point, MultiPoint,或LineString geometries创建LineString。

Synopsis

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

geometry ST_MakeLine(geometry set geoms);

描述

创建包含 Point、MultiPoint 或 LineString 几何图形的点的 LineString。 其他几何类型会导致错误。

第一种形式:接受两个输入几何图形

第二种形式: 接受几何数组

第三种形式:接受几何行集的聚合函数。为了确保输入几何的顺序,请在函数调用中使用ORDER BY,或使用带有ORDER BY子句的子查询。

输入 LineString 开头的重复节点将折叠为单个点。 Point 和 MultiPoint 输入中的重复点不会折叠。 ST_RemoveRepeatedPoints可用于折叠输出 LineString 中的重复点。

该函数支持 3d 并且不会丢失 z-index。

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

从两个三维点生成三维线。

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) );

从三维点数组生成三维线

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 轨迹点组成的 LineStrings。

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;