Oc CLGeocoder(地图解析)

Oc CLGeocoder(地图解析)_第1张图片
20170801183711993.png
#import "ViewController.h"
#import 

@interface ViewController ()

//地址输入框
@property (weak, nonatomic) IBOutlet UITextField *addrField;
//经度
@property (weak, nonatomic) IBOutlet UITextField *longitudeField;
//纬度
@property (weak, nonatomic) IBOutlet UITextField *latitudeField;
//显示内容框
@property (weak, nonatomic) IBOutlet UITextView *resultView;
//解析地址
- (IBAction)encodeTapped:(UIButton *)sender;
//反方向解析
- (IBAction)reverseTapped:(UIButton *)sender;
//地理编码
@property (strong, nonatomic) CLGeocoder *geocoder;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 创建地址解析器
    self.geocoder = [[CLGeocoder alloc] init];

}
#pragma mark - 解析地址
- (IBAction)encodeTapped:(UIButton *)sender
{
    // 获取用户输入的地址字符串
    NSString *addr = self.addrField.text;
    if(addr != nil && addr.length > 0)
    {
        [self.geocoder geocodeAddressString:@"北京八维研修学院"
         completionHandler: ^(NSArray *placemarks, NSError *error)
         {
             // 如果解析结果的集合元素的个数大于1,表明解析得到了经度、纬度信息
             if (placemarks.count > 0)
             {
                 // 只处理第一个解析结果,实际项目中可使用列表让用户选择
                 CLPlacemark *placemark = placemarks[0];
                 CLLocation* location = placemark.location;
                 self.resultView.text = [NSString stringWithFormat:
                                         @"%@的经度为:%g,纬度为:%g" , addr ,
                                         location.coordinate.longitude ,
                                         location.coordinate.latitude ];
             }else // 没有得到解析结果。
             {
                 // 使用UIAlertView提醒用户
                 [[[UIAlertView alloc] initWithTitle:@"提醒"message:@"您输入的地址无法解析" delegate:nil cancelButtonTitle:@"确定" 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 = [[CLLocation alloc]
                                initWithLatitude:[latitudeStr floatValue]
                                longitude:[longitudeStr floatValue]];
        
        [self.geocoder reverseGeocodeLocation:location completionHandler:
         ^(NSArray *placemarks, NSError *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.resultView.text = [NSString stringWithFormat:
                                         @"经度:%g,纬度:%g的地址为:%@" ,
                                         location.coordinate.longitude ,
                                         location.coordinate.latitude , addr];
             }else{// 没有得到解析结果。
                 // 使用UIAlertView提醒用户
                 [[[UIAlertView alloc] initWithTitle:@"提醒"message:@"您输入的地址无法解析" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil]
                  show];
             }
         }];
    }
}

@end

你可能感兴趣的:(Oc CLGeocoder(地图解析))