//添加包:CoreLocation.framework
//.plist文件: 请求获得应用一直使用定位服务授权,注意使用此方法前要在info.plist中配置 NSLocationAlwaysUsageDescription; 请求获得应用使用时的定位服务授权,注意使用此方法前在要在info.plist中配置 NSLocationWhenInUseUsageDescription,都设置为YES
手动输入
@property ( nonatomic , retain ) CLLocationManager *locationManager; // 地理编码 / 逆地理编码
@property ( nonatomic , retain ) CLGeocoder *geocoder;
- ( void )createLocationManager
{ self . locationManager = [[ CLLocationManager alloc ] init ]; self . geocoder = [[ CLGeocoder alloc ] init ]; if (![ CLLocationManager locationServicesEnabled ]) { NSLog ( @" 定位服务当前可能尚未打开 , 请设置打开 " ); return ; } // 如果没有授权则请求用户授权 if ([ CLLocationManager authorizationStatus ] == kCLAuthorizationStatusNotDetermined ) { [ self . locationManager requestWhenInUseAuthorization ]; } else if ([ CLLocationManager authorizationStatus ] == kCLAuthorizationStatusAuthorizedWhenInUse ) { // 设置代理 self . locationManager . delegate = self ; // 设置定位精度 self . locationManager . desiredAccuracy = kCLLocationAccuracyBest ; // 定位频率 , 每隔多少米定位一次 // CLLocationDistance distance = 1000.0;// 十米定位一次 self . locationManager . distanceFilter = kCLDistanceFilterNone ; // 启动跟踪定位 [ self . locationManager startUpdatingLocation ]; } } #pragma 跟踪定位代理方法 , 每次位置发生变化即执行 - ( void )locationManager:( CLLocationManager *)manager didUpdateLocations:( NSArray < CLLocation *> *)locations { CLLocation *location=[locations firstObject ]; // 取出第一个位置 CLLocationCoordinate2D coordinate=location. coordinate ; // 位置坐标
NSLog(@"经度:%f,纬度:%f,海拔:%f,航向:%f,行走速度:%f",coordinate.longitude,coordinate.latitude,location.altitude,location.course,location.speed);
[ self getAddressByLatitude:coordinate.latitude longitude:coordinate.longitude];
// 如果不需要实时定位,使用完即使关闭定位服务 [ _locationManager stopUpdatingLocation ];
}
// CLGeocoder类用于处理地理编码和逆地理编码(又叫反地理编码)功能.
地理编码:根据给定的位置(通常是地名)确定地理坐标(经、纬度)。
逆地理编码:可以根据地理坐标(经、纬度)确定位置信息(街道、门牌等
#pragma mark 根据坐标取得地名(逆地理编码)
-( void )getAddressByLatitude:( CLLocationDegrees )latitude longitude:( CLLocationDegrees )longitude{ // 反地理编码 CLLocation *location=[[ CLLocation alloc ] initWithLatitude :latitude longitude :longitude]; [ _geocoder reverseGeocodeLocation :location completionHandler :^( NSArray *placemarks, NSError *error) { CLPlacemark *placemark=[placemarks firstObject ];
NSLog(@"%@", placemark.name);//位置名
NSLog ( @"thoroughfare,%@" ,place. thoroughfare ); // 街道
NSLog ( @"subThoroughfare,%@" ,place. subThoroughfare ); // 子街道 NSLog ( @"locality,%@" ,place. locality ); // 市 NSLog ( @"subLocality,%@" ,place. subLocality ); // 区
NSLog(@"country,%@",place.country); // 国家
// 字典形式输出
// NSLog(@" 详细信息 :%@",placemark.addressDictionary);
}];
}
//