GISファイル(市街地図)からの(2D)ポイントのセットがあるので、その地図(その境界)の「輪郭」を定義するポリゴンを生成する必要があります。その入力パラメーターは、ポイントセットと「最大エッジ長」になります。次に、対応する(おそらく非凸)ポリゴンを出力します。
これまでに見つけた最良の解決策は、ドローネ三角形を生成し、最大エッジ長よりも長い外部エッジを削除することでした。すべての外部エッジがそれよりも短い後、内部エッジを削除して、必要なポリゴンを取得します。問題は、これは非常に時間がかかり、より良い方法があるかどうか疑問に思っています。
私たちの研究室の元学生の1人は、博士論文のためにいくつかの適用可能な技術を使用しました。それらの1つは「アルファシェイプ」と呼ばれ、次の論文で参照されていると思います。
http://www.cis.rit.edu/people/faculty/kerekes/pdfs/AIPR_2007_Gurram.pdf
その論文はあなたが従うことができるいくつかのさらなる参考文献を提供します。
答えはまだ他の誰かにとって興味深いかもしれません:マーチングスクエアアルゴリズムのバリエーションを適用できます。 scalesポイントの平均密度に依存します。スケールは互いに整数倍にする必要があります。たとえば、効率的なサンプリングに使用できるグリッドを構築します。これにより、空のsamples = squares、完全にポイントの「クラスター/クラウド」内にあるサンプル、およびそれらの間にあるサンプルをすばやく見つけることができます。後者のカテゴリは、凹型の船体の一部を表すポリラインを簡単に決定するために使用できます。
このアプローチではすべてが線形であり、三角測量は必要ありません。アルファ形状を使用せず、ここで説明する商用/特許の提供とは異なります( http://www.concavehull.com/ )
Bing Maps V8インタラクティブSDKには、高度なシェイプ操作内の凹型ハルオプションがあります。
ArcGIS 10.5.1内で、3D Analystエクステンションには、凹型ハル、球体、エンベロープ、または凸型ハルのジオメトリタイプを持つ最小バウンディングボリュームツールがあります。どのライセンスレベルでも使用できます。
ここに凹型ハルアルゴリズムがあります: https://github.com/mapbox/concaveman
簡単な解決策は、多角形のエッジを歩くことです。点P0とP1を接続する境界から現在のエッジが与えられた場合、境界P2の次の点は、Aが最小の点になります。ここで、
H01 = bearing from P0 to P1
H12 = bearing from P1 to P2
A = fmod( H12-H01+360, 360 )
|P2-P1| <= MaxEdgeLength
次に設定します
P0 <- P1
P1 <- P2
始めたところに戻るまで繰り返します。
これはまだO(N ^ 2)なので、ポイントリストを少し並べ替える必要があります。たとえば、都市の重心から方位をソートする場合、各反復で考慮する必要があるポイントのセットを制限できます。
このプラグインを使用してQGISで実行できます。 https://github.com/detlevn/QGIS-ConcaveHull-Plugin
データとのやり取りにどのように必要かによって、ここでどのように行われたかを確認する価値があります。
クイック近似解(凸包に対しても有用)は、東西の各小さな要素の北と南の境界を見つけることです。
必要な詳細に基づいて、上限/下限の固定サイズの配列を作成します。各ポイントについて、それがどのE-W列にあるかを計算し、その列の上限/下限を更新します。すべてのポイントを処理した後、欠落した列の上部/下部のポイントを補間できます。
また、非常に長い薄い形状について事前に簡単なチェックを行い、ビンNSまたはEwにするかどうかを決定します。
良い質問!私はこれをまったく試していませんが、私の最初のショットはこの反復法です:
私はそれが十分に機能する限り機能すると思います—最初の3つのポイントに適したヒューリスティックが役立つかもしれません。
幸運を!
乱暴に採用されたリファレンスとして、PostGISは凸包から始まり、それを洞窟に入れます。ここで確認できます。