回答:
このクエリはトリックを実行する必要があります。
WITH line AS
(SELECT
your_polylinestring_id,
(ST_Dump(geom)).geom AS geom
FROM your_polylinestring_table),
linemeasure AS
(SELECT
ST_AddMeasure(line.geom, 0, ST_Length(line.geom)) AS linem,
generate_series(0, ST_Length(line.geom)::int, 10) AS i
FROM line),
geometries AS (
SELECT
i,
(ST_Dump(ST_GeometryN(ST_LocateAlong(linem, i), 1))).geom AS geom
FROM linemeasure)
SELECT
i,
ST_SetSRID(ST_MakePoint(ST_X(geom), ST_Y(geom)), 31468) AS geom
FROM geometries
最初に、ポリラインストリング列から個別のラインストリングを選択します ST_Dump
次にST_AddMeasure
、0で始まる(ラインストリングの始まり)とラインストリングの終わり(ラインストリングの長さと同じ)でメジャー要素を定義する必要があります。Generate_series
10のステップでthis測定の上に系列を作成します。ここで定義できます"n metres"
(この例では10メートル)。i
値は、すべてのラインストリングのために新たに開始します。
とST_LocateAlong
とST_GeometryN
あなたは多次元点ジオメトリを作成します。
最後に、このジオメトリのX値とY値を抽出し、そこからポイントを作成する必要があります。
結果は次のようになります。
編集
公平を期すために、この情報を追加します。この回答のアイデアとクエリは、PostGISのDEMからドレープラインを作成するために使用しているクエリから抽出されます。この優れた実装については、Mathieu Leplatreのこの記事で説明しています。
WITH line AS
で使用されていますか?他の場所に「線」が表示されません。
WITH Query
は、大規模なクエリに一時テーブルを使用します。ここではいくつかの情報は以下の通りですpostgresql.org/docs/8.4/static/queries-with.html。line
次のサブクエリで使用されlinemeasure
ます。このサブクエリで選択されたデータは、サブクエリで行われた選択に基づいていline
ます。それらはお互いの上に構築されます。お役に立てば幸いです!
st_locate_along_measure
です。