PostGISでポリラインをnメートルごとにポイントに変換するにはどうすればよいですか?


14

質問はこれとほぼ同じですが、PostGISを使用する必要があります。

多数のポリラインがあり、これらのラインに沿ってnメートルごとにポイントに変換します。

編集: ステファンに感謝します。おそらく古いバージョンのPostGIS(1.5)が原因で、最終的なクエリは少し異なりましたが、最終的には必要なものが得られました。ポイントは、道路密度のヒートマップに結合されました。 ここに画像の説明を入力してください


回答:


17

このクエリはトリックを実行する必要があります。

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
  1. 最初に、ポリラインストリング列から個別のラインストリングを選択します ST_Dump

  2. 次にST_AddMeasure、0で始まる(ラインストリングの始まり)とラインストリングの終わり(ラインストリングの長さと同じ)でメジャー要素を定義する必要があります。Generate_series10のステップでthis測定の上に系列を作成します。ここで定義できます"n metres"(この例では10メートル)。i値は、すべてのラインストリングのために新たに開始します。

  3. ST_LocateAlongST_GeometryNあなたは多次元点ジオメトリを作成します。

  4. 最後に、このジオメトリのX値とY値を抽出し、そこからポイントを作成する必要があります。

結果は次のようになります。 ここに画像の説明を入力してください

編集

公平を期すために、この情報を追加します。この回答のアイデアとクエリは、PostGISのDEMからドレープラインを作成するために使用しているクエリから抽出されます。この優れた実装については、Mathieu Leplatreのこの記事で説明しています


b / cこれらのSQLコンストラクトに精通していないことを明確にできますか:どこWITH line ASで使用されていますか?他の場所に「線」が表示されません。
クレブロン14年

2
@culebrón WITH Queryは、大規模なクエリに一時テーブルを使用します。ここではいくつかの情報は以下の通りですpostgresql.org/docs/8.4/static/queries-with.htmlline次のサブクエリで使用されlinemeasureます。このサブクエリで選択されたデータは、サブクエリで行われた選択に基づいていlineます。それらはお互いの上に構築されます。お役に立てば幸いです!
ステファン14年

2.0より古いPostGISでは、関数はst_locate_along_measureです。
クレブロン14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.