ST_LINEMERGE
📄字数 1.2K
👁️阅读量 加载中...
功能描述
返回将 MULTILINESTRING 的线元素连接在一起而形成的 LINESTRING 或 MULTILINESTRING。
语法格式
sql
GEOMETRY ST_LINEMERGE(GEOMETRY amultilinestring);
GEOMETRY ST_LINEMERGE(GEOMETRY amultilinestring, BOOLEAN directed);参数说明
- amultilinestring:目标 MULTILINESTRING 对象。
- directed:是否定向。
函数返回类型
GEOMETRY 类型
使用说明
- 线在 2 线交叉点处的端点处连接。 线不会在 3 向或更高阶次的交叉点上连接。
- 如果定向参数 directed 为 TRUE,则不会更改线串内的点顺序,方向相反的线不合并。
- 此函数仅适用于 MULTILINESTRING/LINESTRING 。 其他几何类型返回空 GEOMETRYCOLLECTION
- 此函数是由 GEOS 模块执行。
- 此函数删除 M 维度。
示例
合并不同方向的线:
sql
SQL> SELECT ST_AsText(ST_LineMerge(
'MULTILINESTRING((10 160, 60 120), (120 140, 60 120), (120 140, 180 120))'
));
+-------------------------------------------+
| EXPR1 |
+-------------------------------------------+
| LINESTRING(10 160,60 120,120 140,180 120) |
+-------------------------------------------+
(1 row)交叉点的线串个数大于 2 时,线段不会合并:
sql
SQL> SELECT ST_AsText(ST_LineMerge(
'MULTILINESTRING((10 160, 60 120), (120 140, 60 120), (120 140, 180 120), (100 180, 120 140))'
));
+------------------------------------------------------------------------------+
| EXPR1 |
+------------------------------------------------------------------------------+
| MULTILINESTRING((10 160,60 120,120 140),(100 180,120 140),(120 140,180 120)) |
+------------------------------------------------------------------------------+
(1 row)不接触的线,无法合并,则返回原始多线串:
sql
SQL> SELECT ST_AsText(ST_LineMerge(
'MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45.2 -33.2,-46 -32))'
));
+----------------------------------------------------------------------------+
| EXPR1 |
+----------------------------------------------------------------------------+
| MULTILINESTRING((-45.2 -33.2,-46 -32),(-29 -27,-30 -29.7,-36 -31,-45 -33)) |
+----------------------------------------------------------------------------+
(1 row)directed = TRUE,则不合并相反方向的线:
sql
SQL> SELECT ST_AsText(ST_LineMerge(
'MULTILINESTRING((60 30, 10 70), (120 50, 60 30), (120 50, 180 30))',
TRUE));
+-------------------------------------------------------+
| EXPR1 |
+-------------------------------------------------------+
| MULTILINESTRING((120 50,60 30,10 70),(120 50,180 30)) |
+-------------------------------------------------------+
(1 row)显示 处理Z 维度的示例:
sql
SQL> SELECT ST_AsText(ST_LineMerge(
'MULTILINESTRING((-29 -27 11,-30 -29.7 10,-36 -31 5,-45 -33 6), (-29 -27 12,-30 -29.7 5), (-45 -33 1,-46 -32 11))'
));
+-----------------------------------------------------------------------------------+
| EXPR1 |
+-----------------------------------------------------------------------------------+
| LINESTRING Z (-30 -29.7 5,-29 -27 11,-30 -29.7 10,-36 -31 5,-45 -33 1,-46 -32 11) |
+-----------------------------------------------------------------------------------+
(1 row)