名前

ST_MakeLine — ポイントまたはラインジオメトリからラインストリングを生成します。

概要

geometry ST_MakeLine(geometry set geoms);

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

説明

ST_MakeLineには3形式があります。ひとつめは、ポイントまたはラインジオメトリの行を取り、1つのラインストリングを返す空間集計です。ふたつめは、ポイントまたはラインジオメトリの配列を取る関数です。みっつめは、2つのポイントまたはラインジオメトリを取る通常関数です。集計関数版に送る前にポイントの整列を行う副問い合わせを使えます。

ライン要素を追加する時には、共通ノードは出力から削除されます。

この関数は3次元に対応しています。Zインデクスを削除しません。

初出: 1.4.0 - ST_MakeLine(geomarray)が導入されました。ST_MakeLine集計関数はより多くのポイントをより早く扱うための強化が施されています。

初出: 2.0.0 - ラインストリング入力要素が導入されました。

例: 空間集計版

この例では、GPS位置の順列を取り、ジオメトリフィールドがGPSポイントからなるラインストリングで行程順になるよう、行程ごとにひとつのレコードを生成します。

-- PostgreSQL 9.0より前の版 - これは普通に動きますが、
-- プランナが副問い合わせの並び順を尊重しない選択を発生させることがあります。
SELECT gps.gps_track, ST_MakeLine(gps.the_geom) As newgeom
	FROM (SELECT gps_track,gps_time, the_geom
			FROM gps_points ORDER BY gps_track, gps_time) As gps
	GROUP BY gps.gps_track;
-- PostgreSQL 9.0以上(集計関数用の新しいORDER BY機能を使えます)では、
-- これは、正しく整列したラインストリングが得られることが
-- 保証されている方法です。
-- 必要ならORDER BYは複数のカラムで利用できます。
SELECT gps.gps_track, ST_MakeLine(gps.the_geom ORDER BY gps_time) As newgeom
	FROM gps_points As gps
	GROUP BY gps.gps_track;

例: 非空間集計版

ひとつめの例は2ポイントからなる使い捨てのラインストリングです。ふたつめは、ユーザが描いた2ポイントからラインストリングを生成しています。みっつめは、2つの3次元ポイントを接続した使い捨ての3次元ラインを生成しています。

SELECT ST_AsText(ST_MakeLine(ST_MakePoint(1,2), ST_MakePoint(3,4)));
	  st_astext
---------------------
 LINESTRING(1 2,3 4)

SELECT userpoints.id, ST_MakeLine(startpoint, endpoint) As drawn_line
	FROM userpoints ;

SELECT ST_AsEWKT(ST_MakeLine(ST_MakePoint(1,2,3), ST_MakePoint(3,4,5)));
		st_asewkt
-------------------------
 LINESTRING(1 2 3,3 4 5)
			

例: 配列使用版

SELECT ST_MakeLine(ARRAY(SELECT ST_Centroid(the_geom) FROM visit_locations ORDER BY visit_time));

-- 3つの3次元ポイントから3次元ラインを生成
SELECT ST_AsEWKT(ST_MakeLine(ARRAY[ST_MakePoint(1,2,3),
				ST_MakePoint(3,4,5), ST_MakePoint(6,6,6)]));
		st_asewkt
-------------------------
LINESTRING(1 2 3,3 4 5,6 6 6)
			

関連情報

ST_AsEWKT, ST_AsText, ST_GeomFromText, ST_MakePoint