ポリゴンフィーチャの展開のシミュレーション


13

興味深い質問になりたいと思っています。湾岸の石油流出データを使用して一般的なベクトルベースの空間解析手法(バッファー、オーバーレイなど)を導入するGIS入門コースの課題に取り組んでいます。 Deepwater Horizo​​nのオイルは所定の日に流出し、私はバッファーでその膨張をシミュレートしています。

それは概念を説明する仕事をしますが、確かに現実的な結果を提供しません。オイルが膨張するにつれてさまざまな方向にオイルを誘導する電流の効果を模倣/偽造し、均一性の低い結果をもたらす方法でこれをどのように行うことができるかについて考えました。

一般的な意味で、入力ポリゴンフィーチャが与えられた場合に以下を実現するワークフローを探しています。

  • 指定された面積(10平方kmなど)または指定された係数(5%など)だけ元よりも大きい新しいポリゴンフィーチャを作成します。
  • 新しいポリゴンフィーチャの形状は任意ですが、次の点に注意してください...
  • 新しいポリゴンフィーチャには、元のポリゴンフィーチャが含まれます(この点は、取引を中断するものではありませんが、お勧めします)

実際のソリューションでは、海流や流体力学などのモデリングが必要になりますが、これは私がやろうとしていることの範囲外になります(これを組み込んだソリューションは確かに歓迎され、興味深いものになるでしょう)。しかし、このアイデアは、根本的な空間問題についての私の好奇心をそそり、そこにどんな解決策があるのか​​興味があります。私は1つの解決策を考えていますが、他の人がどのような解決策を持っているかを知りたいです。

私はESRIの世界で働いていますが、他のパッケージ/プラットフォームを含むソリューションは大歓迎です(ただし、テストすることはできないかもしれません)。一般的なアルゴリズム、擬似コード、およびコードも同様に問題ありません。


2
興味深い革新的な解決策がありますが、私はそのような演習が油流出と関係があるという暗黙の前提を心配しています。関係する科学情報の量は、彼のへそを見つめる哲学者が利用できる以上のものではありません。確かに、多角形を広めるのは楽しいです-96年にArcView 2で火災シミュレーションを行うことについてESRIの担当者が聞いたことを覚えていますが、このプロセスはarbitrary意的であり、誤解を招く可能性があると言って正当化できますか?
whuber

1
@whuber-結果がarbitrary意的なものではないと主張しているわけではありません。arbitrary意的な結果を持つことは、私が質問で積極的に探しているものです。結果は、現実の世界とはまったく異なることは間違いありません。それが、「油流出の拡大をシミュレートする」とは対照的に、私が質問にタイトルを付けた理由の一部です。私は、特定のドメインでのアプリケーションではなく、計算幾何学/ GIS方法論の側面に興味があります。油流出の部分は、興味深い空間問題について考えるための単なる原動力でした。これを質問で明確にしてみます。
ジェームズM

言及するのを忘れました:現実を反映しようとする場合、なぜバッファーツールをこのように使用するのが悪い選択であるかを考えるよう生徒に求める課題があります。だから誰かが私がこれを現実的なものとして偽装しようとしているのではないかと心配しているなら、そうしないでください:)
ジェームズM

ありがとう。印象的な学生は、「油流出」についての言及とともに拡大ポリゴンのクールなグラフィックデモンストレーションを見て、前者を後者の現実的な表現として批判的に受け入れないかもしれないと心配しました。
whuber

回答:


7

ハロー

ここでは、PostGISでそれを行うための少し楽しい方法だと思います。これは、拡張が現在を表すある線ストリングに従うように拡張できると思います。しかし、今では一方向に拡大するだけです。

50回反復し、反復ごとに最後の反復からポリゴンを取得し、移動、バッファリング(単純化して物事をスムーズに実行)し、凸包でそれを統合します。凸包は結合よりも良い結果をもたらすと思いました。

その結果、50個のポリゴンがどんどん大きくなります。すべての大きなポリゴンは、すべての小さなポリゴンと完全に重なります。

結果を確認するには、http://postgisonline.org/map.phpで試してください。

以下のsql-codeをコピーして、「map1」をクリックするだけです

WITH RECURSIVE t(the_geom、n)AS(SELECT 'POLYGON((10 10,8 13、10 15、12 14、15 15、16 12、15 10、10 10))' :: geometry AS the_geom、1 as n UNION ALL SELECT ST_Convexhull(ST_Collect(ST_Simplify(ST_Buffer(ST_Transscale(the_geom、1.3、2.7,1,1)、1)、0.1)、the_geom))、n + 1 as n FROM t WHERE n <50)SELECT the_geom FROM t ;

30番目の反復からポリゴンを表示したい場合 は、最後のtとセミコロンの間に
制限1オフセット30を追加できます。

これらの50個のポリゴンの生成には約50ミリ秒かかるため、あまり待たずにモデルを拡張できるはずです。

