Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_LINEINTERPOLATEPOINTS

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

功能描述

在线串的指定位置上插入一个或多个点,并返回插入的点。

语法格式

sql
GEOMETRY ST_LINEINTERPOLATEPOINTS(GEOMETRY a_linestring, DOUBLE a_fraction, BOOLEAN repeat = TRUE);
GEOGRAPHY ST_LINEINTERPOLATEPOINTS(GEOGRAPHY a_linestring, DOUBLE a_fraction, BOOLEAN use_spheroid = TRUE, boolean repeat = TRUE);

参数说明

  • a_linestring: 目标 GEOMETRY/GEOGRAPHY 线串对象。
  • a_fraction:插入点位于该线段的百分比。范围:[0,1]。
  • use_spheroid:距离测量是否使用椭球体,可选,默认:TRUE。
    • TRUE:使用椭球体。
    • FALSE:在球面上进行测量,计算更快。
  • repeat:是否重复。可选,默认值:TRUE。设置为 FALSE时,最多构造一个点,相当于 ST_LineInterpolatePoint。

函数返回类型

GEOMETRY/GEOGRAPHY 类型

使用说明

  1. 如果结果有零个或一个点,则将其作为 POINT 返回。 如果它有两个或更多点,则以 MULTIPOINT 形式返回。
  2. 该函数支持 3D 且不会降低 z-index。
  3. 该函数支持 M 坐标。

示例

每 20% 插值一次点的 LineString:

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

+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                     EXPR1                                                                                     |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| MULTIPOINT((51.5974135047432 76.5974135047432),(78.1948270094864 103.1948270094864),(104.13216318644639 130.37181214238032),(127.0660815932232 160.18590607119015),(150 190)) |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

3D 线的中点:

sql
SQL> SELECT TO_CHAR(ST_AsEWKT(  ST_LineInterpolatePoint('
                  LINESTRING(1 2 3, 4 5 6, 6 7 8)',
                  0.5 )));

+--------------------+
|       EXPR1        |
+--------------------+
| POINT(3.5 4.5 5.5) |
+--------------------+

直线上距离某点最近的点:

sql
SQL> SELECT TO_CHAR(ST_AsText( ST_LineInterpolatePoint( line.geom,
                                ST_LineLocatePoint( line.geom, 'POINT(4 3)'))))
          FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As geom) AS line;

+------------+
|   EXPR1    |
+------------+
| POINT(3 4) |
+------------+