2012-12-04 143 views
27

我正在更新現有Android應用以使用新的Google Maps Android API v2。我有大約2500個標記,我想添加到地圖中。使用舊版本的API時,如果有2500個標記,我發現地圖的響應速度非常可怕,所以我只能通過添加地圖當前可見區域中的標記來解決這個問題。Google Maps Android API v2在添加大量標記時速度很慢

我希望2500個標記可以更快速地使用新的API,但即使在Nexus 4上它仍然很糟糕,而且我沒有看到任何類型的選擇進行羣集。

所以我的問題:我怎麼才能確定某個經緯度點是否包含在地圖的可見區域內?

我在文檔中看過VisibleRegion,但到目前爲止我還沒有運氣。任何幫助是極大的讚賞。

*旁註:iOS上的2500個標記MKMapView(谷歌地圖或蘋果地圖)即使使用iPhone 3gs也非常流暢和響應。我仍然無法理解Android爲何如此之慢,即使是最新最好的硬件。

回答

50

好吧,試圖一對夫婦更多的事情後,我想出如何確定給定的點是在可見光區,這是非常簡單的:

//Note: this.mMap is an instance of GoogleMap 

LatLngBounds bounds = this.mMap.getProjection().getVisibleRegion().latLngBounds; 

LatLng markerPoint = new LatLng(item.getLatitude(), item.getLongitude()); 

if(bounds.contains(markerPoint)) 
{ 
    this.mMap.addMarker(new MarkerOptions(...));  
} 

*請注意,得到的GoogleMap的投影這是一個昂貴的操作,所以如果你在一長串項目中循環創建標記並像我一樣將它們添加到地圖中,則只需在循環之前抓住投影一次。

更新

我決定寫了一篇博客文章中詳細介紹瞭如何顯示在地圖的可見區域標記和隱藏標記,因爲他們離開屏幕。這不是一個完美的解決方案,但是如果您展示了數千個標記,並且知道您的用戶不需要同時看到所有這些標記(除非他們放大),這是一個非常好的解決方法。

Hiding and Showing on screen Markers with Google Maps Android API V2

+4

感謝您的優秀博文 – subash

+0

是否會有反正爲了扭轉這能夠表明如果地圖上有標記但當前屏幕/視圖/邊界之外? –

+1

集成了多個集羣管理器,工作起來就像一個魅力。當與所有標記放置進行比較時,此解決方案將導致羣集重新繪製/重新計算一點,但在給定巨大性能增益的情況下它完全可以。謝謝@DiscDev – DayDayHappy

13

有關Android的集羣解決方案,你可能想嘗試Android地圖擴展: https://github.com/mg6maciej/android-maps-extensions

+0

這看起來非常好,我迫不及待地嘗試了。 – DiscDev

+0

@MaciejGórski這是一個很酷的圖書館。我只希望它有一些支持文件來描述它。 –

+1

@KhaledAlanezi我也希望如此。由於這是開源的,任何人都可以通過創建一些文檔(例如GitHub上的wiki)來貢獻。對我來說,最好的文檔是一個演示應用程序。 –

相關問題