美文网首页
地图的解析与反向解析

地图的解析与反向解析

作者: J_mine | 来源:发表于2017-08-02 19:34 被阅读0次

    一 拖拽控件并关联 注意: 在拖拽按钮时 需在Connection中选中Action


    二 导入头文件

    #import <CoreLocation/CoreLocation.h>
    
    

    三 在viewDidLoad中初始化CLGeocoder

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // 初始化
        self.gecoder = [[CLGeocoder alloc] init];
    }
    
    
    

    四 在解析地址中写下解析地址的方法

    // 解析地址
    - (IBAction)jiexi:(id)sender
    {
        NSString *addr = self.addrField.text;
        
        if (addr != nil && addr.length >0)
        {
            [self.gecoder geocodeAddressString:addr completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error)
            {
                //placemarks 只有大于1的时候,标明得到的是经纬度
                if (placemarks.count > 0)
                {
                    CLPlacemark *placemark = placemarks[0];
                    // 经度
                    CLLocation *location = placemark.location;
                    
                    self.wenben.text = [NSString stringWithFormat:@"%@的经度是:%g,纬度是:%g",addr,location.coordinate.longitude,location.coordinate.latitude];
                }
                
            }];
        }
        else
        {
            // 提示框
            UIAlertView *theAlert = [[UIAlertView alloc] initWithTitle:@"提醒" message:@"地址无法解析" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
            [theAlert show];
        }
    }
    
    

    五 在反向解析的按钮中写反向的方法

    // 反向
    - (IBAction)Fjiexi:(id)sender
    {
        // 经
        NSString *longitudeStr = self.jingdu.text;
        // 纬
        NSString *latitudeStr = self.weidu.text;
        
        if (latitudeStr != nil&&latitudeStr.length >0 &&longitudeStr != nil &&latitudeStr.length > 0)
        {
            // 将用户输入的经度 纬度封装成CLLocation对象
            CLLocation *location = [[CLLocation alloc] initWithLatitude:[latitudeStr floatValue] longitude:[longitudeStr floatValue]];
            
            [self.gecoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error)
            {
                // 如果解析结果的集合元素的个数大于1,表明解析得到了经度、纬度信息
                if (placemarks.count > 0)
                {
                    // 只处理第一个解析结果,实际项目可使用列表让用户选择
                    CLPlacemark *placemark = placemarks[0];
                    // 获取详细地址信息
                    NSArray *addrArray = [placemark.addressDictionary objectForKey:@"FormattedAddressLines"];
                    // 将详细地址拼接成一个字符串
                    NSMutableString *addr = [[NSMutableString alloc] init];
                    for (int i =0; i <addrArray.count ; i++)
                    {
                        [addr appendString:addrArray[i]];
                    }
                    self.wenben.text = [NSString stringWithFormat:@"经度是:%g,纬度是:%g的地址为:%@",location.coordinate.longitude,location.coordinate.latitude,addr];
                    
            }
            else
            {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提醒" message:@"您输入的地址无法解析" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
                
                [alert show];
                
                
            }
                
    
                
            }];
            
            
            
        }
        
    }
    
    

    相关文章

      网友评论

          本文标题:地图的解析与反向解析

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