地图的解析与反向解析

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

地图的解析与反向解析_第1张图片

二 导入头文件

#import 

三 在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 * _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 * _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 

你可能感兴趣的:(地图的解析与反向解析)