2009-04-30 10 views
7

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

サーバーサイドで、好ましくはPython/Djangoで座標をクラスタリングする例はありますか?

私がこれを動作させたいのは、近接(半径)とズームレベルに基づいてマーカーを段階的にインデックス付けすることです。

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

このように、クライアント側では、要求/ズームレベルごとに10-50個のマーカーしか扱わなくてはなりません。

答えて

-5

私はここのPythonとDjangoを使用して、私のアプローチについてブログ記事を書いた:

http://www.quanative.com/2010/01/01/server-side-marker-clustering-for-google-maps-with-python/

+2

リンクが壊れているようです。あなたの答えを編集してリンクを修正したり削除したり、リンク内の情報を要約してください。それが再び壊れると、この答えは引き続き役に立つでしょう。 –

+0

リンクが切れています:( – nivcaner

+0

ドメインの有効期限が切れました、アメリカの芸術に興味がありません – twig

0

ズームレベルに基づいて単位サイズのグリッドを定義する方法があります。したがって、グリッド内のすべてのアイテムを緯度、経度、小数点以下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

+0

マップ全体を表示する必要があり、読み込むために30kのマーカーがある場合、これは遅くならないでしょうか? – Franek

2

Thisサーバー側のクラスタリングを使用する有料サービスですが、私はそれがどのように動作するかわかりません。私は彼らが各ズームレベルで表示されるマーカーを生成するためにあなたのデータを使用すると推測しています。

更新:This tutorialは、基本的なサーバー側のクラスタリング機能を示しています。これはStatic Maps APIのためにPHPで書かれていますが、これを出発点として使用することができます。

+0

私は彼らのサービスについて知っていますが、コードを完全に管理したいと思っています。 – Franek

+0

チュートリアルは便利ですが、アルゴリズムは28,000ポイントでは遅すぎるかもしれません。グリッドに基づくクラスタリングは不器用ですが、はるかに高速です。 – Tom

+0

@Tom - このようなアルゴリズムは、クライアント側では遅すぎるはずですが、サーバー側で可能かもしれません。 –

0

ズームレベルに基づいて単純に小数点を削除できます。それはあなたのために働くだろうか?

私たちの地域インデックスは、モルモンの数字に基づいています。 http://www.rooftopsolutions.nl/article/231(恥知らずの自己宣伝)。

あなたは10ベースのシステムよりも精度が必要な場合は、モートンの数はあなたが単にような何かを行うことによって、2塩基番号システム上でズームレベルを上げることができます:

GROUP BY(モートンXOR (-precision))

精度が高くなると、より多くのアイテムがクラスタ化されます。

0

私はDjangoとPythonを使って不動産やレンタルリストを作成しています。ソースはhereです。

希望すると助かります!

1

あなたはクラスタリング場所のためのこれらのルックスは非常に適し、ウィキペディアのDBSCANOPTICSページを見てみることをお勧めします地図上にCluster Analysisについてのページもあります。このページには、使用可能なすべてのアルゴリズムが示されています。ほとんどの場合、選択した言語を使用して実装するのは簡単です。

28k +ポイントでは、djangoをスキップしてC/C++に直接ジャンプして、Webリクエストに応じてリアルタイムで計算されるとは思わないかもしれません。

0

あなたは私のサーバー側のクラスタリングDjangoのアプリを試すことができます。

https://github.com/biodiv/anycluster

これは、関数kmeansとグリッドクラスタをprvides。

関連する問題