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)