2013-03-21 106 views
1

我讀過iOS一次將應用程序限制爲大約50個地址解析請求。如果我有大套,也許200?有什麼方法可以一次對超過50組進行地理編碼?例如,使用集合之間的延遲,每個集合限制爲50.什麼是延遲集合之間地理編碼的理想方式?如何一次對一組200個地址進行地理編碼

我見過NSProgrammer的回答以下問題:

iPhone iOS5 CLGeocoder how to geocode a large (200) set of addresses?

對於他提到的那種延遲的任何建議?這個延遲會在處理程序中並在另一個線程上運行嗎?

for(int i = 0; i < [myArray count]; i++){ 

[call geoCoderMethod]; 
} 


-geoCoderMethod{ 
    [geocoder geocodeAddressString:addressString completionHandler:^(NSArray *placemarks, NSError *error) { 

    getCo-ordinates; 
    add annotation to mapview; 
} 

我試圖分裂陣列成每25項塊和調用geoCoderMethod和誘導使用performSelector方法的延遲。但performSelector方法和geoCoder似乎在不同的線程中運行,我不能導致方法調用之間的延遲。

回答

0

我有一個地址集合,我需要將它們轉換爲座標。我所做的就是將收藏分成最多40個聯繫人的大塊(您可能會增加到50個,但不會超過一分鐘)。因此,一個有超過40個聯繫人的組織必須有一個延遲,以便在mapview加載之前處理所有地址並轉換爲座標。

我需要根據用戶需求加載mapview。在我的情況下,無論組中的聯繫人列表如何,都可以再次加載mapview並獲得增益,而不考慮時間因素。 如果用戶打算加載mapview並在1分鐘內重新加載它,我需要爲此開發一個邏輯。爲此我決定保存mapview的狀態,如果用戶決定在1分鐘之內重新加載同一組地址。

但是,如果用戶決定加載另一組聯繫人,那麼我必須根據要加載的聯繫人組重新考慮我的邏輯。所以我必須跟蹤哪個組被加載(前一個或新的組),該組的聯繫人數量是否超過40。我不得不照顧的另一個重要因素是時間。爲此,我有一個靜態的NSDate變量,它始終跟蹤CLGeocoder上次工作時的「時間」,並且如果當前時間(當CLGeocoder即將使用時)沒有得到1分鐘的差異,則我不得不推遲加載地圖。

這是我使用CLGeocoder的座標來實現mapView所做的工作。我相信這個邏輯可以在很大程度上進行優化,並且輸出會更快。 如果有人提出更好的實現,將不勝感激。

0

這裏完整的解決方案取決於你的邏輯。您可以使用可變數組來存儲所有200個地址,並運行「for循環」以將發送請求限制爲小於50,如20或30取決於您的地址數組的數量。如果你有200個地址,那麼用你的限制來決定這個「for循環」應該循環多少次,然後如果你除以20,那麼總共10次你的「for循環」將運行,每次運行它將發送20個地址進行地理編碼。所以它不會達到50,並且很容易就可以檢索。

相關問題