地图的解析与反向解析

2017-08-02  本文已影响0人  J_mine

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

            
        }];
        
        
        
    }
    
}

上一篇下一篇

猜你喜欢

热点阅读