私はいくつかのポイントをカバーするために可能な限り最小のポリゴンを決定できるアルゴリズムを見つけようとしています。
すべてのポイントの周りに凸包を取得する方法を知っていますが、ポイントが異なるアイランドにあると言いますが、異なるグループ間にギャップがあると判断し、グループごとに個別のポリゴンを取得できますか?
私はいくつかのポイントをカバーするために可能な限り最小のポリゴンを決定できるアルゴリズムを見つけようとしています。
すべてのポイントの周りに凸包を取得する方法を知っていますが、ポイントが異なるアイランドにあると言いますが、異なるグループ間にギャップがあると判断し、グループごとに個別のポリゴンを取得できますか?
回答:
最初にクラスタリングアルゴリズム(例:K平均クラスタリング)が必要で、次にハル(凸包ですが、凹型ハルの面積は小さいが実装が難しい)が必要なようです。
ジオタグ付きの写真から派生したシェープファイルを生成するためにFlickrで(d)使用する「Clustr」ツールは、役に立つかもしれません。
https://github.com/straup/Clustr
(Stackexchangeのおかげで、この投稿に2つを超えるリンクを追加できません。「the shape of alpha」を検索すると、シェープファイルの発表時に行ったcode.flickrブログの投稿を見つけることができます。)
それは、絶えず変化する点のバッグ(別名写真)から輪郭を生成しようとするように設計されました。実際のmath-yビットは次のとおりです。
http://www.cgal.org/Manual/3.2/doc_html/cgal_manual/Alpha_shapes_3/Chapter_main.html
Clustrには既知のバグがいくつかありますが、ほとんどの場合、ほとんどの場合は機能します...
データベースの観点からは、島のポイントをグループ化し、各グループに凸包を作成するように聞こえます。
postgisでは、次のようになります。
SELECT ST_Convexhull(ST_Collect(p.the_geom))
FROM pointtable p INNER JOIN islands i ON ST_Intersects(p.the_geom,i.the_geom)
GROUP BY i.id;
/ニクラス
最初はDanのk-meansの提案は理にかなっていると思いましたが、wikipediaページでk-meansのマウスデータセットの結果を見ると、期待値-最大化クラスタリングは希望に近いようです。