坐標體系
- WGS84: 大地坐標系,廣泛使用的 GPS 定位系統采用的坐標系.
- GCJ02: 火星坐標系,由中國測繪局對 WGS84進行加密后得到的坐標系.
- BD09: 百度坐標,針對火星坐標再次加密所得BD09II 位百度經緯度坐標, BD09mc 為百度墨卡托米制坐標
地圖 SDK 采用哪種坐標體系
百度地圖 SKD | 高德地圖 SKD | GPS 設備(蘋果,安卓手機) | |
---|---|---|---|
WGS84 | √ | ||
GCJ02 | √查看 | ||
BD09 | √查看 |
ios實現后臺定位
需求: 要求定時上傳用戶的經緯度,無論App 在前臺還是后臺.
-
準備工作
- info.plist 文件中添加必要字段
-
NSLocationUsageDescription已經用不到了 - NSLocationWhenInUseUsageDescription(簡單的前臺定位)
- NSLocationAlwaysUsageDescription(后臺定位,要適配 iOS10之前的版本這個也要添加上)
- NSLocationAlwaysAndWhenInUseUsageDescription(后臺定位iOS10及以后)
-
- 開啟后臺定位開關
- TARGETS -->Capbilities -->Background Modes打開
- 選中Location updates
- info.plist 文件中添加必要字段
-
編寫代碼參考官方
-
創建定位管理者
- (CLLocationManager *)locationManager { if (_locationManager == nil) { _locationManager = [[CLLocationManager alloc]init]; _locationManager.delegate = self; _locationManager.distanceFilter = kCLDistanceFilterNone; _locationManager.allowsBackgroundLocationUpdates = YES; _locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; } return _locationManager; }
-
請求授權,并開始定位
- (void)startUpdateLocation { //請求后臺定位授權 [self.locationManager requestAlwaysAuthorization]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self.locationManager startUpdatingLocation]; }); }
-
踩坑
-
授權后臺定位彈窗
Simulator Screen Shot - iPhone X - 2018-01-05 at 15.51.31.png-
解決辦法
- requestAlwaysAuthorization之后過幾秒鐘后執行 startUpdatingLocation方法.
-
踩到這個坑的原因.
- 不知道 info.plist 文件中的幾個 key 的含義
- 不知道這個方法的含義requestAlwaysAuthorization 請求后臺定位授權
- 不知道這個方法的含義requestWhenInUseAuthorization 請求前臺定位授權
- 請求后臺定位授權后,立即執行startUpdatingLocation,僅僅彈出前臺授權的彈窗(這個坑找了好久好久).
-
-
藍條出現的情況
- 在執行后臺定位,但是后臺定位權限就會出現藍條
- 查看 APP 當前定位權限的方法
- 設置 -->隱私 -->定位服務 -->查看自己的 APP 的授權
- 執行的代碼大于當前的授權的時就會出現藍條
-
崩潰發生在 startUpdateLocation
- TARGETS -->Capbilities -->Background Modes關閉再打開一次
坐標體系轉換