zoukankan      html  css  js  c++  java
  • 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键:可以从字典中取出地标所在的城市等信息

  • 相关阅读:
    Python入门-函数进阶
    Python入门-初始函数
    Leetcode300. Longest Increasing Subsequence最长上升子序列
    Leetcode139. Word Break单词拆分
    Leetcode279. Perfect Squares完全平方数
    Leetcode319. Bulb Switcher灯泡开关
    Leetcode322. Coin Change零钱兑换
    二叉树三种遍历两种方法(递归和迭代)
    Leetcode145. Binary Tree Postorder Traversal二叉树的后序遍历
    Leetcode515. Find Largest Value in Each Tree Row在每个树行中找最大值
  • 原文地址:https://www.cnblogs.com/yaoxc/p/3721754.html
Copyright © 2011-2022 走看看