2012-08-30 54 views
2

我有一種情況,我需要告訴用戶附近的ATM機位於何處。問題是如果銀行擁有10000臺ATM。處理Android地圖上的巨大覆蓋物品的最佳做法

當我使用Maps for web編程時,我通常只在可見區域加載ATM。當用戶進行平移或縮小時,我要求後端服務器提供更多的ATM並重新繪製所有覆蓋項目。但我不認爲我們可以在移動設備上使用這種技術。

如果我使用https://developers.google.com/maps/documentation/android/hello-mapview的技術,那麼我的表現會受到影響。

處理這個問題的最佳方法是什麼?我們知道有一些擔憂:

  1. 加載所有ATM機會吃很多內存。
  2. 在用戶進行平移時,在可見區域加載ATM可能會消耗大量數據連接。 (我不知道如何獲得可見的座標邊框)

我已經做了一些實驗。加載1000個覆蓋項目(ATM)(1000 x itemizedOverlay.addOverlayItem(anAtm);和1個填充())耗時5秒。

有沒有這樣做的最佳做法?我真的希望谷歌能給開發者最好的做法。

感謝

+0

您可以限制服務器發回的ATM地點數量嗎? – PoeHaH

+0

您是否聽說過Map Clustering? 「搜索這個關鍵字,這可能是另一種方式」 – MKJParekh

+0

我想,我將使用邊界檢測,就像基於網絡的Google Maps一樣。基於邊界加載數據。謝謝。 – sancho21

回答

0

可以過濾ATM名單進行分組,其接近到一個獨特之處的那些,從而實現規模依賴於你的搜索結果顯示發送回服務器。

0

您還沒有可以發佈您的代碼,所以我不知道,如果你是以下我相信這是最好的辦法:

1 - 創建itemizedOverlay

2,將所有項目(自動取款機)到itemizedOverlay

3呼叫填入()

4,只有在所有這一切,你應該itemizedOverlay添加到調用MapView.getOverlays()

如果您的內存中已有10000個ATM,則應該幾乎可以立即執行上述步驟。可能需要一些時間的是在移動或縮放地圖時保持重畫屏幕,並顯示所有這些標記。

如果您從數據庫中獲取ATM,那麼我建議使用AsynkTask來避免收到ANR消息。

祝你好運。