ST_LineInterpolatePoint — 返回沿线在指定分数位置插值的点。
geometry ST_LineInterpolatePoint(
geometry a_linestring, float8 a_fraction)
;
geography ST_LineInterpolatePoint(
geography a_linestring, float8 a_fraction, boolean use_spheroid = true)
;
返回沿线在指定分数位置插值的点。第一个参数必须是 LINESTRING。第二个参数是介于 0 和 1 之间的浮点数,表示点所在位置的线长度的分数。如果存在 Z 和 M 值,则会进行插值。
有关计算最接近点的线位置,请参阅 ST_LineLocatePoint。
此函数计算 2D 中的点,然后插值 Z 和 M 的值,而 ST_3DLineInterpolatePoint 计算 3D 中的点,仅插值 M 值。 |
自 1.1.1 版本起,此函数还会插值 M 和 Z 值(如果存在),而之前的版本将其设置为 0.0。 |
可用性:0.8.2,1.1.1 版本中添加了对 Z 和 M 的支持
已更改:2.1.0。在 2.0.x 版本之前,此函数被称为 ST_Line_Interpolate_Point。
此函数支持 3d,并且不会删除 z 索引。
-- The point 20% along a line SELECT ST_AsEWKT( ST_LineInterpolatePoint( 'LINESTRING(25 50, 100 125, 150 190)', 0.2 )); ---------------- POINT(51.5974135047432 76.5974135047432)
3D 线的中间点
SELECT ST_AsEWKT( ST_LineInterpolatePoint(' LINESTRING(1 2 3, 4 5 6, 6 7 8)', 0.5 )); -------------------- POINT(3.5 4.5 5.5)
线上最接近点的点
SELECT 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; ------------ POINT(3 4)