iOS CLGeocoder(地图解析)

//联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄

/**

注意点: 1.看 GIF 效果图.

2.看连线视图的效果图.

3.看实现代码(直接复制实现效果).

*/

一、GIF 效果图:

iOS CLGeocoder(地图解析)_第1张图片

二、连线视图的效果图:

图1:

iOS CLGeocoder(地图解析)_第2张图片

三、实现代码:

=========================

===================================================

==========================

/**

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

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

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

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

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

*/

控制器1:

//

//  ViewController.m

//  AddressResolution(地址解析)

//

//  Created by石虎on 2017/7/5.

//  Copyright © 2017年shihu. All rights reserved.

//

#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(地图解析))