地图的解析与反向解析
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];
}
}];
}
}