博客> 反地理编码,lbs定位
反地理编码,lbs定位
2017-08-17 10:35 评论:0 阅读:231 yutaotst
ios 定位 lbs 反地理编码

lbs反地理编码的使用

  • 下面还要实现CLLocationManagerDelegate
#import <UIKit>
#import <CoreLocation>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (nonatomic, assign) double longitude;//经度
@property (nonatomic, assign) double latitude;//纬度

@interface AppDelegate (){
    //定位
    CLLocationManager *_locationManager;//用于获取位置
    CLLocation *_checkLocation;//用于保存位置信息

}

-(void)initMapLatToLong{

    _latitude = LATITUDE_DEFAULT;
    _longitude = LONGITUDE_DEFAULT;
    _locationManager = [[CLLocationManager alloc] init];

    if ([CLLocationManager locationServicesEnabled]) {
        NSLog(@"开始定位");
        _locationManager.delegate = self;
        // distanceFilter是距离过滤器,为了减少对定位装置的轮询次数,位置的改变不会每次都去通知委托,而是在移动了足够的距离时才通知委托程序
        // 它的单位是米,这里设置为至少移动1000再通知委托处理更新;
        _locationManager.distanceFilter = 200.0;
        // kCLLocationAccuracyBest:设备使用电池供电时候最高的精度
        _locationManager.desiredAccuracy = kCLLocationAccuracyBest;

        //ios8+以上要授权,并且在plist文件中添加NSLocationWhenInUseUsageDescription,NSLocationAlwaysUsageDescription,值可以为空
        if (IOS8 >=8.0) {//ios8+,不加这个则不会弹框
            [_locationManager requestWhenInUseAuthorization];//使用中授权
            [_locationManager requestAlwaysAuthorization];
        }
        [_locationManager startUpdatingLocation];
    }else{
        NSLog(@"定位失败,请确定是否开启定位功能");
        //        _locationManager.delegate = self;
        //        // distanceFilter是距离过滤器,为了减少对定位装置的轮询次数,位置的改变不会每次都去通知委托,而是在移动了足够的距离时才通知委托程序
        //        // 它的单位是米,这里设置为至少移动1000再通知委托处理更新;
        //        _locationManager.distanceFilter = 200.0;
        //        // kCLLocationAccuracyBest:设备使用电池供电时候最高的精度
        //        _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        //        [_locationManager startUpdatingLocation];
    }

}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [self initMapLatToLong];
}

pragma mark - CLLocationManagerDelegate
//舍弃了
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
    NSLog(@"didUpdateToLocation----");
    _checkLocation = newLocation;
}

//ios 6.0sdk以上
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
    NSLog(@"didUpdateToLocation+++");
    //此处locations存储了持续更新的位置坐标值,取最后一个值为最新位置,如果不想让其持续更新位置,则在此方法中获取到一个值之后让locationManager stopUpdatingLocation
    CLLocation *cl = [locations lastObject];
    _latitude = cl.coordinate.latitude;
    _longitude = cl.coordinate.longitude;
    NSLog(@"纬度--%f",_latitude);
    NSLog(@"经度--%f",_longitude);
    // 获取当前所在的城市名
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    //根据经纬度反向地理编译出地址信息
    [geocoder reverseGeocodeLocation:cl completionHandler:^(NSArray *array, NSError *error){
        if (array.count > 0){
            CLPlacemark *placemark = [array objectAtIndex:0];
            //将获得的所有信息
           NSString *loction =  placemark.name;
           DDLogInfo(@"loction====%@",loction);
            //获取城市
            NSString *city = placemark.locality;
            if (!city) {
                //四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市)
                city = placemark.administrativeArea;
            }
            NSLog(@"city = %@", city);
           NSString *cityText = city;
//            [_cityButton setTitle:city forState:UIControlStateNormal];
            DDLogInfo(@"cityText======%@",cityText);
        }
        else if (error == nil && [array count] == 0)
        {
            NSLog(@"No results were returned.");
        }
        else if (error != nil)
        {
            NSLog(@"An error occurred = %@", error);
        }
    }];
    //系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新
     [manager stopUpdatingLocation];
}

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
    NSLog(@"定位失败");
}
收藏
1
sina weixin mail 回到顶部