名前

ST_Line_Substring — 二次元長に対する割合で示された開始位置と終了位置で切り取られた部分ラインストリングを返します.第二引数と第三引数は,float8で0から1の区間です.

概要

geometry ST_Line_Substring(geometry a_linestring, float startfraction, float endfraction);

説明

二次元長に対する割合で示された開始位置と終了位置で切り取られた部分ラインストリングを返します.第二引数と第三引数は,float8で0から1の区間です.この関数はラインストリングでのみ動作します.マルチラインストリングで使用するには,ST_LineMargeと併用します.

'start'と'end'が同じ値を持つ場合は,ST_Line_Interpolate_Pointと等価になります.

ポイントに最も近いライン位置の計算についてはST_Line_Locate_Pointを参照して下さい.

[注意]

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

初出バージョン: 1.1.0, Z軸とM軸のサポートが1.1.1で追加されました.

この関数は三次元をサポートします.Zインデクスを削除しません.

1/3の真ん中(0.333, 0.666)のラインストリング

--Return the approximate 1/3 mid-range part of a linestring
SELECT ST_AsText(ST_Line_SubString(ST_GeomFromText('LINESTRING(25 50, 100 125, 150 190)'), 0.333, 0.666));

										   st_astext
------------------------------------------------------------------------------------------------
LINESTRING(69.2846934853974 94.2846934853974,100 125,111.700356260683 140.210463138888)

--次に示す例では,PostgreSQLのgenerate_series()を
--使ったwhileループに似たことを行って,
--テーブル内の全てのラインストリングを100単位の
--区分にカットしています.
--単位はSRIDの計測単位でで決まります.
--全てのジオメトリがラインストリングまたは
--隣接するマルチラインストリングで,
--100単位*10000より長いジオメトリが無いと仮定します.
--パフォーマンスを良くするために,10000を減らして,
--期待する最大区分数にあわせられます.

SELECT field1, field2, ST_Line_Substring(the_geom, 100.00*n/length,
  CASE
	WHEN 100.00*(n+1) < length THEN 100.00*(n+1)/length
	ELSE 1
  END) As the_geom
FROM
  (SELECT sometable.field1, sometable.field2,
  ST_LineMerge(sometable.the_geom) AS the_geom,
  ST_Length(sometable.the_geom) As length
  FROM sometable
  ) AS t
CROSS JOIN generate_series(0,10000) AS n
WHERE n*100.00/length < 1;
			

関連情報

ST_Length, ST_Line_Interpolate_Point, ST_LineMerge