IOS 关于内置高德地图的使用设置(一)
2015-10-21 20:47
357 查看
第一部分: 根据经度纬度, 查找地理位置
#import "LocationViewController.h"
#import <CoreLocation/CoreLocation.h>
@interface LocationViewController () <CLLocationManagerDelegate>
@property (nonatomic,strong)
CLLocationManager *locationMag; //
定位管理对象
- (IBAction)geocode:(UIButton *)sender;
@property (strong,nonatomic)
IBOutletUITextField *addressField;
@property (strong,nonatomic)
IBOutletUILabel *latitude;
@property (strong,nonatomic)
IBOutletUILabel *longitude;
@property (strong,nonatomic)
IBOutletUILabel *detailAdress;
@property (nonatomic,strong)
CLGeocoder *geocoder;//
编码对象(工具)
// 反地理编码
- (IBAction)reverseGeocode:(UIButton *)sender;
@property (strong,nonatomic)
IBOutletUITextField *latitudeTextField;
@property (strong,nonatomic)
IBOutletUITextField *longitudeTextField;
@property (strong,nonatomic)
IBOutletUILabel *reverseDetailAddress;
@end
// 若是用SB进行界面切换(传值)
// 方法一:直接在SB上用线拖拽 正常传值
// 方法二:不拖线
若有多个界面传值则在 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法中来区分给哪个界面传值
获取目标VC用-->segue.destinationViewController
@implementation LocationViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view.
self.navigationController.navigationBar.translucent
= NO;
// 创建定位管理对象
_locationMag = [[CLLocationManageralloc]
init];
// CLLocationManager
是通过delegate来实现实时定位的
_locationMag.delegate =self;
// 需要提示全权限(向系统申请定位权限)
[_locationMagrequestAlwaysAuthorization];
// [_locationMag requestWhenInUseAuthorization];
// 开始定位
[_locationMagstartUpdatingLocation];
#pragma mark----创建一个地理(反)编码
self.geocoder = [[CLGeocoderalloc]init];
}
#pragma mark - 实现CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation *location = locations[0];
NSLog(@"纬度:%f,经度:%f", location.coordinate.latitude,
location.coordinate.longitude);
NSLog(@"%@", locations);
// 为了省电,定位完毕之后,
关闭
[self.locationMagstopUpdatingLocation];
}
#pragma mark----地理编码
- (IBAction)geocode:(UIButton *)sender
{
[self.geocodergeocodeAddressString:self.addressField.textcompletionHandler:
^(NSArray *placemarks,NSError *error) {
if (error) {
self.detailAdress.text =@"你查找的地点在另一个星球";
}else{
// placemarks这个数组中存放的是 CLPlacemark
对象(位置对象,属性有: name, country, location)
NSDictionary *dic = [placemarks[0]addressDictionary];
NSLog(@"%@", dic[@"Country"]);
// 设置经纬度
CLPlacemark *placemark = placemarks[0];
self.latitude.text = [NSStringstringWithFormat:@"%lf",
placemark.location.coordinate.latitude];
self.longitude.text = [NSStringstringWithFormat:@"%lf",placemark.location.coordinate.longitude];
// 地址详情
self.detailAdress.text = placemark.name;
}
}];
}
// 地理反编码
- (IBAction)reverseGeocode:(UIButton *)sender
{
// 创建一个 CLLocation对象
// 获取输入的纬度和经度,并转化为 double
类型
CLLocationDegrees latitude = [self.latitudeTextField.textdoubleValue];
CLLocationDegrees longitude = [self.longitudeTextField.textdoubleValue];
CLLocation *loc = [[CLLocationalloc]initWithLatitude:latitudelongitude:longitude];
[self.geocoderreverseGeocodeLocation:loc
completionHandler:^(NSArray *placemarks,NSError *error) {
if (error) {
self.reverseDetailAddress.text =@"未获取到指定位置";
}else
{
// 取出数组中第一个 placemark对象
CLPlacemark * placemark = placemarks[0];
// 设置详细地址
self.reverseDetailAddress.text = placemark.name;
}
}];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.viewendEditing:YES];
}
#import "LocationViewController.h"
#import <CoreLocation/CoreLocation.h>
@interface LocationViewController () <CLLocationManagerDelegate>
@property (nonatomic,strong)
CLLocationManager *locationMag; //
定位管理对象
- (IBAction)geocode:(UIButton *)sender;
@property (strong,nonatomic)
IBOutletUITextField *addressField;
@property (strong,nonatomic)
IBOutletUILabel *latitude;
@property (strong,nonatomic)
IBOutletUILabel *longitude;
@property (strong,nonatomic)
IBOutletUILabel *detailAdress;
@property (nonatomic,strong)
CLGeocoder *geocoder;//
编码对象(工具)
// 反地理编码
- (IBAction)reverseGeocode:(UIButton *)sender;
@property (strong,nonatomic)
IBOutletUITextField *latitudeTextField;
@property (strong,nonatomic)
IBOutletUITextField *longitudeTextField;
@property (strong,nonatomic)
IBOutletUILabel *reverseDetailAddress;
@end
// 若是用SB进行界面切换(传值)
// 方法一:直接在SB上用线拖拽 正常传值
// 方法二:不拖线
若有多个界面传值则在 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法中来区分给哪个界面传值
获取目标VC用-->segue.destinationViewController
@implementation LocationViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view.
self.navigationController.navigationBar.translucent
= NO;
// 创建定位管理对象
_locationMag = [[CLLocationManageralloc]
init];
// CLLocationManager
是通过delegate来实现实时定位的
_locationMag.delegate =self;
// 需要提示全权限(向系统申请定位权限)
[_locationMagrequestAlwaysAuthorization];
// [_locationMag requestWhenInUseAuthorization];
// 开始定位
[_locationMagstartUpdatingLocation];
#pragma mark----创建一个地理(反)编码
self.geocoder = [[CLGeocoderalloc]init];
}
#pragma mark - 实现CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation *location = locations[0];
NSLog(@"纬度:%f,经度:%f", location.coordinate.latitude,
location.coordinate.longitude);
NSLog(@"%@", locations);
// 为了省电,定位完毕之后,
关闭
[self.locationMagstopUpdatingLocation];
}
#pragma mark----地理编码
- (IBAction)geocode:(UIButton *)sender
{
[self.geocodergeocodeAddressString:self.addressField.textcompletionHandler:
^(NSArray *placemarks,NSError *error) {
if (error) {
self.detailAdress.text =@"你查找的地点在另一个星球";
}else{
// placemarks这个数组中存放的是 CLPlacemark
对象(位置对象,属性有: name, country, location)
NSDictionary *dic = [placemarks[0]addressDictionary];
NSLog(@"%@", dic[@"Country"]);
// 设置经纬度
CLPlacemark *placemark = placemarks[0];
self.latitude.text = [NSStringstringWithFormat:@"%lf",
placemark.location.coordinate.latitude];
self.longitude.text = [NSStringstringWithFormat:@"%lf",placemark.location.coordinate.longitude];
// 地址详情
self.detailAdress.text = placemark.name;
}
}];
}
// 地理反编码
- (IBAction)reverseGeocode:(UIButton *)sender
{
// 创建一个 CLLocation对象
// 获取输入的纬度和经度,并转化为 double
类型
CLLocationDegrees latitude = [self.latitudeTextField.textdoubleValue];
CLLocationDegrees longitude = [self.longitudeTextField.textdoubleValue];
CLLocation *loc = [[CLLocationalloc]initWithLatitude:latitudelongitude:longitude];
[self.geocoderreverseGeocodeLocation:loc
completionHandler:^(NSArray *placemarks,NSError *error) {
if (error) {
self.reverseDetailAddress.text =@"未获取到指定位置";
}else
{
// 取出数组中第一个 placemark对象
CLPlacemark * placemark = placemarks[0];
// 设置详细地址
self.reverseDetailAddress.text = placemark.name;
}
}];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.viewendEditing:YES];
}
相关文章推荐
- iOS 获取自定义cell上按钮所对应cell的indexPath.row的方法
- iOS经典讲解之NSUserDefaults
- standardUserDefaults
- 【IOS 开发学习总结-OC-61】IOS 的自动旋转
- IOS开发笔记3-SCANF函数使用和表达式
- IOS构建XMPP开发
- iOS 原生扫码
- IOS学习 postNotificationName 消息传递详解
- iOS开发>学无止境 - 各种传值方式
- IOS学习 NSAssert和NSAssertion?Handler:断言相关
- 使用Xcode修改iOS项目工程名和路径名
- iOS:VFL语言
- IOS开发:XMPP聊天工具的使用
- iOS 访问相机 相册
- iOS学习一些资料的整理
- iOS 开发流程笔记(四)
- #在蓝懿学习iOS的日子#Label、TextFiel、Imageview三个控件
- iOS中图片的缩放
- iOS MVC开发模式的优缺点
- 我的iOS学习历程 - 第十天