美文网首页
iOS开发之CoreLocaiton框架使用(地理编码,反地理编

iOS开发之CoreLocaiton框架使用(地理编码,反地理编

作者: 锈色的栅栏 | 来源:发表于2016-07-26 15:01 被阅读150次

    什么是地理编码和反地理编码?

    地理编码

    地理编码:根据给定的地名,获得具体的位置信息(比如经纬度、地址的全称等)。

    反地理编码服务

    反地理编码:根据给定的经纬度,获得具体的位置信息。

    广州“市”天河“区”棠下“街”盛达商务园D座5楼------113.381048,23.138369: 地理编码

    113.381048,23.138369------》广州“市”天河“区”棠下“街”盛达商务园D座5楼: 反地理编码

    经纬度
    经纬度介绍

    本初子午线

    穿过英国伦敦格林文治天文台 

    往东边(右边)走,是东经(E)

    往西边(左边)走,是西经(W)

    东西经各180°,总共360°

    赤道

    往北边(上边)走,是北纬(N)

    往南边(下边)走,是南纬(S)

    南北纬各90°,总共180°

    横跨经度\纬度越大(1°≈111km)

    表示的范围就越大

    在地图上看到的东西就越小

    模拟位置

    最好使用真机测试,如果是模拟器,需要设置模拟位置(经纬度)如下图:

    设置经纬度
    设置测试经纬度

    提示:

    帝都的经纬度是:北纬40°,东经116°

    CLGeocoder

    使用CLGeocoder可以完成“地理编码”和“反地理编码”

    地理编码方法

    -(void)geocodeAddressString:(NSString*)addressStringcompletionHandler:(CLGeocodeCompletionHandler)completionHandler;

    反地理编码方法

    -(void)reverseGeocodeLocation:(CLLocation*)locationcompletionHandler:(CLGeocodeCompletionHandler)completionHandler;

    CLGeocodeCompletionHandler

    当地理\反地理编码完成时,就会调用CLGeocodeCompletionHandler

    typedefvoid(^CLGeocodeCompletionHandler)(NSArray*placemarks,NSError*error);

    这个block传递2个参数

    error:当编码出错时(比如编码不出具体的信息)有值

    placemarks:里面装着CLPlacemark对象

    CLPlacemark

    CLPlacemark的字面意思是地标,封装详细的地址位置信息

    @property(nonatomic,readonly)CLLocation*location; //地理位置

    @property(nonatomic,readonly)CLRegion*region; //区域

    @property(nonatomic,readonly)NSDictionary*addressDictionary; //详细的地址信息

    @property(nonatomic,readonly)NSString*name; //地址名称

    @property(nonatomic,readonly)NSString*locality; //城市

    实例代码

    /** 地理编码 */使用这个类来实现地理编码反地理编码转换

    @property (nonatomic, strong) CLGeocoder *geoC;

    懒加载

    - (CLGeocoder *)geoC{
       if (!_geoC) {
      _geoC = [[CLGeocoder alloc] init];

    }
      return _geoC;

    }

    地理编码

    [self.geoC geocodeAddressString:城市名称 completionHandler:^(NSArray* _Nullable placemarks, NSError * _Nullable error) {

    if(error == nil)

    {

    NSLog(@"%@", placemarks);

    [placemarks enumerateObjectsUsingBlock:^(CLPlacemark * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

    NSLog(@"%@", obj.name);

    NSString *cityStr = obj.name;

    NSString *latitudeStr = @(obj.location.coordinate.latitude).stringValue;

    NSString *longitudeStr = @(obj.location.coordinate.longitude).stringValue;

    }];

    }else{

    NSLog(@"cuowu--%@", error.localizedDescription);

    }

    }];

    反地理编码

    CLLocation *loc = [[CLLocation alloc] initWithLatitude:纬度 longitude:经度];
    //注:传经纬度时候需要传 double类型
    [self.geoC reverseGeocodeLocation:loc completionHandler:^(NSArray* _Nullable placemarks, NSError * _Nullable error) {

    if(error == nil)

    {

    NSLog(@"%@", placemarks);


    [placemarks enumerateObjectsUsingBlock:^(CLPlacemark * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

    NSLog(@"%@", obj.name);

    NSString *cityStr = obj.name;

    NSString *latitudeStr = @(obj.location.coordinate.latitude).stringValue;

    NSString *longitudeStr = @(obj.location.coordinate.longitude).stringValue;

    }];

    }else
    {
    NSLog(@"cuowu");

    }

    }];

    相关文章

      网友评论

          本文标题:iOS开发之CoreLocaiton框架使用(地理编码,反地理编

          本文链接:https://www.haomeiwen.com/subject/dilwjttx.html