由於系統原因,iOS不允許使用第三方定位,因此地圖SDK中的定位方法,本質上是對原生定位的二次封裝。通過封裝,開發人員可更便捷的使用。此外,地圖SDK中還提供了相應的定位元影像層(支援定位三態效果),協助開發人員顯示當前位置資訊。
註:自iOS8起,系統定位功能進行了升級,SDK為了實現最新的適配,自v2.5.0起也做了相應的修改,開發人員在使用定位功能之前,需要在info.plist裡添加(以下二選一,兩個都添加預設使用NSLocationWhenInUseUsageDescription):
NSLocationWhenInUseUsageDescription ,允許在前台使用時擷取GPS的描述
NSLocationAlwaysUsageDescription ,允許永久使用GPS的描述
定位功能可以和地圖功能分離使用,單獨的定位功能使用方式如下:
首先添加SDK到工程中... ...
添加標頭檔 #import <BaiduMapAPI_Location/BMKLocationService.h>
添加代理 BMKLocationServiceDelegate
-(void)viewDidLoad
{
//初始化BMKLocationService
_locService = [[BMKLocationService alloc]init];
_locService.delegate = self;
//啟動LocationService
[_locService startUserLocationService];
}
//實現相關delegate 處理位置資訊更新
//處理位置座標更新(秒更新,如果只是需要擷取一次,在定位成功後停止定位或把delegate設定成nil)
//停止定位命令如下([self.locService stopUserLocationService];)
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
//NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
}
//如果只需要擷取當前的經緯度 那麼下面2條命令可忽略
//處理方向變更資訊
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation
{
//NSLog(@"heading is %@",userLocation.heading);
}
展示定位資訊的功能位於“地圖和覆蓋物”這個功能模組,在使用時要注意選擇。核心代碼如下:
//以下_mapView為BMKMapView對象
_mapView.showsUserLocation = YES;//顯示定位元影像層
[_mapView updateLocationData:userLocation];