iOS反地理编码,lbs定位

#import <UIKit/UIKit.h>

#import <CoreLocation/CoreLocation.h>

#import "MainTabBarViewController.h"

#define appDelegate ((AppDelegate *)[[UIApplication sharedApplication] delegate])

@interface AppDelegate : UIResponder <UIApplicationDelegate,UIActionSheetDelegate,CLLocationManagerDelegate>

@property (nonatomic, assign) double longitude;//经度

@property (nonatomic, assign) double latitude;//纬度

@property (strong, nonatomic) UIWindow *window;




#import "AppDelegate.h"


@interface AppDelegate (){

    //定位

    CLLocationManager *_locationManager;//用于获取位置

    CLLocation *_checkLocation;//用于保存位置信息


}


@end


@implementation AppDelegate


-(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文件中添加NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription,值可以为空

        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(@"定位失败");

}



    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值