Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_LINESUBSTRING

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

功能描述

根据起始位置和结束位置,截取线串。

语法格式

sql
GEOMETRY ST_LINESUBSTRING(GEOMETRY a_linestring, DOUBLE startfraction, DOUBLE endfraction);
GEOGRAPHY ST_LINESUBSTRING(GEOGRAPHY a_linestring, DOUBLE startfraction, DOUBLE endfraction);

参数说明

  • a_linestring:目标 LINESTRING 对象。
  • startfraction:起始位置,线串长度的分数,范围:[0,1]。
  • endfraction:结束位置,线串长度的分数,范围:[0,1]。

函数返回类型

GEOMETRY/GEOGRAPHY 类型

使用说明

  1. 如果 startfraction 和 endfraction 具有相同的值,则相当于ST_LineInterpolatePoint。
  2. 这仅适用于 LINESTRING。 要在连续的 MULTILINESTRING 上使用,首先使用 ST_LineMerge 将它们连接起来。
  3. 此函数支持对 M 和 Z 值进行插值。
  4. 该函数支持 3d 并且不会丢失 z-index。

示例

在1/3中间范围上叠加的LineString(0.333, 0.666):

sql
SQL> SELECT TO_CHAR(ST_AsText(ST_LineSubstring( 'LINESTRING (20 180, 50 20, 90 80, 120 40, 180 150)', 0.333, 0.666)));

+--------------------------------------------------------------------------------------------------+
|                                              EXPR1                                               |
+--------------------------------------------------------------------------------------------------+
| LINESTRING(45.17311810399485 45.74337011202745,50 20,90 80,112.97593050157862 49.36542599789518) |
+--------------------------------------------------------------------------------------------------+

如果起始位置和结束位置相同,则结果是一个 POINT:

sql
SQL> SELECT TO_CHAR(ST_AsText(ST_LineSubstring( 'LINESTRING(25 50, 100 125, 150 190)', 0.333, 0.333)));

+--------------------------------------------+
|                   EXPR1                    |
+--------------------------------------------+
| POINT(69.28469348539744 94.28469348539744) |
+--------------------------------------------+

地理实现沿球体表面进行测量,而几何实现沿线进行测量:

sql
SQL> SELECT TO_CHAR(ST_AsText(ST_LineSubstring( 'LINESTRING(-118.2436 34.0522, -71.0570 42.3611)'::geography, 0.333, 0.666),6)) AS geog_sub
 AS geom_sub;           , TO_CHAR(ST_AsText(ST_LineSubstring('LINESTRING(-118.2436 34.0522, -71.0570 42.3611)'::geometry, 0.333, 0.66m_sub; AS geom

+--------------------------------------------------------+--------------------------------------------------------+
|                        GEOG_SUB                        |                        GEOM_SUB                        |
+--------------------------------------------------------+--------------------------------------------------------+
| LINESTRING(-103.911641 38.931128,-87.941787 41.831072) | LINESTRING(-102.530462 36.819064,-86.817324 39.585927) |
+--------------------------------------------------------+--------------------------------------------------------+