• iOS定位服务与地图开发(2)---地理信息反编码


    上节我们通过定位获取了经度和纬度数值,但是一般人很难看懂这些数字。

    地理信息反编码:就是根据这些经纬数字返回地点的相关文字描述信息,这些文字描述信息被封装在CLPlacemark类中,我们称这个类为“地标”类。

    地理信息反编码使用CLGeocoder类实现,这个类能够实现在地理坐标与地理文字描述信息之间的转换。

    CLGeocoder类中进行地理信息反编码的方法是:reverseGeocodeLocationcompletionHandler:

    location:是要定位的地理位置对象

    completionHandler:指定了一个代码块,用于地理位置反编码之后的回调。

    -(IBAction)reverseGeocode:(id)sender
    
    {
        CLGeocoder *geoCoder = [[CLGeocoder alloc] init];
    
        [geoCoder reverseGeocodeLocation:_currLocation completionHandler:^(NSArray *placemarks, NSError *error)
    
        {
             //得到的数组placemarks就是CLPlacemark对象数组,这里只取第一个就行
    
             CLPlacemark *mark = nil;
    
             if([placemarks count] > 0){
    
                 id tempMark = [placemarks objectAtIndex:0];
    
                 if([tempMark isKindOfClass:[CLPlacemark class]])
    
                 {
                     mark = tempMark;
                 }
    
                 //具体业务逻辑,CLPlacemark的属性有很多,包括了街道名等相关属性  
                 NSDictionary *addressDict = mark.addressDictionary;
                 NSString *address = [addressDict  objectForKey:(NSString)kABPersonAddressStreetKey];
                 address = address == nil ? @"" : address;
        
                 NSString *state = [addressDict objectForKey:(NSString)kABPersonAddressStateKey];
     
                 state = state == nil ? @"" : state;
                 
                 NSString *city = [addressDict objectForKey:(NSString)kABPersonAddressCityKey];
    
                 city = city == nil ? @"" : city;
    
                 //  获取地标对应的可读的文字信息,一般返回到UI显示
                 NSString *streetInfo = [NSString stringWithFormat:@"%@
    %@
    %@
    ",state,address,city];    
             }             
         }];
    }                

    【说明】:

    _currLocation是CLLocation类型的成员变量,是在委托方法locationManager:didUpdateLocations:中获得的。

    completionHandler:^(NSArray *plackmrks , NSError *error)参数placemarks是反编码成功的地标集合。如果用户要查看所有的地标信息,需要循环遍历。

    下面这些键是在AddressBook框架中定义的常量,需要引入AddressBook.framework框架:

    kABPersonAddressStreetKey键:可以从字典中取出地标的街道信息

    kABPersonAddressStateKey键:可以从字典中取出地标所在的州、省等信息

    kABPersonAddressCityKey键:可以从字典中取出地标所在的城市等信息

  • 相关阅读:
    切比雪夫不等式
    Myeclipse中可以正常显示,但运行后的网页找不到图片
    Hibernate Is Not Mapped(实体名 is not mapped [from book where id='0'])
    struts2-core-2.1.6.jar!/struts-default.xml无法加载的问题
    myeclipse 8.5最新注册码(过期时间到2016年)
    三大框架SSH(struts2+spring+hibernate)整合时相关配置文件的模板
    Initializing Spring root WebApplicationContext
    Unable to load bean: type: struts-derfault.xml异常
    Error creating bean with name 'bookDao'
    hibernate异常:Could not determine type for: java.util.Set
  • 原文地址:https://www.cnblogs.com/yaoxc/p/3721754.html
Copyright © 2020-2023  润新知