地图的解析与反向解析

一 拖拽控件并关联 注意: 在拖拽按钮时 需在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];
            
            
        }
            

            
        }];
        
        
        
    }
    
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,959评论 25 708
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 4,117评论 2 7
  • 刘军_6de1阅读 254评论 0 0
  • 落花有意,水无情 冬去春来,还复还 自古多情,空悲切 比翼双飞,昨日愿
    轻尘_阅读 189评论 0 0

友情链接更多精彩内容