标签:
一.定位.
1.定位功能 : 定位是一个很常用的功能,如一些地图软件打开之后如果用户允许软件定位的话,那么打开软件后就会自动锁定到当前位置,如果用户手机移动那么当前位置也会跟随着变化。要实现这个功能需要使用Core Loaction中CLLocationManager类.
相关方法:(在前面的方法和属性属于较为常用和重要的)
示例代码:
//地理定位-----------------------------------------------
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//创建定位管理对象
self.loactionMag = [[CLLocationManager alloc] init];
//CLLocationManager通过代理来实现
//开始定位
self.loactionMag.delegate = self;
//向系统申请定位权限 定位服务授权状态 返回值为枚举值
//总是开启定位权限功能
[_loactionMag requestAlwaysAuthorization];
//当使用次应用中允许访问定位服务
// [_loactionMag requestWhenInUseAuthorization];
//开始更新位置
[_loactionMag startUpdatingLocation];
}
#pragma mark ---实现相应的代理方法
//位置发生变化后执行(第一次定位到某个位置直管厚也会执行)
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
{
//打印经纬度
CLLocation *location = locations[0];
NSLog(@"纬度----%f,经度---+%f",location.coordinate.latitude ,location.coordinate.longitude);
//为了省电,定位完毕关闭
//如果不需要实时定位,使用及时使关闭定位服务
[_loactionMag stopUpdatingLocation];
}
2.地理(反)编码
除了提供位置跟踪功能之外,在定位服务中还包含CLGeocoder类用于处理地理编码和逆地理编码(又叫反地理编码)功能。
地理编码:根据给定的位置(通常是地名)确定地理坐标(经、纬度)。
逆地理编码:可以根据地理坐标(经、纬度)确定位置信息(街道、门牌等)。
CLGeocoder最主要的两个方法就是
- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler; (分别用于地理编码)
- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;,(分别用于反地理编码)
示例代码:
//地理(反)编码----------------------------------------------------
#pragma mark ---地理编码 即根据地名确定地理坐标
- (IBAction)geoCode:(UIButton *)sender {
//进行地理编码的代理方法
[self.geocoder geocodeAddressString:self.adddressField.text completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
self.detailAddressLabel.text = @"查找地点不存在";
} else{
//打印出CLPlacemark中的内容
// CLPlacemark *pl = placemarks[0];
// NSDictionary *dic = pl.addressDictionary;
// NSLog(@"%@",dic[@"city"]);
//CLPlacemark 这个数组中存放的是CLPlacemark对象(位置对象,属性 ,name)
CLPlacemark *place = placemarks[0];
//设置地理纬度位置
self.latitude.text = [NSString stringWithFormat:@"%lf",place.location.coordinate.latitude];
//设置地理经度位置
self.longtitude.text = [NSString stringWithFormat:@"%lf",place.location.coordinate.longitude];
//设置地址详情
self.detailAddressLabel.text = place.name;
}
}];
}
#pragma mark ---地理反编码 即根据坐标取得地名
- (IBAction)reverseGeocode:(UIButton *)sender {
//反地理编码
//创建一个<#(CLLocation *)#>对象
//输入的纬度
CLLocationDegrees latitude = [self.latitudeTextField.text doubleValue];
//输入的经度
CLLocationDegrees longtitude = [self.longtitudeTextField.text doubleValue];
//获取输入的经纬度地理位置
CLLocation *loc = [[CLLocation alloc] initWithLatitude:latitude longitude:longtitude];
//用代理方法进行地理反编码
[self.geocoder reverseGeocodeLocation:loc completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
self.reverseDetailAddressLable.text = @"未获取到指定位置";
}else{
//取出数组中第一个对象
CLPlacemark *placem = placemarks[0];
//设置详细地址
self.reverseDetailAddressLable.text = placem.name;
}
}];
二.地图
标签:
原文地址:http://www.cnblogs.com/erdeng/p/4898870.html