一、GPS信號
1. GPS信號包含主要三個組成部分:
1)載波:L1和L2頻段
2)測距碼(Ranging Code): 用來測量衛星和接收器之間距離的一種信號。
GPS有C/A碼和P碼兩種測距碼:
C/A碼(粗捕獲碼) 民
P碼(精捕獲碼) 軍
3)導航電文(Navigation Data,也叫D碼): 在定位計算時,除了測距碼外還需要衛星的一些信息,例如星歷、時間等。
2. GPS ——> 微波信號 ——> 穿透能力較差。
例如:
1)厚度為1cm的水體完全衰減GPS至無法使用;
2)幾cm后的木頭就可以完全遮蔽GPS信號;
3)玻璃塑料使GPS信號輕度衰減;
4)(含金屬塗層)金屬實體完全遮蔽GPS。
【特別注意】:
(測試GPS時需要注意)
1)室內無法進行GPS定位;
2)室外雲雨嚴重時會影響定位精度。
二、星歷與年歷
星歷: 得到衛星在天空中的位置軌道信息(精密軌道信息)。
年歷: (粗略軌道信息)。
【注意】: (1)在真實的位置計算中年歷是不起作用的。
(2)XTRA+年歷-------解析出-------->星歷(較為准確)。
三、GPS啟動方式
1)冷啟動——> 無星歷、年歷信息(如手機第一次啟動GPS);
2)溫啟動——> 含年歷,且無大距離移動時;
3)熱啟動——> 手機有星歷、年歷、以及上次定位信息等時。
四、A-GPS
通過無線通訊系統實現的A-GPS方案有兩種運營模式MSB和MSA。
判斷MSB和MSA定位的方法:
根據定位運算主體在哪一端【用戶設備終端 or 通訊網絡】?
1)MSB
手機承擔位置測量和計算工作;
基於用戶終端的A-GPS,用戶位置計算在用戶終端設備。
2)MSA
手機只承擔位置測量工作;
用戶終端輔助的A-GPS,用戶位置的計算在通訊網絡,最后發送到手機。
還有下面一種定位模式:
3)Standalone
Standalone模式不使用A-GPS。
五、GPS平台
主要有Qualcomm(高通)和Broadcom(博通)。
【注意】:輔助數據XTRA和LTO有效周期長達一周。
1)Qualcomm
XTRA:
"Extened Receiver Assistance" 的縮寫。
高通自己設計的一套輔助數據。加速定位。
是可以下發星歷信息的解決法案,類似AGPS。 都是輔助定位用的。
【注意】:XTRA+年歷-------解析出-------->星歷(較為准確)。
2)Broadcom
LTO:
"Long Term Orbit" 的縮寫.
自己設計的一套輔助數據。加速定位。
六、SUPL
谷歌服務器。
七、GPS分析
主要有五部分。
1)App層
在android原生系統上,沒有內置的定位app,只有Settings.
packages/apps/Settings/src/com/android/settings/location/
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/
Android平台中,GPS的開啟和關閉主要在Settings中。其模式有三種:
1.High accruacy 高精度
使用GPS,Networks,Wi-Fi和Bluetooth進行定位;
准確度最好,但比較費電
2.Battery saving
使用Wi-Fi, Bluetooth和Networks進行定位;
速度快,省電,但是精度較差。
3.Device only
只使用GPS進行定位。
當Location為“ON”,Mode為“High accruacy”或者“Device Only”時,settings數據庫location_providers_allowed字段將被修改為“network,gps”或者“gps”(修改字段的代碼在LocationSettings.java中)。
2)Framework
Client端
frameworks/base/location/java/android/location/
這里主要是API包,供App調用的。(LocationManager.java)
frameworks/base/location/java/com/android/internal/location/
這個目錄是 Framework 對 Location 服務的內部實現。
Service端
frameworks/base/services/core/java/com/android/server/LocationManagerService.java
frameworks/base/services/core/java/com/android/server/location/
3)HAL
一般GPS的修改都在gps.conf里做,其他都是源生,不需要修改。
路徑如下:
hardware/qcom/gps/etc/gps.conf
4)Modem(Kernel)
GPS的驅動接口有URAT、QMI等;
Linux底層驅動只需要有uart接口就可以接收到gps數據了,而android的hal層會調用linux內核層的uart驅動,所以,只要hal層打開串口,然后read就可以了。
而gps的標准數據格式為NMEA格式,有以下幾個類型。
1、GPS定位信息 GPGGA
2、當前衛星信息 GPGSA
3、可見衛星信息 GPGSV
4、推薦最小定位信息 GPRMC
5)固件Log