一、iOS自带定位
1、SignInSignOutViewController.h
@interface SignInSignOutViewController : UIViewController<CLLocationManagerDelegate>{ CLLocationManager *_locationManager; // 纬度 float _latitude; // 经度 float _longitude; } @property (nonatomic,retain) CLLocationManager *locationManager; @property (nonatomic) float latitude; @property (nonatomic) float longitude; @end
2、SignInSignOutViewController.m
#import "SignInSignOutViewController.h" @interface SignInSignOutViewController () @end @implementation SignInSignOutViewController @synthesize locationManager = _locationManager; @synthesize latitude = _latitude; @synthesize longitude = _longitude; -(void)dealloc{ self.locationManager = nil; [super dealloc]; } - (void)viewDidUnload { [super viewDidUnload]; self.locationManager = nil; } - (void)viewDidLoad { [super viewDidLoad]; // 实例化一个位置管理器 CLLocationManager *cllocationManager = [[CLLocationManager alloc] init]; self.locationManager = cllocationManager; [cllocationManager release]; self.locationManager.delegate = self; self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; [self.locationManager startUpdatingLocation]; if(![CLLocationManager locationServicesEnabled]){ [GlobalApplication Alert:@"提示":@"请开启定位:设置 > 隐私 > 位置 > 定位服务"]; }else{ if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorized) { [GlobalApplication Alert:@"提示":@"定位失败,请开启定位:设置 > 隐私 > 位置 > 定位服务 下 XX应用"]; } } } #pragma mark - CLLocationManagerDelegate #pragma mark - CLLocationManagerDelegate // 地理位置发生改变时触发 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { CLLocationCoordinate2D cc,cc2; // 获取经纬度 cc.longitude = newLocation.coordinate.longitude; cc.latitude = newLocation.coordinate.latitude; // ios坐标(google)转换为 百度坐标 cc2 = BMKCoorDictionaryDecode(BMKBaiduCoorForWgs84(cc)); self.longitude = cc2.longitude; self.latitude = cc2.latitude; // 停止位置更新 [manager stopUpdatingLocation]; } // 定位失误时触发 - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSString *errorString; [manager stopUpdatingLocation]; switch([error code]) { case kCLErrorDenied: errorString = @"定位失败,请开启定位:设置 > 隐私 > 位置 > 定位服务 下 XX应用"; //errorString = @"Access to Location Services denied by user"; break; case kCLErrorLocationUnknown: errorString = @"定位失败,位置数据不可用"; break; default: errorString = @"定位失败,未知错误"; break; } [GlobalApplication Alert:@"定位":errorString]; }
二、百度地图定位(版本2.1)
1、MainMenuViewController.h
@interface MainMenuViewController : UIViewController<BMKUserLocationDelegate> { BMKUserLocation *_mapLocation; // 纬度 float _latitude; // 经度 float _longitude; } @property (nonatomic, retain) BMKUserLocation *mapLocation; @property (nonatomic) float latitude; @property (nonatomic) float longitude; @end
2、MainMenuViewController.m
#import "MainMenuViewController.h" @interface MainMenuViewController () @end @implementation MainMenuViewController @synthesize mapLocation = _mapLocation; @synthesize latitude = _latitude; @synthesize longitude = _longitude; -(void)dealloc{ self.mapLocation = nil; [super dealloc]; } - (void)viewDidUnload { [super viewDidUnload]; self.mapLocation = nil; } - (void)viewDidLoad { [super viewDidLoad]; BMKUserLocation *bmkLocation = [[BMKUserLocation alloc] init]; bmkLocation.delegate = self; self.mapLocation = bmkLocation; [bmkLocation release]; [self.mapLocation startUserLocationService]; } #pragma mark - baidu map /** *调用startUserLocationService定位成功后,会调用此函数 *@param userLoc 我的位置坐标 */ - (void)viewDidGetLocatingUser:(CLLocationCoordinate2D)userLoc{ if (userLoc.longitude != 0 && userLoc.latitude != 0 ) { self.longitude = userLoc.longitude; self.latitude = userLoc.latitude; [self.mapLocation stopUserLocationService]; } }
三、结果
方法一:
iOS:xxx.151604,xx.170156(iOS采集的坐标)
baidu:xxx.162720,xx.174000 (百度转换的坐标)
方法二:
baidu:xxx.162716,xx.173980 (百度采集的坐标)
iOS:xxx.151604,xx.170156(iOS采集的坐标)
baidu:xxx.162720,xx.174000 (百度转换的坐标)
方法二:
baidu:xxx.162716,xx.173980 (百度采集的坐标)