2

我在Google地圖v2中有超過10.000個標記,我從服務器上拿走了,我有一個問題需要在地圖上顯示,我有兩種技巧。這是更好的性能來顯示許多標記映射v2 android?

  1. 我把所有的數據標記在地圖上一個時間和顯示
  2. 我採取基於到我在地圖上看到,例如位置數據片標記的:當用戶指示他的地圖另一個位置,最近的標記將從服務器顯示。

我用第一種方法,結果是一個地圖停止(凍結)幾秒鐘,會出現標記之後,我的地圖運行速度慢..

我也用第二種方法,它是超過比第一種方法速度快,但將是緩慢的,當互聯網連接薄弱

從兩個方面上方是更加高效,快速,也可以是其他方式來成爲我的地圖是更好的性能? 感謝..

+0

你使用和數組或sqlite數據庫? – jasonflaherty 2015-01-04 03:49:31

+0

是的..我使用數組.. – ltvie 2015-01-06 12:54:17

回答

1

我不會刷新從Internet上首位飛標記。嘗試兩種方式結合起來:

  1. 下載所有標記數據到本地數據庫
  2. 查詢每次用戶改變地圖視圖和更新標記(這是SQLite的相當快)

該數據庫方法也有一些缺點:

  • 當用戶縮小時,不能避免刷新大量的標記(考慮限制顯示標記的最大數量或某種標記集羣)
  • 標記的每次刷新花費的時間顯著量,即使標誌物的量很低(我的應用程序刷新約400 - 500標記的約250 - 300毫秒在Nexus 7 2012)

我我仍然在努力解決這類問題,因爲我的應用程序必須顯示大約8,000個標記。到目前爲止,我發現只有一種集羣方法是完全無法使用的,因爲集羣本身花費了與刷新本身大致相同的時間,因此每次更改縮放級別時都會阻塞UI線程幾秒鐘。

2

退房Android Map Extensions。除了@ d.aemon提到的有關sqlite的內容,您可以使用聚類庫以及基於用戶在地圖上的位置動態添加標記。

集羣和動態指標快速設置,如果您使用的是Android工作室:

在的build.gradle(模塊:APP):

compile 'com.androidmapsextensions:android-maps-extensions:2.2.0' 
compile 'com.google.android.gms:play-services-maps:6.5.87' 

當你的代碼中創建地圖:

map.setClustering(new ClusteringSettings().enabled(true) 
       .addMarkersDynamically(true).minMarkersCount(5)); 

我沒有你做標記的金額,但該庫遠遠超過執政的谷歌工具庫。它在UI中更加流暢。我已經嘗試了各種不同的數組(列表,稀疏數組等...)來處理我的數據,到目前爲止它工作得很好。我確定按照提議使用sqlite的速度一樣快。

最初,當您添加所有標記時,您需要找出處理異步任務中最快/最好的方法(因爲我正在使用... btw Android Query是一個非常好的異步庫),因此,請檢查:

List<Marker> markers = new ArrayList<Marker>(); 

...而在後臺做,但與Android地圖擴展所提供的標記集羣將完成剩下的爲您服務。

我還看到過其他技術,例如在異步任務中使用計時器,基本上每次添加100個標記,然後暫停異步任務,以便UI仍然有所響應。

希望一些幫助。