安卓手机AGPS卫星定位困难的深入分析-洗洗睡吧(附软件APP)
wxleasyland@sina.com
2015.12
一、APGS的强大
最近做了一个测试安卓手机GPS的APP,结果有了意外发现。
三星新出的手机SM-J5008,刚打开GPS时(没定位成功),无论在室内还是室外,就马上能检测到20多颗星!
其中有很多颗卫星,手机中已经有它的历书和星历了!!!
而以前的所有手机,包括谷歌I9250、三星I9300、国产手机等,刚打开GPS时,均是0颗星:
没有任何卫星的星历,即使过了好几分钟,也是没有!
所以J5008的卫星定位速度非常快,实测在信号很差的地方打开GPS:
J5008:在1分钟内就能定位成功;
其它手机:半小时了,还是定位不上;
蓝牙GPS外置装置:约10分钟,定位成功;
这就是AGPS的强大吧!
但是,其实所有的手机都是支持AGPS的!那问题出在哪里呢?
二、修改gps.conf文件,SUPL位置服务器
把I9250和国产手机拿来做实验,按网上说的,修改etc/gps.conf文件。
原来文件中的内容是这样的:
XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin
XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin
XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin
SUPL_HOST=supl.google.com
SUPL_PORT=7276
加上一行NTP_SERVER=cn.pool.ntp.org
修改SUPL_HOST=suplcn.sirf.com
修改完gps.conf后,需要重启手机才能认新的设置!
两个手机修改后,发现仍然是和原来连星的速度差不多的,没有秒开。打开GPS,也仍是0颗星。
后来,又发现国产手机手机设置里,有增强GPS设置,SUPL服务器可选NOKIA、GOOGLE、CHINA MOBILE!但无论选哪个,均没有什么效果。
继续分析:
1. 电脑连接SUPL服务器
试着用电脑连接suplcn.sirf.com的端口7275或7276,都可以连得上,说明sirf服务器没问题。
试着连supl.google.com的7275或7276端口,均连接不上,说明google被墙了。
试着连supl.nokia.com的7275端口,可以连上,而7276端口连接不上。
2. suplcn.sirf.com服务器
7276或7275端口:手机直接上网,GPS开始运行时,用“终端模拟器”netstat看,发现有连接到suplcn.sirf.com的7276端口,是ESTABLISHED,但是很快就变成FIN_WAIT1,然后就没了。
3. supl.nokia.com服务器
手机直接上网,GPS开始运行时,用“终端模拟器”netstat看,连接到supl.nokia.com 的7275端口是SYN_SENT了一会,然后就没有了。
再次试验,则是马上CLOSE_WAIT,很快就没有了。
从上面的连接情况看,好像SUPL服务器连上后,就被踢出来了,没有正常通讯。
三、XTRA星历文件
从http://xtra1.gpsonextra.net/xtra.bin、xtra2或xtra3下载的xtra.bin文件,均是一样的,文件没有差异!!
约20分钟左右,xtra.bin文件就更新了,不一样了。
说明这个xtra.bin文件就是星历,记载了当前时间天空中各个卫星的所在位置和运行方向情况。
但这个文件的内容都是二进制的,格式不清楚。
四、分析和结论
其实,要实现快速定位,很简单,只需要知道当前位置的大概经纬度、当前天空中所有卫星的位置和运行方向(星历),就可以了!!
星历很容易下载!
那当前位置的大概经纬度,不是也很容易吗,我自己只需要得到手机基站的ID,再在基站定位网站上查一下,就得到了啊。
SUPL位置服务器应该就是做这个事的,把你的大概位置发给你,并且应该可以把你天空中的所有卫星的方向角、仰角等信息发给你,你就可以快速定位了。
但是,图样图森破。
我们自己可以下载星历,自已可以很容易根据基站ID反查到当前位置的大概经纬度,但是你自己没办法把这些数据写入到AGPS芯片中的,所以没有用的!
AGPS芯片是一个商业化的商品,别人家SUPL位置服务器凭什么免费给一个不认识的AGPS芯片服务?正如某网友说的,SUPL服务器不是你连接上,就能为你服务的!
AGPS芯片也不可能会拿基站ID到基站定位网站去查询当前位置,那基站定位网站也要向AGPS芯片厂商收费了。
唯一的指望是,有一个叫supl.google.com服务器,它应该是免费的,但是,google被墙掉了。好像记得以前我有用电脑连上过supl.google.com服务器的7276端口,但是现在已经连不上了。所以不知道它能不能有效果?
三星新推出的手机J5008能正常AGPS,可能是有交费过了。会不会过一段时间过期了,就不能用了,有这个可能。
所以,大家洗洗睡吧,靠修改SUPL服务器,一般是不能用的。不过试试也好,可能SUPL服务器良心发现了也不一定哦。
留着google的服务器也行,有时可能墙开了个洞也不一定哦。
以上为个人观点。
五、附J5008的gps.conf文件
这个文件太复杂了,而且奇怪的是SUPL_HOST居然被#注释掉了,不知道原理是什么。附上供大家分析:
#Uncommenting these urls would only enable
#the power up auto injection and force injection(test case).
XTRA_SERVER_1=http://xtrapath1.izatcloud.net/xtra3grc.bin
XTRA_SERVER_2=http://xtrapath2.izatcloud.net/xtra3grc.bin
XTRA_SERVER_3=http://xtrapath3.izatcloud.net/xtra3grc.bin
#Version check for XTRA
#DISABLE = 0
#AUTO = 1
#XTRA2 = 2
#XTRA3 = 3
XTRA_VERSION_CHECK=0
# Error Estimate
# _SET = 1
# _CLEAR = 0
ERR_ESTIMATE=0
#Test
NTP_SERVER=time.izatcloud.net
#Asia
# NTP_SERVER=asia.pool.ntp.org
#Europe
# NTP_SERVER=europe.pool.ntp.org
#North America
# NTP_SERVER=north-america.pool.ntp.org
# DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info
# 4 - Debug, 5 - Verbose
# If DEBUG_LEVEL is commented, Android's logging levels will be used
DEBUG_LEVEL = 4
# Intermediate position report, 1=enable, 0=disable
INTERMEDIATE_POS=0
# Below bit mask configures how GPS functionalities
# should be locked when user turns off GPS on Settings
# Set bit 0x1 if MO GPS functionalities are to be locked
# Set bit 0x2 if NI GPS functionalities are to be locked
# default - non is locked for backward compatibility
#GPS_LOCK = 0
# supl version 1.0
SUPL_VER=0x10000
# Emergency SUPL, 1=enable, 0=disable
SUPL_ES=0
# Sensor R&D : Non-SUPL ES should be default
#Choose PDN for Emergency SUPL
#1 - Use emergency PDN
#0 - Use regular SUPL PDN for Emergency SUPL
USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL=1
#SUPL_MODE is a bit mask set in config.xml per carrier by default.
#If it is uncommented here, this value will over write the value from
#config.xml.
#MSA=0X2
#MSB=0X1
SUPL_MODE=0x3
#Sensor R&D : Change default bit mask
# GPS Capabilities bit mask
# SCHEDULING = 0x01
# MSB = 0x02
# MSA = 0x04
# ON_DEMAND_TIME = 0x10
# GEOFENCE = 0x20
# default = ON_DEMAND_TIME | MSA | MSB | SCHEDULING | GEOFENCE
CAPABILITIES=0x37
# Accuracy threshold for intermediate positions
# less accurate positions are ignored, 0 for passing all positions
# ACCURACY_THRES=5000
################################
##### AGPS server settings #####
################################
# FOR SUPL SUPPORT, set the following
# SUPL_HOST=supl.host.com or IP
# SUPL_PORT=1234
# FOR C2K PDE SUPPORT, set the following
# C2K_HOST=c2k.pde.com or IP
# C2K_PORT=1234
# Bitmask of slots that are available
# for write/install to, where 1s indicate writable,
# and the default value is 0 where no slots
# are writable. For example, AGPS_CERT_WRITABLE_MASK
# of b1000001010 makes 3 slots available
# and the remaining 7 slots unwritable.
#AGPS_CERT_WRITABLE_MASK=0
####################################
# LTE Positioning Profile Settings
####################################
# 0: Enable RRLP on LTE(Default)
# 1: Enable LPP_User_Plane on LTE
# 2: Enable LPP_Control_Plane
# 3: Enable both LPP_User_Plane and LPP_Control_Plane
LPP_PROFILE = 0 # Sensor R&D : This will not be injected to MODEM
################################
# EXTRA SETTINGS
################################
# NMEA provider (1=Modem Processor, 0=Application Processor)
NMEA_PROVIDER=1
# Mark if it is a SGLTE target (1=SGLTE, 0=nonSGLTE)
SGLTE_TARGET=0
##################################################
# Select Positioning Protocol on A-GLONASS system
##################################################
# 0x1: RRC CPlane
# 0x2: RRLP UPlane
# 0x4: LLP Uplane
A_GLONASS_POS_PROTOCOL_SELECT = 0 #Sensor R&D : This will not be injected to MODEM
附GPS测试软件APP
APK文件WINRAR的CRC32值是A3692433
用户377235 2016-5-11 22:08
zhengzhirui 2016-1-4 09:38
用户377235 2015-12-12 23:43
xwh359_665698099 2015-12-6 14:22
用户1009923 2015-12-4 08:45
sunce_464022046 2015-12-3 13:11
carl_782646022 2015-12-3 11:02