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 类型
使用说明
- 如果结果有零个或一个点,则将其作为 POINT 返回。 如果它有两个或更多点,则以 MULTIPOINT 形式返回。
- 该函数支持 3D 且不会降低 z-index。
- 该函数支持 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) |
+------------+