標籤:
- (void)viewDidLoad
{
[super viewDidLoad];
// 建立位址解析器
self.geocoder = [[CLGeocoder alloc] init];
}
- (IBAction)encodeTapped:(id)sender
{
// 擷取使用者輸入的地址字串
NSString* addr = self.addrField.text;
if(addr != nil && addr.length > 0)
{
[self.geocoder geocodeAddressString:addr
completionHandler: ^(NSArray *placemarks, NSError *error)
{
// 如果解析結果的集合元素的個數大於1,表明解析得到了經度、緯度資訊
if (placemarks.count > 0)
{
// 只處理第一個解析結果,實際項目中可使用列表讓使用者選擇
CLPlacemark* placemark = placemarks[0];
CLLocation* location = placemark.location;
self.resultView.text = [NSString stringWithFormat:
@"%@的經度為:%g,緯度為:%g" , addr ,
location.coordinate.longitude ,
location.coordinate.latitude ];
}
// 沒有得到解析結果。
else
{
// 使用UIAlertView提醒使用者
[[[UIAlertView alloc] initWithTitle:@"提醒"
message:@"您輸入的地址無法解析" delegate:nil
cancelButtonTitle:@"確定" otherButtonTitles: nil]
show];
}
}];
}
}
- (IBAction)reverseTapped:(id)sender
{
NSString* longitudeStr = self.longitudeField.text;
NSString* latitudeStr = self.latitudeField.text;
if(longitudeStr != nil && longitudeStr.length > 0
&& latitudeStr != nil && latitudeStr.length > 0)
{
// 將使用者輸入的經度、緯度封裝成CLLocation對象
CLLocation* location = [[CLLocation alloc]
initWithLatitude:[latitudeStr floatValue]
longitude:[longitudeStr floatValue]];
[self.geocoder reverseGeocodeLocation:location completionHandler:
^(NSArray *placemarks, NSError *error)
{
// 如果解析結果的集合元素的個數大於1,表明解析得到了經度、緯度資訊
if (placemarks.count > 0)
{
// 只處理第一個解析結果,實際項目可使用列表讓使用者選擇
CLPlacemark* placemark = placemarks[0];
// 擷取詳細地址資訊
NSArray* addrArray = [placemark.addressDictionary
objectForKey:@"FormattedAddressLines"];
// 將詳細地址拼接成一個字串
NSMutableString* addr = [[NSMutableString alloc] init];
for(int i = 0 ; i < addrArray.count ; i ++)
{
[addr appendString:addrArray[i]];
}
self.resultView.text = [NSString stringWithFormat:
@"經度:%g,緯度:%g的地址為:%@" ,
location.coordinate.longitude ,
location.coordinate.latitude , addr];
}
// 沒有得到解析結果。
else
{
// 使用UIAlertView提醒使用者
[[[UIAlertView alloc] initWithTitle:@"提醒"
message:@"您輸入的地址無法解析" delegate:nil
cancelButtonTitle:@"確定" otherButtonTitles: nil]
show];
}
}];
}
}
iOS地址編碼解析