tag 标签: agps

相关博文
  • 热度 34
    2015-12-2 15:17
    7089 次阅读|
    7 个评论
    安卓手机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 RD : 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 RD : 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 RD : 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 RD : This will not be injected to MODEM     附GPS测试软件APP APK文件WINRAR的CRC32值是A3692433