iOS关于地理编码和反编码

  • 关于

地理编码是通过地名而获取经纬度;
地理反编码是通过经纬度而获取地名;

代码部分:

@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];
        ///添加地图应用项时打开它就会自动跳转到苹果地图,则可以应用苹果地图进行各种,比如路线,导航等等(由此特点考虑做旅游应用可以否?)
        
        
    }];
}

你可能感兴趣的:(iOS关于地理编码和反编码)