クラスタリングLat/Longデータベース
-
11-07-2019 - |
質問
ようにしているのを見れば誰でも知っていて、クラスター一部の緯度経度の結果をデータベースの数を削減する結果が送信されるワイヤーのアップにつながります。
多くの資源につクラスターのいずれかをクライアント側のサーバー(アプリケーション)側..いずれのデータベース側:(
これは同様の問題, とが求められる研究員S.O.ます。のサーバ側のベります。C#コードの裏).
であった神経験と解決すが、データベース?あるデータベーグルの人々が"この人は後hawtシDB。
を助けてください:)
編集1:解明によるクラスタリング、今度はグループ x
ポイント数を単一の点は、見るようになっていますなので、あえて言えばクラスターも1km/1kmスクエア、その結果、"スクエア"のグループの思いを単一の結果るといいな。中央の広場).
編集2:僕はMS Sql2008年、私はオープンがある場合その他のソリューションその他のDBです。
解決
k -meansの修正バージョンを使用する可能性があります。ポイントのデカルト座標(WGS-84 ECFなど)を使用したクラスタリング。 &の実装は簡単です。迅速に収束し、どのように見えてもデータに適応します。さらに、帯域幅の要件に合わせて k を選択できます。各クラスターには同じ数の関連ポイント(mod k)があります。
クラスター重心のテーブルを作成し、元のデータテーブルにフィールドを追加して、どのクラスターが属しているかを示します。データが動的である場合は、明らかにクラスタリングを定期的に更新する必要があります。ストアドプロシージャ&でそれができるかどうかはわかりません。トリガーですが、おそらく。
*"修正"計算された重心ベクトルの長さを調整して、それらが地球の表面上にあるようにします。そうしないと、(LLHに戻されたときに)高度が負のポイントの束になってしまいます。
他のヒント
地理的な場所でクラスタリングしている場合、それが他の何かであるとは想像できません:-)、「クラスタID」を保存できます。緯度/経度座標とともにデータベースに保存します。
つまり、世界地図を(たとえば)100x100マトリックス(10,000クラスター)に分割し、各座標をそれらのクラスターの1つに割り当てます。
次に、同じ正方形の座標を選択して非常に近い座標を検出し、隣接する正方形の座標を選択して適度に近い座標を検出できます。
正方形のサイズ(したがって、正方形の数)は、クラスタリングをどの程度正確にする必要があるかによって決まります。明らかに、2x2マトリックスしかない場合、座標がかなり離れたクラスタリングを得ることができます。
Yoは常に2つのポイントが近接しているなどのエッジケースを持っていますが、異なるクラスター(クラスターの最北端、その最南端)にありますが、クラスターサイズを調整することができますまたはクライアント側で結果を処理します。
ポイントセットを簡単にキャッシュできるようにしたい地理的アプリケーションに対しても同様のことを行いました。ジオハッシュコードは次のようになります。
def compute_chunk(latitude, longitude)
(floor_lon(longitude) * 0x1000) | floor_lat(latitude)
end
def floor_lon(longitude)
((longitude + 180) * 10).to_i
end
def floor_lat(latitude)
((latitude + 90) * 10).to_i
end
そこからすべてが本当に簡単になりました。特定のポイントから特定の半径までのすべてのチャンクを取得して、単一のmemcache multigetに変換するコードがいくつかありました(そして、欠落していたときにそれを埋め戻すコードがいくつかありました)。
のための movielandmarks.com を使用したクラスタリングからコード マイクPurvis, の著者の 初Googleマップを用途にリリースでは以下のセキュリティAJAX.ということではまったらしい木のクラスター-ポイントの異なるズームレベルのPHPとMySQLで格納するデータベースで回収するのである。も役立つ場合がありますのでごを使用していても、異なるデータベースです。