在寫地圖應用的 App 時,有時候需要用到利用座標(經緯度)去查詢那個點的地址,這時可以這麼寫:
#pragma mark - MKMapViewDelegate
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
// 取得 MapView 中心點座標:
CLLocationCoordinate2D center = [self.mapView centerCoordinate];
NSLog(@"緯度:%f, 經度:%f", center.latitude, center.longitude);
CLGeocoder *ceo = [[CLGeocoder alloc] init];
CLLocation *loc = [[CLLocation alloc] initWithLatitude:center.latitude longitude:center.longitude];
[ceo reverseGeocodeLocation:loc completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *placemark = [placemarks objectAtIndex:0];
if (placemark) {
// 這個 Dictionary 有地址的相關資訊:
NSLog(@"addressDictionary %@", placemark.addressDictionary);
NSLog(@"region: %@",placemark.region);
NSLog(@"country: %@",placemark.country);
NSLog(@"locality: %@",placemark.locality);
NSLog(@"name: %@", placemark.name);
NSLog(@"ocean: %@",placemark.ocean);
NSLog(@"postalCode: %@",placemark.postalCode);
NSLog(@"subLocality: %@",placemark.subLocality);
NSLog(@"完整地址: %@", placemark.addressDictionary[@"FormattedAddressLines"][0]);
NSLog(@"City: %@", placemark.addressDictionary[@"City"]);
NSLog(@"Name: %@", placemark.addressDictionary[@"Name"]);
} else {
NSLog(@"Could not locate");
}
}];
}
如果是想輸入地址,然後用地址查出座標呢?可以這麼寫:
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:@"台灣臺北市信義區市府路1號" completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
CLPlacemark *placemark = [placemarks lastObject];
NSLog(@"緯度:%f, 經度:%f", placemark.location.coordinate.latitude, placemark.location.coordinate.longitude);
}
}];
參考來源: