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 类型
使用说明
- 如果 startfraction 和 endfraction 具有相同的值,则相当于ST_LineInterpolatePoint。
- 这仅适用于 LINESTRING。 要在连续的 MULTILINESTRING 上使用,首先使用 ST_LineMerge 将它们连接起来。
- 此函数支持对 M 和 Z 值进行插值。
- 该函数支持 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) |
+--------------------------------------------------------+--------------------------------------------------------+