您的位置:首页 > 移动开发 > IOS开发

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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: