首先介紹一下地圖數據聚合的功能,當功能需求在地圖上添加幾百幾千個marker時,如果加載完成后在移動地圖的時候其實是存在卡頓的情況的。而且從用戶層級來講,縮放地圖的時候marker會存在互相干擾,且也不需要這么細致的展示。於是可以做成一下這種效果:
當縮放到最大時,顯示具體的每一個marker:
當縮放等級減小時直接聚合為一個點,顯示這里有多少個marker:
這下在縮放和移動的時候可以明顯減少卡頓,同時也讓用戶的體驗更直觀。
具體實現方法可以在網上查一下很容易查到,這里直說我遇到的問題。
1.由於點聚合的接口是如下進行的,必須在onMapStatusChangeListener實現,也就是說地圖狀態發生變化才會自動觸發聚合。
//定義點聚合管理類ClusterManager
mClusterManager = new ClusterManager<MapLockItem>(getActivity(), mBaiduMap);
// 設置地圖監聽,當地圖狀態發生改變時,進行點聚合運算
mBaiduMap.setOnMapStatusChangeListener(mClusterManager);
// 設置maker點擊時的響應
mBaiduMap.setOnMarkerClickListener(mClusterManager);
這就導致進入地圖界面是不會自動聚合的,即使調用了mClusterManager.cluster()方法 ,也不會發生聚合。
目前的解決方案是地圖加載完畢后通過代碼手動移動了一下地圖或者切換到地圖自動縮放一下。
2.關於分區聚合,比如武侯區聚合一個數據,金牛區聚合一個數據,這種解決的方案,暫時是這樣解決的,當縮放到了每個區的時候,直接清除掉地圖上所有的marker,同時給每個區添加自己的聚合marker,數據從服務器api獲得;當縮放小於區時啟動百度地圖的數據點聚合。