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%のポイントを返します。
SELECT ST_LineInterpolatePoint( 'LINESTRING(25 50,100 125,150 190)', 0.2);
POINT(51.5974135047432 76.5974135047432)
3次元ラインの中間点:
SELECT ST_LineInterpolatePoint( 'LINESTRING(1 2 3,4 5 6,6 7 8)', 0.5);
POINT(3.5 4.5 5.5)
ライン上のポイントに最も近いポイント:
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)
補間前に ST_OffsetCurve を使うと、補間点をラインの左側または右側に平行移動できます。これは住所ポイントを道路中心線のそばに置くのに使います。
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)