Oc CLGeocoder(地图解析)

来源:互联网 发布:算法c语言实现高清pdf 编辑:程序博客网 时间:2024/06/09 21:40

20170801183711993.png

#import "ViewController.h"#import <CoreLocation/CoreLocation.h>@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
原创粉丝点击