2013-07-25 35 views
0

我想對字符串做一個前向地理編碼,它通常工作正常,但對於某些位置,如「溫哥華」,它返回null由此產生的地標,但確實會返回國家,省份和座標。我甚至嘗試了對前向地理編碼中找到的座標進行反向地理編碼,儘管沒有失敗,但它返回了一個不同的位置,「Port Moody」。在iOS中使用CLGeocoder進行前向地理編碼對於某些位置的地點返回null

最奇怪的部分是我嘗試通過蘋果公司的Geocoder示例代碼運行溫哥華,它的工作原理很好。該地區不會出現空。

此外,我正在測試它,它突然開始工作,然後我再次檢查,它停止工作。是什麼賦予了?

這是我的代碼。懷疑它會幫助很多。

-(BOOL) textFieldShouldReturn:(UITextField *)textField { 
    CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 

    [geocoder geocodeAddressString:textField.text completionHandler:^(NSArray *placemarks, NSError *error) { 
    self.placemark = [[MKPlacemark alloc] initWithPlacemark:[placemarks objectAtIndex:0]]; 
    if (error) { 
     NSLog(@"Geocode error %@",error.debugDescription); 
     [self alertForFailedGeocode]; 
     return; 
    } 
    if (self.placemark.locality == nil || self.placemark.country == nil) { 
     //eg if you search "Canada" you'll get a nil locality, and the coordinate is in the middle of nowhere. 

     if (self.placemark.location) { 
      [geocoder reverseGeocodeLocation:self.placemark.location completionHandler:^(NSArray *placemarks, NSError *error) { 
       if (error) { 
        [self alertForFailedGeocode]; 
        return; 
       } 

       self.placemark = [placemarks objectAtIndex:0]; 
       [self alertForConfirmGeocode:[self locationStringForPlacemark:self.placemark]]; 
       self.location = self.placemark.location; 
       self.isUsingCurrentLocation = FALSE; 
       return; 
      }]; 
      return; 
     } 
     else { 
      NSLog(@"Geocode failed BECAUSE nil locality or country or both"); 
      [self alertForFailedGeocode]; 
      return; 
     } 
    } 

    NSLog(@"%d places found",placemarks.count); 
    [self alertForConfirmGeocode:[self locationStringForPlacemark:self.placemark]]; 
    self.location = self.placemark.location; 
    self.isUsingCurrentLocation = FALSE; 
}]; 
return YES; 

}

+0

那麼,顯然對於加拿大本地化將是空的,但即使對於新加坡它是空的 - 這是令人討厭的 – MCKapur

回答

2

地理編碼操作不會在設備上進行處理,並且需要互聯網連接,因爲它們發生在雲中。它有其優點和缺點。

優點:

  1. 節省設備資源,轉化爲雲發生。
  2. 隨着技術的改進,Apple可以在雲上更新他們的API,並且可以使我們的應用程序具有更好的性能,甚至無需更換任何代碼中的 。

缺點:

你會需要一個堅實的互聯網連接來訪問地理編碼的API。

現在來到你的情況,我的猜測是,不知何故,由於互聯網連接,你是不是能夠完全利用地理編碼的API。也許這就是爲什麼你沒有得到當地。

問題是你怎麼得到國家,省份和座標?

嗯,因爲它發生,正向地理編碼器可以讓你的高層 信息,如國家,地區等基於本地設備 信息,但它需要互聯網連接,以獲得更多的信息, 諸如局部性等

+0

很好的答案,雖然我的網絡似乎很好。我唯一的問題就是爲什麼它可以在iOS Geocoder示例代碼中工作? http://developer.apple.com/library/ios/#samplecode/GeocoderDemo/Introduction/Intro。html#// apple_ref/doc/uid/DTS40011097 本質上是相同的操作,相同的模擬器,大約在同一時間完成,互聯網工作正常,許多其他地點工作正常,但沒有城市名稱,當我搜索溫哥華(我還沒有找到其他地方爲我做這個,但可能它不僅僅是一個) – shim

+0

我試過你的代碼,它返回給我的地方。我非常迷茫。您能否告訴我您在textfield.text中使用的確切NSString。我用溫哥華給了我地方。 –

+0

在「溫哥華」上使用了各種不同的變體。就像我說的在同一個模擬器上運行的蘋果示例代碼似乎總能正常工作,但大部分時間我的代碼無法工作。有一次它似乎開始工作正常,但後來我無法再現這一點。 – shim

相關問題