定位服务:5-CLGeocoder应用案例2
上一节的示例代码演示了使用CLGeocoder类进行地址到经纬度的转换,本节我们来完成从经纬度到地址的反向转换过程。
准备工作
新建一个Single View Application工程,并导入CoreLocation框架,操作方法参见前面章节。
在Storyboard中,搭建如下的界面,用于输入经纬度信息,并且可以显示对应的地址信息。建立控件与控制器类之间的连线,添加属性以及按钮的点击方法。
在控制器类中,添加一个CLGeocoder类的属性,并对其进行简单的初始化操作。
#import <CoreLocation/CoreLocation.h>
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *lngTextField;//经度
@property (weak, nonatomic) IBOutlet UITextField *latTextField;//纬度
@property (weak, nonatomic) IBOutlet UITextField *addressTextField;//地址
@property (weak, nonatomic) IBOutlet UITextField *nameTextField;//名称
@property (nonatomic,strong)CLGeocoder *geocoder;
@end
- (CLGeocoder *)geocoder {
if (_geocoder == nil) {
_geocoder = [[CLGeocoder alloc] init];
}
return _geocoder;
}
实现经纬度翻译功能
在【获取经纬度的地址名称】按钮的点击方法中,添加如下代码,实现根据用户输入的经纬度获取该经纬度对应的地址名称,并显示到界面上。
- (IBAction)reverseGeocode:(id)sender {
double latitude = [self.latTextField.text doubleValue];
double longitude = [self.lngTextField.text doubleValue];
CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
[self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if ([placemarks count] > 0) {
//返回描述信息
CLPlacemark *placemark = placemarks[0];
//获取所需信息
NSString *country = placemark.country;
NSString *area = placemark.administrativeArea;
NSString *city = placemark.locality;
NSString *street = placemark.thoroughfare;
//在textView上面显示
self.addressTextField.text = [NSString stringWithFormat:@"%@ %@ %@ %@",country,area,city,street];
self.nameTextField.text = placemark.name;
}
}];
}
运行效果如下所示,当我们输入经纬度信息后,点击按钮,即可显示该经纬度对应的地址信息。
示例代码
https://github.com/99ios/17.2.5
文章发布时间为: August 8th , 2017 at 05:47 pm
最后编辑时间为: September 15th , 2017 at 08:10 am
本文由 99ios 创作,转载请注明出处
最后编辑时间为: September 15th , 2017 at 08:10 am
本文由 99ios 创作,转载请注明出处