Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_LINEMERGE

📄字数 1.2K
👁️阅读量 加载中...

功能描述

返回将 MULTILINESTRING 的线元素连接在一起而形成的 LINESTRING 或 MULTILINESTRING。

语法格式

sql
GEOMETRY ST_LINEMERGE(GEOMETRY amultilinestring);
GEOMETRY ST_LINEMERGE(GEOMETRY amultilinestring, BOOLEAN directed);

参数说明

  • amultilinestring:目标 MULTILINESTRING 对象。
  • directed:是否定向。

函数返回类型

GEOMETRY 类型

使用说明

  1. 线在 2 线交叉点处的端点处连接。 线不会在 3 向或更高阶次的交叉点上连接。
  2. 如果定向参数 directed 为 TRUE,则不会更改线串内的点顺序,方向相反的线不合并。
  3. 此函数仅适用于 MULTILINESTRING/LINESTRING 。 其他几何类型返回空 GEOMETRYCOLLECTION
  4. 此函数是由 GEOS 模块执行。
  5. 此函数删除 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)