美文网首页
iOS地图解析经纬度过程

iOS地图解析经纬度过程

作者: 往日的时光 | 来源:发表于2017-09-01 14:28 被阅读0次

    最近学习iOS地图比较多,所以做笔记记录一下,作为总结

    对于地图和定位,苹果公司提供给了两个框架:
    MapKit:用于地图展示
    Core Location :用于地理定位

    首先我们把用于地理定位的系统库导入工程:

    地理定位系统库

    然后导入头文件:

    #import <CoreLocation/CoreLocation.h>
    

    CoreLocation框架使用须知
    CoreLocation框架中所有数据类型的前缀都是CL
    CoreLocation中使用CLLocationManager对象来做用户定位

    然后使用拖拽控件方式:

    解析和反解析控件

    CLGeocoder (地理编码,反地理编码)

    使用CLGeocoder可以完成“地理编码”和“反地理编码”
    地理编码:根据给定的地名,获得具体的位置信息(比如经纬度、地址的全称等)
    反地理编码:根据给定的经纬度,获得具体的位置信息

    地理编码方法
    - (void)geocodeAddressString:(NSString*)addressStringcompletionHandler:(CLGeocodeCompletionHandler)completionHandler;
    反地理编码方法
    - (void)reverseGeocodeLocation:(CLLocation*)locationcompletionHandler:(CLGeocodeCompletionHandler)completionHandler
    

    代码如下:

    #import "ViewController.h"
    #import <CoreLocation/CoreLocation.h>
    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UITextField *DiZhiTF;
    @property (weak, nonatomic) IBOutlet UITextField *JingDUTF;
    @property (weak, nonatomic) IBOutlet UITextField *WeiDu;
    @property (weak, nonatomic) IBOutlet UITextView *ZhanShi;
    //地理编码
    @property(strong,nonatomic)CLGeocoder *geocoder;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        //创建地址解析器
        self.geocoder= [[CLGeocoder alloc]init];
    }
    
    - (IBAction)KSJieXi:(id)sender
    {
        // 获取用户输入的地址字符串
        NSString *Dz = self.DiZhiTF.text;
        if(Dz != nil && Dz.length > 0)
        {
            [self.geocoder geocodeAddressString:Dz
                              completionHandler: ^(NSArray *placemarks, NSError *error)
             {
                 // 如果解析结果的集合元素的个数大于1,表明解析得到了经度、纬度信息
                 if (placemarks.count > 0)
                 {
                     // 只处理第一个解析结果,实际项目中可使用列表让用户选择
                     CLPlacemark *placemark = placemarks[0];
                     CLLocation *location = placemark.location;
                     self.ZhanShi.text = [NSString stringWithFormat:
                                             @"%@的经度为:%g,纬度为:%g",Dz,
                                             location.coordinate.longitude,
                                             location.coordinate.latitude];
                 }
                 else
                 {
                     NSLog(@"您输入的地址不正确");
                 }
             }];
        }
        
    }
    
    
    
        
    
    
    - (IBAction)KSFanXiang:(id)sender
    {
        NSString *longitudeStr = self.JingDUTF.text;
        NSString *latitudeStr = self.WeiDu.text;
        if(longitudeStr != nil && longitudeStr.length > 0
           && latitudeStr != nil && latitudeStr.length > 0)
        {
            // 将用户输入的经度、纬度封装成CLLocation对象
            CLLocation* location = [[CLLocation alloc]initWithLatitude:[latitudeStr floatValue]
                                    longitude:[longitudeStr floatValue]];
            
            [self.geocoder reverseGeocodeLocation:location completionHandler:
             ^(NSArray *placemarks, NSError *error)
             {
                 // 如果解析结果的集合元素的个数大于1,表明解析得到了经度、纬度信息
                 if (placemarks.count > 0)
                 {
                     // 只处理第一个解析结果,实际项目可使用列表让用户选择
                     CLPlacemark* placemark = placemarks[0];
                     // 获取详细地址信息
                     NSArray* addrArray = [placemark.addressDictionary
                                           objectForKey:@"FormattedAddressLines"];
                     // 将详细地址拼接成一个字符串
                     NSMutableString *Dz = [[NSMutableString alloc] init];
                     for(int i = 0 ; i < addrArray.count; i ++)
                     {
                         [Dz appendString:addrArray[i]];
                     }
                     self.ZhanShi.text = [NSString stringWithFormat:
                                             @"经度:%g,纬度:%g的地址为:%@",
                                             location.coordinate.latitude,
                                             location.coordinate.longitude,Dz];
                 }
                 // 没有得到解析结果。
                 else
                 {
                     NSLog(@"您输入的地址无法解析");
                 }
             }];
        }
    
    }
    
    
    @end
    

    实现效果如下:

    实现解析效果

    相关文章

      网友评论

          本文标题:iOS地图解析经纬度过程

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