ラインストリング上にある間、ランダムなフィッシュネットのセルに互いに指定された距離でポイントを作成します


10

1x1 kmセルのフィッシュネットを受け取る陸上プロトコルがあります。一部のセルはランダムに選択されます。各セルに4つのポイントを配置する必要があり、これらのポイントも道路上になければなりません。ポイント間の最小距離は、すべての細胞のすべてのポイントのために500メートルでなければならない、可能な場合、またはそれがない場合は、我々は可能な最大距離を求めています。

最初の試行では、ST_CreateFishnetを使用してすべてのセルを4つの500x500 mセルに分割し、次にサブセルの重心にポイントを配置してから、最も近い道路(ST_ClosestPoint)に配置します。いくつかの良い結果が得られますが、以下の例では、ポイント5が6から近すぎるため、左側の道路に移動できることがわかります。

WITH
r1 AS (         -- only sub-cells which intersects random cells
    SELECT id_maille, ROW_NUMBER() OVER() AS id_grille, fishnet_500.geomgrille
    FROM fishnet_500
        JOIN t_mailles
            ON ST_Intersects(ST_Buffer(t_mailles.geom,-200), fishnet_500.geomgrille)     -- buffer < 0 to not select neightbours
)
,
r2 AS (         -- cut roads in every cells
SELECT id_maille, id_grille, ST_Intersection((ST_Dump(roads.geom)).geom, r1.geomgrille) as geomroute
FROM roads
    JOIN r1
        ON ST_Intersects(roads.geom, r1.geomgrille)
)
                -- select point on each road the closest to cell centroid
SELECT r2.id_maille, r2.id_grille, ST_ClosestPoint(ST_Union(r2.geomroute),ST_Centroid(r1.geomgrille)) as geomipa
FROM r2
    JOIN r1
        ON r2.id_grille = r1.id_grille
GROUP BY r2.id_maille, r2.id_grille, r1.geomgrille
ORDER BY r2.id_maille, r2.id_grille

試してみたい場合は、3つのレイヤー(ランダムなセルを含むフィッシュネット、サブフィスネット、および道路)をここにあるアーカイブに配置します。

多くの可能性を試す再帰アルゴリズムは避けられないと思いますが、よくわかりません。

ここに画像の説明を入力してください


これまでに使用したコードを共有できますか?
Cushen 2018年

他に制約はありますか?たとえば、サブセルの最も遠いコーナーのポイントから開始するのが簡単になり、近すぎるために他のポイントを破棄する必要が少なくなりますか?
シンバマング2018年

はい、対象のコーナーのセルに接触しているセルが他にない場合は、コーナーのポイントから開始するのが良いでしょう。ポイントは、グリッド全体で互いに最小距離にある必要があります。
Nicolas Boisteault 2018年

回答:


1

PostGISデータベースにリンクして、Rまたはpythonでこれを実行しますか?各1x1 kmセルのすべてのラインでST_DumpPointsを使用した場合、多くの利用可能なアルゴリズムの1つを使用して、それぞれの距離が500mを超えるか、可能な限り離れた4つのポイントを選択できるはずです。

おそらく、ナップザックの問題についてウィキペディアで言及されているアルゴリズムの1つであるhttps://en.wikipedia.org/wiki/Knapsack_problemは、いくつかのアイデアを提供します。または、MCMCアルゴリズムがうまく機能すると思います。

2つのグリッドが互いに隣接している場合、隣接するグリッドのポイント間の距離は重要ですか?


最後の質問に答える。はい、前回のコメントで述べたように、「ポイントはグリッド全体で互いに最小距離でなければなりません」。ご協力ありがとうございました。
Nicolas Boisteault
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.