7

多数の Google マーカーをクラスタリングするためのクライアント側のアプローチを試した後、私のプロジェクト (28,000 人以上のユーザーを持つソーシャル ネットワーク) では不可能であると判断しました。

サーバー側で座標をクラスタリングする例はありますか - できれば Python/Django で?

私がこれを機能させたい方法は、マーカーの近接性 (半径) とズーム レベルに基づいて、マーカーに徐々にインデックスを付けることです。

言い換えれば、新しいユーザーが登録すると、互いに近いマーカーの特定の「グループ」に自動的に割り当てられ、「グループの」カウンターが増加します。サーバーに送信されるのは、少数の「グループ」だけです。マップのズーム レベル/縮尺が 1:1 の場合のみ - 実際のユーザーがマップに表示されます。

そうすれば、クライアント側は、リクエスト/ズーム レベルごとに 10 ~ 50 個のマーカーのみを処理する必要があります。

4

4 に答える 4

2

これはサーバー側のクラスタリングを使用する有料サービスですが、どのように機能するかわかりません。彼らはあなたのデータを使って、各ズームレベルで表示されるマーカーを生成しているだけだと思います。

更新: このチュートリアルは、基本的なサーバー側のクラスタリング機能を示しています。静的マップAPI用にPHPで記述されていますが、開始点として使用できます。

于 2009-04-30T14:57:03.023 に答える
1

ウィキペディアのDBSCANおよびOPTICSページを参照してください。これらは、マップ上の場所をクラスタリングするのに非常に適しているようです。使用できるすべての可能なアルゴリズムを示すクラスター分析に関するページもあります。ほとんどは、選択した言語を使用して実装するのは簡単です。

28,000 以上のポイントがある場合、django をスキップして C/C++ に直接ジャンプしたいと思うかもしれませんが、これが Web リクエストに応じてリアルタイムで計算されることは期待できません。

于 2010-08-15T09:02:07.763 に答える
0

これを行う 1 つの方法は、ズーム レベルに基づく単位サイズでグリッドを定義することです。したがって、グリッド内のすべてのアイテムを緯度、経度で小数点以下 1 桁まで収集します。例は 42.2x73.4 です。したがって、42.2003x73.4021 のポイントがそのグリッド セルに収まります。そのセルは 42.2x73.3 と 42.2x73.5 に囲まれています。

グリッド セルに 1 つ以上のポイントがある場合は、そのグリッドの中心にマーカーを配置します。

次に、zoomend イベントをフックし、それに応じてグリッド サイズを変更し、マーカーを再描画します。

http://code.google.com/apis/maps/documentation/reference.html#GMap2.zoomend

于 2009-04-30T12:40:04.803 に答える
0

私のサーバー側クラスタリング django アプリを試すことができます:

https://github.com/biodiv/anycluster

kmeans とグリッド クラスターを提供します。

于 2013-03-20T19:50:51.253 に答える