2012-07-04 41 views
2

此頁面https://developers.google.com/maps/articles/toomanymarkers谷歌地圖 - 基於網格的聚類

它說怎麼這是最簡單的聚類更多鈔票,但我找不到這方面的任何客戶端解決方案上。有沒有人知道免費開源,基於網格的谷歌地圖標記羣集客戶端解決方案?我不想要MarkerClusterer。

我沒有找到它,所以我去了,開始編碼我自己的解決方案。第一個明顯的要求是,它必須快速加載地圖上至少1000個標記。每次放大,移動和放大,都會重複聚類的過程/功能。網格塊可定製,默認值爲50 * 50像素。

下圖顯示了結果應該是什麼樣子。

我遇到了算法問題,現在我只能想到實現這個功能是通過每個網格的所有標記進行迭代,並詢問它是否在bounderies中,然後增加grid ++數組。這顯然不能這樣做。應該有一些散列或者什麼東西,只需要通過所有標記進行一次迭代就可以了,並且我會知道哪些網格特定的標記屬於。

我希望有人會給我一個提示我後來的算法。謝謝 ! enter image description here

+0

客戶端聚類的事情是它擊敗了聚類的目的。使用客戶端羣集,您仍然需要將有關每個標記的信息傳輸到客戶端(到瀏覽器),客戶端必須努力完成所有數字處理。除非你有充分的理由在客戶端進行集羣,否則我會建議服務器端集羣的方式更有效率。如果你在服務器上進行集羣,然後只將可能的最小數據量傳輸到客戶端,它應該即使在IE上,也可以在任何瀏覽器上快速加載:-) – Marcelo

+0

我想製作插件,就像MarkerClusterer一樣。 [link] http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/examples/speed_test_example.html MarkerClusterer是所有客戶端,並且對於1000個標記超快速運行。這個想法必須相同,只需通過標記數組即可。定義了5000個標記的JS文件大小爲100kb,這並不是什麼大問題。 – displayName

+0

1000個標記是「小東西」。 :-)在這裏看到一個有40000個標記的服務器端解決方案:http://maps.forum.nu/server_side_clusterer/和這裏:http://maps.forum.nu/server_side_clusterer/index2.php – Marcelo

回答

0

您可以使用geohash或空間填充曲線來減少尺寸並重新排序並散列標記。在服務器端,您可以使用點和空間索引數據結構,但也可以手動計算geohash。尋找xkcd互聯網地圖漫畫和希爾伯特曲線,看看它是如何工作的。

2

似乎geohash是你的問題的答案,你甚至可以在你的問題中提到這個解決方案。它很好地解釋在這裏:

http://blog.trifork.com/2013/08/01/server-side-clustering-of-geo-points-on-a-map-using-elasticsearch/

我其實探索開發谷歌地圖API V3相似的聚類算法中。如果我真的得到任何地方,我會發布更多。

+0

實際上,MarkerClusterer可以通過一個沒有記錄的(好的,記錄在代碼中但不是文檔頁面)選項來實現我所需要的: *'minimumClusterSize':(數字)在集羣之前 *簇中的最小標記數標記被隱藏,並顯示計數 *。 –