2015-09-14 18 views
12

現時点では、Googleマップv.3 APIを使用して地図上にマーカーを描画しています。 合計で約500個のマーカーがあります。Googleマップに100-200Kマーカーを読み込む

表示の目的で、このツールをブラウザのブラウザ側で使用して、markerClusterとグループマーカーを使用します。

しかし、私は場所番号を拡張し、それがすぐに100Kまたは200Kに成長すると想定しています。

私はいくつかのストレステストを行い、現在の解決策は基本的にブラウザと約10〜20Kのマーカーを殺すことに気付きました。

だから私の質問は、多くのマーカー(必要なGoogleマップではない)を描くための最良のアプローチは何ですか?

私は同様の質問、例えばとの記事を読みました:

Showing many markers in Google Maps

Best solution for too many pins on google maps

基本的に、人々は私がすでに使用して表示目的のためにいくつかのクラスタラを使用することをお勧めします。

または、データを取得するためのフュージョンテーブルを使用することもできます。これはオプションではありません。データをサーバーに残す必要があります。また、表示機能はフュージョンテーブルに限られていると私は考えています。私は次のシナリオの実装を考えている

:すべてのページのズーム/負荷に

  • を - 表示ビューの境界でAJAXリクエストを送信し、すべての側面に約30%を追加して、マーカーを取得していますこの地理的領域にのみ入る。 ユーザーがズームアウトした場合は30%が追加されますので、他のマーカーをすばやく表示して残りの部分を背景でさらに広げることができます(広域)

  • マーカーが50個を超えると表示の目的でクラスタリングを適用する予定です。しかし、javascriptのmarkerClusterはmarkerClusterではなくgoogle自体であるため、すべてのマーカーの場所がまだ適用されているので、表示されたマップの境界を約15 * 15グリッドで分割することでサーバー側でクラスタリングを行う予定ですマーカを特定のセルにドロップしてから、基本的に(たとえばヒートマップのように)マーカーの数を含むクライアントクラスタに送信します。そして、マーカーをマーカーとして表示する。

似ていた人は誰でも洞察を与えてください。一般的に意味がありますか?または、Ajax要求がすべてのマップズームとシフトでサーバーに送信され、基本的に冗長な要求のサーバーに過負荷がかかるため、それは愚かなアプローチですか?

私が達成したいのは、マーカーの大きなデータセット(2秒未満で読み込む)でユーザーエクスペリエンスが優れていることです。

+2

代わりに、バッチでajax呼び出しでマーカーを取得し、バッチでそれらを描画してください。 – sunil

+0

@sunil詳細を教えてください。したがって、特定の地域のバッチを読み込んで、地域別にバッチを作成してください。 – Volder

+0

あなたのスキームを考えるもう一つの方法は、マップタイルのように、サーバー上にマルチレベルのベクトルタイルを置くことです。しかし、これらの「タイル」は、エリア内のマーカー/クラスタ位置の位置です。フロントエンドは、ズームレベルと範囲に従ってこのような「タイル」を要求します。クライアントはこのような「タイル」をキャッシュすることができるため、ズームやパンするたびにリロードする必要はありません。 – headuck

答えて

7

あなたのアプローチは堅実です。可能であれば、クラスタをあらかじめ計算してサーバー側にキャッシュし、その更新戦略を基になるデータセットの変更頻度によって決定します。

Googleマップには、あなたが惑星上のどこにあるかに応じて〜20のズームレベルがあります。クラスタ化されたデータの種類によっては、合計200,000個のマーカーがあり、ある時点でマップ上に約500個のマーカーを表示したい場合は、すべてのクラスターの位置と元のマーカーを数えれば、約2n = 400,000個のロケーションサーバーすべてのズームレベルを組み合わせたものです

可能なクラスタ更新戦略:すべての新しいマーカーの

  • アップデートが追加されました。高度なデータの適時性が必要な場合は、書き込みの少ない読み取り負荷の高いアプリケーションが可能です。
  • スケジュールで更新更新オフ
  • キック((最後のクラスタリングパス& &以来、新しいマーカーが存在する場合、キャッシュはXよりも古い)||最後のクラスタリングパスのでYより新しいマーカーが存在します)

地理データをネイティブにサポートするデータベースにこれらのマーカーを保存すると効果的です。これにより、SQLに似た文が場所を問い合せることができます。

クライアント側では、30%ではなく、どちらの側にも50%の余白を取り込むことを検討します。 Googleは2の倍率でズームします。これにより、1つのフルズームレベルを表示できます。

次に、このアプリケーションが大量に使用され、最適化が価値がある場合は、クライアントがズームするときにサーバー側にログを記録します。ユーザーのプロファイルを調べて、ユーザーが頻繁にズームイン/ズームアウトするかどうかを判断できます。ソリッド・ナンバー(最初の結果を取得した後にユーザーの70%がズームインし、20%がズームアウトされるような)では、UIの取得のためにズームしたデータの次のレイヤーをプリロードすることが価値があるかどうかを判断できます応答性。

関連する問題