美文网首页日常收录
iOS CLGeocoder(地图解析)~dome

iOS CLGeocoder(地图解析)~dome

作者: Wang99 | 来源:发表于2017-10-10 10:09 被阅读0次
    样式图.gif
    快捷方式.png

    实现代码:

    
    /**
    
    注意点:在视图上面输入经纬度-->不能超出一下范围
    
    1.纬度为南纬90-0-北纬90
    
    2.经度为西经180-本出子午线(0度)-东经180
    
    3.高德地图存在偏差,解析的经纬度不准确
    
    4.UIAlertView(提示框)不能高于 iOS9.0,否则报黄
    
    */
    
    
    
    #import"ViewController.h"
    
    #import
    
    @interfaceViewController()
    
    //地址输入框
    
    @property(weak,nonatomic)IBOutletUITextField*addrField;
    
    //经度
    
    @property(weak,nonatomic)IBOutletUITextField*longitudeField;
    
    //纬度
    
    @property(weak,nonatomic)IBOutletUITextField*latitudeField;
    
    //显示内容框
    
    @property(weak,nonatomic)IBOutletUITextView*resultView;
    
    //解析地址
    
    - (IBAction)encodeTapped:(UIButton*)sender;
    
    //反方向解析
    
    - (IBAction)reverseTapped:(UIButton*)sender;
    
    //地理编码
    
    @property(strong,nonatomic)CLGeocoder*geocoder;
    
    @end
    
    @implementationViewController
    
    - (void)viewDidLoad {
    
    [superviewDidLoad];
    
    //创建地址解析器
    
    self.geocoder= [[CLGeocoderalloc]init];
    
    }
    #pragma mark -解析地址
    
    - (IBAction)encodeTapped:(UIButton*)sender
    
    {
    
    //获取用户输入的地址字符串
    
    NSString*addr =self.addrField.text;
    
    if(addr !=nil&& addr.length>0)
    
    {
    
    [self.geocodergeocodeAddressString:@"北京八维研修学院"
    
    completionHandler: ^(NSArray*placemarks,NSError*error)
    
    {
    
    //如果解析结果的集合元素的个数大于1,表明解析得到了经度、纬度信息
    
    if(placemarks.count>0)
    
    {
    
    //只处理第一个解析结果,实际项目中可使用列表让用户选择
    
    CLPlacemark*placemark = placemarks[0];
    
    CLLocation* location = placemark.location;
    
    self.resultView.text= [NSStringstringWithFormat:
    
    @"%@的经度为:%g,纬度为:%g", addr ,
    
    location.coordinate.longitude,
    
    location.coordinate.latitude];
    
    }else//没有得到解析结果。
    
    {
    
    //使用UIAlertView提醒用户
    
    [[[UIAlertViewalloc]initWithTitle:@"提醒"message:@"您输入的地址无法解析"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil]
    
    show];
    
    }
    
    }];
    
    }
    
    }
    
    
    
    #pragma mark -反方向解析
    
    - (IBAction)reverseTapped:(UIButton*)sender
    
    {
    
    NSString* longitudeStr =self.longitudeField.text;
    
    NSString* latitudeStr =self.latitudeField.text;
    
    if(longitudeStr !=nil&& longitudeStr.length>0
    
    && latitudeStr !=nil&& latitudeStr.length>0)
    
    {
    
    //将用户输入的经度、纬度封装成CLLocation对象
    
    CLLocation* location = [[CLLocationalloc]
    
    initWithLatitude:[latitudeStrfloatValue]
    
    longitude:[longitudeStrfloatValue]];
    
    [self.geocoderreverseGeocodeLocation:locationcompletionHandler:
    
    ^(NSArray*placemarks,NSError*error)
    
    {
    
    //如果解析结果的集合元素的个数大于1,表明解析得到了经度、纬度信息
    
    if(placemarks.count>0)
    
    {
    
    //只处理第一个解析结果,实际项目可使用列表让用户选择
    
    CLPlacemark* placemark = placemarks[0];
    
    //获取详细地址信息
    
    NSArray* addrArray = [placemark.addressDictionary
    
    objectForKey:@"FormattedAddressLines"];
    
    //将详细地址拼接成一个字符串
    
    NSMutableString* addr = [[NSMutableStringalloc]init];
    
    for(inti =0; i < addrArray.count; i ++)
    
    {
    
    [addrappendString:addrArray[i]];
    
    }
    
    self.resultView.text= [NSStringstringWithFormat:
    
    @"经度:%g,纬度:%g的地址为:%@",
    
    location.coordinate.longitude,
    
    location.coordinate.latitude, addr];
    
    }else{//没有得到解析结果。
    
    //使用UIAlertView提醒用户
    
    [[[UIAlertViewalloc]initWithTitle:@"提醒"message:@"您输入的地址无法解析"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil]
    
    show];
    
    }
    
    }];
    
    }
    
    }
    
    @end
    

    相关文章

      网友评论

        本文标题:iOS CLGeocoder(地图解析)~dome

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