2013-06-02 83 views
1

我正在從API中加載位置的Map應用程序。我已經編制了代碼,因此當用戶翻轉很長的距離時,會查詢API在x公里內的位置,並且替換註釋。延遲加載mapview註釋的算法

我編碼爲iOS,但這將適用於任何地圖應用程序。

一切正常,在這一點上,但我不滿意我的算法了顯著的距離是什麼,以及要加載哪些半徑的位置。我正在想的幾件事 -

  • 地圖視圖是一個矩形,比它寬。 X公里範圍內
  • 加載位置給你一個圓圈
  • 用戶可以放大和縮小
  • 用戶可以出鍋N,S,E,W
  • 重新加載與考慮每一個微小的變化將使窮人用戶體驗 - 需要有一個門檻
  • 應該有視圖外的位置,所以用戶可以在重新加載之前進行一定程度的平移和縮放
  • 給定圓形內的矩形,用戶平移向上或向下將達到圓圈的邊緣比左右平移
  • 爲了節約資源,而不是在縮小過寬的所有位置顯示,因此放大可能會發現新的地點
  • 放大了,就會發現新的地點

任何建議什麼樣的算法,我應該做的事?我正在尋找以確定的位置處的以下變量 -

  • 半徑重裝點之前加載給定的屏幕寬度
  • 閾值改變(平移和縮放)的

回答

1

爲柵格地圖常見的解決辦法是將圖像切割成瓷磚並將其放在觀察者所在的「附近」。您可以通過在平移/縮放後加載額外的點而不移除內容來爲數據執行此操作。如果用於檢索新點的代碼在後臺線程中運行,用戶將不會注意到,並且對於每個平移點,它們總是會在已有數據的位置結束,並且在他們查看該點時加載更多數據爲他們的下一個鍋。你需要弄清楚他們可以走多遠。經度很容易,只需要縱向差異(即左右),這就是他們拖動手指和地圖的距離。因此,如果您的地圖視圖寬度爲1度,那麼您應該已經擁有一度到地圖右側的數據以及左側一度的數據。緯度越難越好,因爲它隨着你離開赤道而變化。從上到下,如果你正在尋找蘇格蘭,則會有不同的測量。原則是相同的。計算用戶能夠拖動多長時間並拖動數據。如果你想像一個3x3網格,就像電話一樣。地圖視圖位於5按鈕處,您需要預先加載所有環繞按鈕。 mapview被拖到一邊,所以現在看着你需要在另外的正方形中加載的正方形,而不會丟失屏幕上的數據。您可以向右上,右上,右上和右下三個呼叫。或者打一個電話,並在一次通話中獲得所有新數據。

當然,如果您的電話獲取新數據有點慢,用戶可能會收到答案之前平移兩次,也許你需要獲取更大的區域。所以你會在5x5網格的中心,當視圖移向邊緣時,你必須獲取另一行或一列。

我希望有幫助。