iOS CLGeocoder(地图解析)~dome

iOS CLGeocoder(地图解析)~dome_第1张图片
样式图.gif

iOS CLGeocoder(地图解析)~dome_第2张图片
快捷方式.png

实现代码:


/**

注意点:在视图上面输入经纬度-->不能超出一下范围

1.纬度为南纬90-0-北纬90

2.经度为西经180-本出子午线(0度)-东经180

3.高德地图存在偏差,解析的经纬度不准确

4.UIAlertView(提示框)不能高于 iOS9.0,否则报黄

*/



#import"ViewController.h"

#import

@interfaceViewController()

//地址输入框

@property(weak,nonatomic)IBOutletUITextField*addrField;

//经度

@property(weak,nonatomic)IBOutletUITextField*longitudeField;

//纬度

@property(weak,nonatomic)IBOutletUITextField*latitudeField;

//显示内容框

@property(weak,nonatomic)IBOutletUITextView*resultView;

//解析地址

- (IBAction)encodeTapped:(UIButton*)sender;

//反方向解析

- (IBAction)reverseTapped:(UIButton*)sender;

//地理编码

@property(strong,nonatomic)CLGeocoder*geocoder;

@end
@implementationViewController

- (void)viewDidLoad {

[superviewDidLoad];

//创建地址解析器

self.geocoder= [[CLGeocoderalloc]init];

}
#pragma mark -解析地址

- (IBAction)encodeTapped:(UIButton*)sender

{

//获取用户输入的地址字符串

NSString*addr =self.addrField.text;

if(addr !=nil&& addr.length>0)

{

[self.geocodergeocodeAddressString:@"北京八维研修学院"

completionHandler: ^(NSArray*placemarks,NSError*error)

{

//如果解析结果的集合元素的个数大于1,表明解析得到了经度、纬度信息

if(placemarks.count>0)

{

//只处理第一个解析结果,实际项目中可使用列表让用户选择

CLPlacemark*placemark = placemarks[0];

CLLocation* location = placemark.location;

self.resultView.text= [NSStringstringWithFormat:

@"%@的经度为:%g,纬度为:%g", addr ,

location.coordinate.longitude,

location.coordinate.latitude];

}else//没有得到解析结果。

{

//使用UIAlertView提醒用户

[[[UIAlertViewalloc]initWithTitle:@"提醒"message:@"您输入的地址无法解析"delegate:nilcancelButtonTitle:@"确定"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 = [[CLLocationalloc]

initWithLatitude:[latitudeStrfloatValue]

longitude:[longitudeStrfloatValue]];

[self.geocoderreverseGeocodeLocation:locationcompletionHandler:

^(NSArray*placemarks,NSError*error)

{

//如果解析结果的集合元素的个数大于1,表明解析得到了经度、纬度信息

if(placemarks.count>0)

{

//只处理第一个解析结果,实际项目可使用列表让用户选择

CLPlacemark* placemark = placemarks[0];

//获取详细地址信息

NSArray* addrArray = [placemark.addressDictionary

objectForKey:@"FormattedAddressLines"];

//将详细地址拼接成一个字符串

NSMutableString* addr = [[NSMutableStringalloc]init];

for(inti =0; i < addrArray.count; i ++)

{

[addrappendString:addrArray[i]];

}

self.resultView.text= [NSStringstringWithFormat:

@"经度:%g,纬度:%g的地址为:%@",

location.coordinate.longitude,

location.coordinate.latitude, addr];

}else{//没有得到解析结果。

//使用UIAlertView提醒用户

[[[UIAlertViewalloc]initWithTitle:@"提醒"message:@"您输入的地址无法解析"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil]

show];

}

}];

}

}

@end

你可能感兴趣的:(iOS CLGeocoder(地图解析)~dome)