名前

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を参照して下さい。

[注記]

この関数は2次元のポイントとして計算して、Z値とM値は補間値を計算します。ST_3DLineInterpolatePointは3次元のポイントとして計算して、M値のみ補間値を計算します。

[注記]

1.1.1から、この関数はM軸やZ軸の内挿点も (存在するなら)計算するようになりました。それより前の版では0.0となります。

Availability: 0.8.2 Z軸とM軸のサポートが1.1.1で追加されました

Changed: 2.1.0 2.0.xまでではST_Line_Interpolate_Pointと呼んでいました。

この関数は3次元に対応し、Z値を削除しません。

この例ではラインに沿って20%のポイントを返します。

Code
SELECT ST_LineInterpolatePoint(
'LINESTRING(25 50,100 125,150 190)',
0.2);
出力:
POINT(51.5974135047432 76.5974135047432)
Figure
Geometry figure for visual-st-lineinterpolatepoint-01

3次元ラインの中間点:

Code
SELECT ST_LineInterpolatePoint(
'LINESTRING(1 2 3,4 5 6,6 7 8)',
0.5);
出力:
POINT(3.5 4.5 5.5)
Figure
Geometry figure for visual-st-lineinterpolatepoint-02

ライン上のポイントに最も近いポイント:

Code
SELECT ST_LineInterpolatePoint(
    line.geom,
    ST_LineLocatePoint(line.geom, 'POINT(4 3)'))
FROM (SELECT 'LINESTRING(1 2,4 5,6 7)'::geometry As geom) AS line;
出力:
POINT(3 4)
Figure
Geometry figure for visual-st-lineinterpolatepoint-03

An interpolated point can be offset to the left or right of a line by using ST_OffsetCurve before interpolation. This is useful for locating an address point beside a street centerline.

Code
WITH street AS (
    SELECT 'LINESTRING(0 0, 10 0)'::geometry AS geom,
           100 AS from_num,
           200 AS to_num
)
SELECT
    ST_LineInterpolatePoint(
        ST_OffsetCurve(geom, -2),
        (160 - from_num)::float8 / (to_num - from_num)
    ) AS interpolated_offset_point
FROM street;
出力:
interpolated_offset_point
---------------------------
 POINT(6 -2)
Figure
Geometry figure for visual-st-lineinterpolatepoint-04