1.地理编码:CLGeocoder对象传入地名即可。
// 1.创建地理编码对象
_geocoder = [[CLGeocoder alloc] init];
// 2.利用地理编码对象编码
// 根据传入的地名获取该地址对应的经纬度信息
[self.geocoder geocodeAddressString:@"北京" completionHandler:^(NSArray *placemarks, NSError *error) {
// placemarks地标数组, 地标数组中存放着地标, 每一个地标包含了该位置的经纬度以及城市/区域/国家代码/邮编等等...
// 获取数组中的第一个地标
CLPlacemark *placemark = [placemarks firstObject];
NSString *latitude = [NSString stringWithFormat:@"%f", placemark.location.coordinate.latitude];
NSString *longitude = [NSString stringWithFormat:@"%f", placemark.location.coordinate.longitude];
//address存的都是地址信息,用一个string拼接起来就是完整的地址
NSArray *address = placemark.addressDictionary[@"FormattedAddressLines"];
NSMutableString *strM = [NSMutableString string];
for (NSString *str in address) {
[strM appendString:str];
}
2.反地理编码:
// 2.根据用户输入的经纬度创建CLLocation对象
CLLocation *location = [[CLLocation alloc] initWithLatitude:[latitude doubleValue] longitude:[longtitude doubleValue]];
// 3.根据CLLocation对象获取对应的地标信息
[self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
for (CLPlacemark *placemark in placemarks) {
NSLog(@"%@ %@ %f %f", placemark.name, placemark.addressDictionary, placemark.location.coordinate.latitude, placemark.location.coordinate.longitude);
self.reverseDetailAddressLabel.text = placemark.locality;
}
}];