名前

ST_MakeLine — ポイント、マルチポイント、ラインジオメトリからラインストリングを生成します。

概要

geometry ST_MakeLine(geometry set geoms);

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

説明

ST_MakeLineには三つの形式があります。一つ目は、ポイント、マルチポイントまたはラインジオメトリの行を取り、一つのラインストリングを返す空間集約関数です。二つ目は、イント、マルチポイントまたはラインジオメトリの配列を取る関数です。三つめは、二つのポイント、マルチポイントまたはラインジオメトリを取る通常巻数です。集約関数の形式を使う場合で、関数に渡す前にポイントの順序を整理するには、副問い合わせを使います。

ポイント、マルチポイント、ラインジオメトリのいずれでもない入力は無視されます。

ライン要素を追加する時には、共通ノードは出力から削除されます。ポイントとマルチポイントの入力にある共通ノードは削除されません。

This function supports 3d and will not drop the z-index.

Availability: 2.3.0 - マルチポイントの入力要素に対応するようになりました。

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

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

例: 空間集計版

この例では、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;

例: 非空間集計版

一つ目の例は二つのポイントからなる使い捨てのラインストリングです。二つ目は、ユーザが描いた二つのポイントからラインストリングを生成しています。三つ目は、二つの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次元ラインを生成
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