- 关于
地理编码是通过地名而获取经纬度;
地理反编码是通过经纬度而获取地名;
代码部分:
@property (nonatomic,strong) CLGeocoder *geoCoder;
通过懒加载创建编码对象:
- (CLGeocoder *)geoCoder{
if (!_geoCoder) {
_geoCoder = [[CLGeocoder alloc]init];
}
return _geoCoder;
}
- 实现地理编码的方法:
- (void)geocoder:(NSString *)name{
// 地理信息编码/反编码对象(创建编码对象)
_geoCoder = [[CLGeocoder alloc] init];
// 地理信息正向编码(地名转换成经纬度)
[_geoCoder geocodeAddressString:name completionHandler:^(NSArray *placemarks, NSError *error) {
// 对编码结果进行迭代
for (CLPlacemark *pMark in placemarks) {
NSLog(@"location:%@", pMark.location);
// 将地址字典转换成二进制数据
NSData *data = [NSJSONSerialization dataWithJSONObject:pMark.addressDictionary options:NSJSONWritingPrettyPrinted error:nil];
// 将二进制数据转成字符串
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"str%@", str);
}
}];
}
- 实现地理反编码的方法:
- (void)ungeocoder{
_geoCoder = [[CLGeocoder alloc] init];
CLLocation *loc = [[CLLocation alloc] initWithLatitude:22.68359500 longitude:114.22838700];
// 反编码地理信息(将经纬度转换成地名)
[_geoCoder reverseGeocodeLocation:loc completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *pMark = [placemarks firstObject];
MKPlacemark *mkMark = [[MKPlacemark alloc] initWithPlacemark:pMark];
// 开启地图应用的加载项
NSDictionary *options = @{ MKLaunchOptionsMapTypeKey: @(MKMapTypeStandard),
MKLaunchOptionsShowsTrafficKey: @(YES)
};
// 创建一个地图应用项
MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:mkMark];
// 开启一个地图应用
[mapItem openInMapsWithLaunchOptions:options];
///添加地图应用项时打开它就会自动跳转到苹果地图,则可以应用苹果地图进行各种,比如路线,导航等等(由此特点考虑做旅游应用可以否?)
}];
}