よろしくニクラス

これはもっと良かったと思う:

WITH RECURSIVE t(the_geom、n)AS(SELECT 'POLYGON((10 10,8 13、10 15、12 14、15 15、16 12、15 10、10 10))' :: geometry AS the_geom、1 as n UNION ALL SELECT st_convexhull(ST_collect(ST_Simplify(ST_Buffer(ST_Transscale(the_geom、1.1 * n、15,1,1)、0.2 * n)、0.1)、the_geom))、n + 1 as n FROM t WHERE n <50) SELECT the_geom FROM t

右に曲がる拡張のシミュレーション


それはきちんとした解決策であり、空間データベースのコンテキストでGISについて学習を始める時間を見つける必要があることを思い出させてくれます。このようなサイトが機能する理由の良い例です。私が考えていたものとは完全に異なるソリューションを見つけるだけでなく、ボーナスとして新しいリソースを見つけます。
ジェームズM

はい、空間SQLには多くの可能性があります。上記のクエリは、再帰的な部分があるため、通常よりも少し読みにくくなっています。始めるのに役立つ多くの素晴らしいリソースがあります。
ニックラスアヴェン

3

whuberの警告は重要であり、これを説明目的のみで行っており、流体力学を取り入れたいと思わない限り、これは可能ですが問題を複雑にします。

とはいえ、それは興味深い質問であり、学生にとって楽しいものになると思います。問題を見る別の方法は、各セル内で測定されたオイルの密度を伴うラスターベースの現象と考えることです。そこから、r.spreadドキュメンテーション)などの異方性を考慮したモデルを使用して、おそらくスプレッドを「指示」するための偽電流を含む成長率をモデル化できます。同様に、不規則な形状を使用して線形バッファリングの問題を回避し、ArcGIS内でさまざまな種類の焦点操作で何かを行うことができます。


2

電流を表すベクトルフィーチャを取得し、これらをワープ操作の制御ベクトルとして使用したいと思うでしょう。重要なのは、1日の広がりを模倣するようにベクトルを正しくスケーリングすることです。

私は、境界線をポイントに落とすことが前提条件である可能性があることに、Andy Wに同意します。正確な結果を得るには、ポイントの数を高密度化する必要がある場合もあります。

ESRIの世界であなたがどのようにゆがんでいるかはわかりません。Data Interopエクステンションがそれを行うことは知っていますが、組み込みメソッドまたはこの種の機能専用のエクステンションも必要だと思います。


1

誰かが実際に同様のシミュレーションを行っていても驚くことはありませんが、プロジェクトにアプローチする方法は次のとおりです(油流出を拡散させる海洋プロセスに関する予備知識はありません)。

ポリゴンを厳密に処理したい場合は、境界をあらかじめ決められた数のポイントに分割します。これらのポイントを使用して、拡張の方向と拡張の距離(所定の合理的な範囲内)に関する確率論的要素を使用して、必要な回数だけこれらのステップを繰り返すシミュレーションを紹介します。次に、新しい位置に基づいてすべてのポイントの凸包を再作成します(これに常に以前のポリゴンを含める場合は、外側に拡張を制限する必要があります)。GISのイントロコースの場合、これらの確率的要素が与えられた場合に、いくつかの異なる可能な反復を視覚化するでしょう。

また、少し異なるアプローチで、オイルをシミュレーションでエージェントとして視覚化するのはかなりクールだと思います。たとえば、流出した原油のすべてのバレルに対して新しいエージェントを作成し、前に言ったのと同じ確率論的要素を追加します。湾全体のエージェントの拡大を時間内に視覚化するか、オイルの密度を時間内に視覚化することができます。

それは本当にクールなプロジェクトのように聞こえ、完成したら写真を投稿します。


0

このような質問が生成する可能性のあるさまざまな結果を示すために、質問を投稿したときにブレーンストーミングしていたソリューションに取り組みます。数日中に実装する機会を得たいと思っており、それができたら投稿します。

  1. ポリゴンをバイナリラスタにラスタライズします。
  2. 0と1の値をランダムに配置して、1の結果よりも大きいラスターを作成します。0と1の値の分布は、ポリゴンを拡張する必要がある量と一致します。したがって、ポリゴンを5平方km拡大する必要がある場合。目標を達成するには、5平方kmあります。1セルの価値。
  3. (1)と(2)の和集合結果。
  4. (3)の結果から、元のラスタライズされたポリゴンに隣接していないすべてのセルを削除します。
  5. 元のラスタライズされたポリゴンの代わりに(4)の結果を(2)にフィードし、(1)セルの数がターゲット領域に一致するまで繰り返します。

これはおそらく最も効率的な方法ではありませんが、機能するはずです。このアイデアは、上級クラスが行う都市成長モデリングの演習に基づいています。ランダムラスターは、成長の適合性に基づいて作成され、面積の制限はありませんが、ランダム成長の部分は基本的に同じです。

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