名前

ST_MakeLine — POINT、MULTIPOINT、LINESTRINGからLINESTRINGを生成します。

概要

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

geometry ST_MakeLine(geometry set geoms);

説明

ポイント、マルチポイントまたはラインストリングのジオメトリの点を含むラインストリングを生成します。他のジオメトリではエラーが発生します。

1番目の形式: 二つの入力ジオメトリを受け付ける。

2番目の形式: ジオメトリの配列を受け付ける。

形式3: ジオメトリの行集合を受け付ける約関数。入力ジオメトリの順序を確実にするには、関数呼び出しでORDER BYを使うか、ORDER BY節を持つサブクエリを使います。

入力ラインストリングの開始位置で重複するノードはひとつのポイントに減らされます。ポイントとマルチポイントの入力での重複するポイントは減らされません。マルチラインストリングの要素は、コレクション内の出現順で処理されます。出力ラインストリングから重複ポイントを削除するにはST_RemoveRepeatedPointsが使えます。

この関数は3次元に対応し、Z値を削除しません。

Availability: 3.7.0 - マルチラインストリング入力要素への対応が導入されました

Availability: 2.3.0 - MULTIPOINT入力要素への対応が導入されました

Availability: 2.0.0 - LINESTRING入力要素への対応が導入されました

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

Two-input variant.

二つのポイントで構成されるラインを生成します。

Code
SELECT ST_MakeLine(ST_Point(1, 2), ST_Point(3, 4));
出力:
LINESTRING(1 2,3 4)
Figure
Geometry figure for visual-st-makeline-01

二つの3次元ポイントから3次元ラインを生成します。

Code
SELECT ST_MakeLine(ST_MakePoint(1, 2, 3), ST_MakePoint(3, 4, 5));
出力:
LINESTRING(1 2 3,3 4 5)
Figure
Geometry figure for visual-st-makeline-02

二つの接続されていないラインストリングからラインを生成します。

Code
SELECT ST_MakeLine('LINESTRING(0 0,1 1)', 'LINESTRING(2 2,3 3)');
出力:
LINESTRING(0 0,1 1,2 2,3 3)
Figure
Geometry figure for visual-st-makeline-03

Array variant.

並べ替えを伴うサブクエリで作られた配列からラインを生成します。

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

3次元ポイントの配列から3次元ラインを生成します。

Code
SELECT ST_MakeLine(ARRAY[ST_MakePoint(1, 2, 3), ST_MakePoint(3, 4, 5), ST_MakePoint(6, 6, 6)]);
出力:
LINESTRING(1 2 3,3 4 5,6 6 6)
Figure
Geometry figure for visual-st-makeline-04

Aggregate variant.

この例ではGPSトラックの集合からポイントの時間ベースのシーケンスを問い合わせています。結果ジオメトリは、GPSトラックの移動順ポイントで構成されるラインストリングです。

ORDER BY節を使うことで、正しい順序のLINESTRINGが生成できます。

Code
SELECT gps.track_id, ST_MakeLine(gps.geom ORDER BY gps_time) AS geom
FROM gps_points AS gps
GROUP BY gps.track_id;

集約内での整列ができない時は、サブクエリーで整列させます。ただし、クエリープランにサブクエリーの整列が反映されない場合があります。

Code
SELECT gps.track_id, ST_MakeLine(gps.geom) AS geom
FROM (
  SELECT track_id, gps_time, geom
  FROM gps_points
  ORDER BY track_id, gps_time
) AS gps
GROUP BY gps.track_id;