使用百度定位API的时候,由于基站定位和wifi是什么定位偏差过大,我想只用GPS去定位,怎么设置仅使用GPS,放弃wifi是什么等

手机的 LBS 应用是如何通过 WIFI 和基站对手机定位的?
基于无线网络可以通过基站反插位置,这点容易理解其原理,但问题是各个应用怎么才能掌握基站数据信息,或者进行实时调用呢?基于WIFI的定位我百思不得其解,请专家赐教,感谢。
按投票排序
//注:此答案略偏学术定位理论的核心思想:一个特征如果具有空间上的不变性,那么就可以通过它的特征来反算到该特征的空间位置。 在目前的情况下,具有这种空间位置不变性,且容易被移动设备获取的特征,主要就是两类:1.
移动通讯网络的基站信息2.
无线局域网的接入点信息因此,当移动设备捕获到的基站信息和WLAN AP 信息与之前曾经捕获到的信息一致时,就可以认为用户应该基本上是处于同一个位置。 如果把一个地点能够探测到的基站信息和WLAN AP信息统称为该地的电磁频谱特征,而之前又在数据库中记录了电磁频谱特征和坐标的关联关系,那么,所谓的定位,其实就是根据电磁频谱特征查找空间坐标的过程。以上是从理论角度分析基站和WIFI定位的基本原理,从实用的角度(程序开发人员视角)来看,我们所需要的就是可以通过服务提供商所提供的定位接口,通过向其发送相关的电磁频谱特征,来获取其数据库中所记录的对应特征的空间位置,而无需关心其背后的算法细节。关于目前常用的定位服务API,包括:1. 谷歌的定位服务API, 行业标杆2. 百度的定位服务API,在国内的定位精度不逊于Google,且目前完全免费3. 驴博士的定位服务API,不甚了解利益相关说明:本人与百度之间存在雇佣关系
1、基站数据是采集来的,或者在黑市上买来的;Wi-Fi 大都是采集来的; 2、Wi-Fi 有 MAC 地址和 SSID,原理和 Cell-ID 一样;3、有些公司只提供 SDK 让第三方开发者不用关心其定位算法,有些公司连 Servers API 也开放。
室外的定位分为GPS定位和无星定位。无星定位目前来说主要依赖于Wifi和基站。由于WiFi的高密度和远小于基站的信号半径,使得目前WiFi定位是无线定位的主要手段。各家通过采集或是买卖来获取有GPS点的WiFi位置,然后通过迭代来得到AP的对应经纬度和周边的一些概率。所谓迭代,就是不断通过大数据来保证wifi和基站的位置准确。迭代思路:每台手机在某个位置时都会对应一个GPS点-1or多基站信息-多个Wi-Fi信息,如此这般,地图供应商通过大量的采集用户的这类信息,就生成了map。key是wifi或基站的mac地址,value是对应的全部gps点,然后通过对gps点的筛选,聚类,计算,就可以最大程度无限精确的推算出该wifi或基站的准确位置。(我们快递员到处送货顺便到处给他们采集着这类信息~)定位的时候,通过匹配AP的BSSID来获得对应的经纬度,和周边信息。这样通过一组AP和基站,以及周围的辅助,利用概率和距离法来计算出当前的定位结果,再利用辅助信息or上下文来对结果进行置信度评测,最终反馈用户一个最好的定位结果。定位算法还有一种是指纹法,通过欧氏距离的变种算法来确定位置。目前一些室内定位技术采用这种确定行算法和辅助地磁,PDR来得到室内位置。
总的来说就两条路:一、三角定位二、指纹
WIFI定位不完全是根据IP信息和地理坐标对应关系来定位的。更准确点讲是WIFI设备的MAC地址等更加固定的信息,与之相对应的地理坐标信息,来给WIFI下其他设备统一定位的。这也是为什么家里无线上网的台式机也可以惊奇的发现被定位的原因,至于WIFI设备为什么被定位到了某个精度非常高的地点,这又是一个大问题,我懂的不多,把看到的大致说一下,不对的地方请指正。首先WIFI设备如果是路由器,那么肯定路由器没有GPS来提供地理坐标(经纬度)信息,但如果你曾经用带有GPS模块的手机连接此路由器,而且刚好还开着GPS的话,那么Google(或其他商家)就可以连同你的经纬度和路由器MAC一起上传云端数据库,那么下次即便你不开GPS,一样可以定位你。另,如果有其他人开着GPS路过你的无线路由器附近,虽然有密码保护的情况,但依然可以获取MAC信息(此处需要指正,个人猜测),于是,再次被上传。基于一个相对固定位置的设备的固定MAC值,就有了一个对应关系的数据库,下次你连这个设备,就有了你的坐标?神奇的背后依然是大数据的支撑。
基站信息,最准确最新的数据肯定是在运营商手里,不过应该有一些流传在外或者公开的数据库,那么多作LBS的不是都有运营商后台支撑手机设备会记录你目前的基站信息,应用读取这个信息给服务器,服务器跟自己数据库的数据比对一下就可以给你一个大概的地址了WIFI这个目前只知道google maps是有用wifi辅助定位的,应该是收集了大量的数据,个人感觉原理跟基站类似,可能是根据ip以及接入网络路由器设备的mac地址来确认位置的GPS不用说了……最准的就是这个了
前面的各位大牛门都说的那么复杂。小弟我才疏学浅,最近天天在网上找免费的基站定位接口,可惜没找到。百度倒是说自己是免费的,但是只提供安卓和ios的api。是为了布局自己的移动端竞争力。如果真是免费的,为什么不开放一个http的查询服务接口呢?好了,下面来说说我对楼主问题的解答。基站定位最重要的是,当你手机的通讯模块拨上号以后。通过模块的at命令就能获取到lac 和cellid码,这两个码有什么用呢。这两个码就是你目前连上的那个基站的唯一标识号,移动联通这些服务商在建设这些基站的时候应该会记录下来这些基站的gps位置信息。所以只要你手机拨上号了获得到lac 和cellid 就能在数据库里查询到对应的gps位置信息。就是你附近那个基站的位置。再来说wifi定位,我本人呢有个ipod touch5 ,是不带gps定位的。但是有一天我发现我的百度离线地图竟然可以定位,我就觉得很神奇。这几天我查看那些wifi定位接口的时候,发现需要发送的数据里面都有wifi设备的mac地址,于是一切都豁然开朗了。举个例子,苹果的手机在打开定位的情况下检测到附近的wifi设备,mac地址都是可以被获取到的,然后直接把这些mac地址对应当时的gps位置信息记录下来保存在数据库里,就形成了wifi‘定位。再说算法优化,当那些通信巨头,移动,联通,电信,百度,谷歌,苹果之类的,他们之间很可能存在一些数据上的共享,这样就形成了一个巨大的数据库。这样当你进行基站定位的时候如果同时也打开了wifi,就可以查询到很多你附近的gps位置信息,再通过一定的算法,把这些gps信息处理下,就可以精确的定位你的位置了。当然我国好像是规定不允许精确定位手机位置的。这就是我对基站定位和wif定位技术的看法,很多技术看起来很牛叉其实本质并没有什么特别难以理解的地方。
原理其实很简单,手机的wifi芯片会扫描周围wifi路由器的mac和信号强度,这些信息都是公开的,然后通过internet网络传输到后台服务器,业界著名的人身安全产品SmartUFO也是这个原理,在后台服务器上有这些wifi路由器的实际经纬度位置信息,再根据信号强度推算出手机/SmartUFO的实际地理位置,一般误差在20米到一百米左右,在地图上的显示当然就非常精确了,欢迎访问了解更多
看到蔡神的形式化描述,这里结合工程实践完善一下这个问题。主要以WiFi为例,基站虽存在可解释性编码,但施用原理相似。问题定义:输入-手机WiFi芯片所能搜索到的WiFi列表(MAC地址及信号强度)输出-经纬度坐标原理:Theoretically,只要手机所处环境WiFi足够密集,在任意一个不同的地点,它所能搜索到的上述WiFi列表都是完全不一样的,这样我们实际上可以建立一种“WiFi列表~位置”的一一对应关系。WiFi list 1 - latitude,longitude 1WiFi list 2 - latitude,longitude 2...WiFi list n - latitude,longitude n这样,只要我们采集并存储了所有位置的WiFi列表,当一个未知位置的WiFi列表来请求定位服务时,WiFi list x - ?, ?我们直接去查询这个WiFi列表所对应的位置就可以了。工程化:实际工程化的时候当然不会那么理想,可能面临信号强度扰动大;手机芯片不稳定;存储代价;稀疏区域;WiFi动态变化及更新;等问题工程上一般也并不会直接存储上文中提到的WiFi列表,往往会对上述对应关系做处理。传统上较流行的方法是三角定位,即先确定每个WiFi热点位置,再通过相对关系定位。(这种方法目前仍用于室内定位)之后兴起的是指纹定位,即将空间预先划分为网格,在每个网格中建立WiFi指纹(表征WiFi列表联合分布的数据结构),将query映射到相应网格中。篇幅所限,下面两点改进不展开算法改进:相似性测度平滑CVboosting工程改进:传感器辅助判断分场景降级定位数据来源:各家在提供定位服务的同时,也会不停的采集WiFi列表,如果手机的GPS也处于打开状态,便同时采集GPS返回的坐标,这样便有了原理中提到的对应关系数据。路测结果:滴滴定位项目启动半年时在真实环境中测试各地图产品定位服务效果,利用GPS&人工标注作为真值,测试定位误差中位数(20-30m)及80%(30-60m),90%分位数(45-70m)。在不同场景区域,结果有较大差别,但总体而言表现从好到差为百度&高德&滴滴&腾讯极端场景下,百度定位中位数误差已经接近理论极限10m,非常厉害苹果系统自带定位服务没有同时进行评估,但从badcase反馈情况来看,大约介于滴滴和腾讯之间利益相关说明本人负责滴滴定位项目附一张采集覆盖示意图
内网的一篇文章很好的解答了这个问题 ,作者:张传明 一个功能正常的手机,总是能够受到各种无线信号,这些无线信号的“局部唯一性”,是该设备能定位的关键前提。什么叫局部唯一性?我们再把这些具体的信号来展开解释下你就知道了:基站信号:基站信号:一个手机能够接打电话、收发短信,说明该手机能与附近基站发起交互,收发信号。特别地,对于智能手机,还可以通过系统的接口得到基站ID。正常情况下,每个基站ID是全球唯一的,这样如果扫到了某个基站ID,我们又知道该基站的位置,便能粗略估计设备的位置。做出这个推测的前提就是一个基站的信号发射范围是有限的,正常的手机,不可能在相距这个基站很远的时候,还收到这个基站的信号。在无线通信相关的教科书里,讲到基站定位,总是会谈到三角定位,也就是下图描述的原理。下图是很容易理解的,一个手机能扫描到三个基站的信号,因此其必然在三个基站的共同覆盖范围内,从而推算的范围就大大缩小。但现实是很骨感的,在现在的智能手机上,只有极少数的手机可以获取到多个周围的基站ID,而且也无法反算出和这些基站的距离,所以这个算法除非电信运营商自己可以试试,对于别人是没有实战价值的。在实战中,只能是退而求其次,基于单个基站来定位。WIFI信号:WIFI信号:现在的智能手机都支持wifi上网了,而我们连接的每个wifi路由器(包括手机做移动热点的那种),都有全球唯一的MAC地址。更重要的是,wifi路由器的部署成本低,因而非常普遍,在一个楼层里就会有很多个wifi热点。因而不难想到,一旦我们有了这个全球每个路由器的实际位置,那么我们就可以基于用户手机扫描到的周围wifi热点,确定用户当前的位置。说到这里,有的朋友会问,如果一个人带着手机,开着移动热点到处行走,还有那种地铁、高铁、公交车上的移动wifi,岂不是就会引起定位的错误?答对了,确实是这样,而且根据统计,这种情形还在愈演愈烈。因此,如何想办法来迅速过滤这种移动热点,是个值得研究的问题。GPS信号:如果手机在室外或者窗边,那么就可以接收到天上的定位卫星发射出来的信号,基于这种信号,可以推算手机到每颗卫星的距离、卫星位置,进而推算出手机的位置来。需要注意的是,这个解算是在GPS芯片中完成的,在手机操作系统层面上,可以直接通过API接口得到解算的结果和误差半径。对于GPS的原因我们不多解释,但在调用时要注意两点。第一就是GPS的初始定位是很耗时间的,对于老一些的芯片,可能要耗费几分钟才能冷启动定位成功;第二是GPS精度并非是完全可依赖的,在一些地方达到几百米都有可能。其他以上三种是最常用的定位方式,此外还有蓝牙/IP /地磁场等手段,对于他们的优缺点,我们汇总如下:开发者如何实现定位能力千千万万的app难道者都如上述说的,“自行维护基站、WIFI数据库”吗?答案当然是否定的,在实际的工程实践中,主流的做法是两种:手段之一:调用系统级定位能力无论哪个系统(IOS、安卓、WP)都提供了一套系统级定位能力,这样的定位能力,对应着是一套系统级API,这个API一般来说,总是会有如下几个精度的选项:高精度:能搜到GPS卫星,则使用GPS定位,否则,则使用WIFI定位,如果WIFI和GPS都无法定位成功,只能根据基站来给出定位结果了。平衡功耗:禁用GPS(因为它非常耗电),优先使用WIFI,如果WIFI不可用,则用基站来进行定位。低功耗(被动定位):根据不同系统的规定,实现方式也不同,但大体上都是共享其他app的定位结果,即其他app以高精度、平衡功耗的方式得到位置,那么这个位置也一并推送给当前使用“低功耗定位”的app,也就是该app不消耗额外的能耗,就完成了定位。当然,这种系统级定位能力是有着软肋的,软肋在于以下两点:在基站、WIFI定位能力上,系统定位能力取决于系统自己在这方面投入数据收集推算的能力,这个是参差不齐的。举个简单的例子,百度和高德在中国采集了成百上千个公共场所的室内定位信息,使之能达到米级的室内定位,苹果做了吗?谷歌做了吗?微软做了吗?他们怎么和国内的服务商拼效果?居然还有人说苹果定位和谷歌地图在国内定位准,我真是醉了。在中国,google的服务不可用,考虑到基站、WIFI定位必须连接服务端发请求,因而Android的系统级定位能力的可用性也会有很大的影响,至少那些“水货”手机,在中国基本就没法调用系统定位服务了,而行货手机,相应的厂商会改造这个API接口的实现,使得其重定向为请求国内某些定位服务商,从而使得这个接口重新变得可用(对开发者来说,他并不需要知道这个API是如何实现的)。但是,我们不得不承认,在IOS和WP系统上,因为OS没有开放出读取基站和WIFI的接口,因此实际上操作系统的定位能力已经形成了垄断,开发者也就无法实现自主的定位能力。这也会导致在苹果和WP手机上,所有的app在同一时刻的定位误差,都是一样的。手段之二:调用第三方定位SDK对于可以公开读取基站、WIFI信息的Android手机系统,国内的百度、高德等地图厂商自行实现了定位SDK,该定位SDK的作用就是通过系统接口读取到原始定位信息,然后借助于各家自行部署维护的数据库,查询到当前扫描到的基站、WIFI的位置,最终计算出更准确的定位结果,通过SDK的接口,返回给开发者。这么做的好处,在于能够让app的定位能力脱离对手机系统的依赖。举个例子,一个app他如果只是调用系统定位接口,那么在行货手机,由于手机厂商已经把定位的网络服务器重定向为国内定位服务商,所以肯定可以定位,但是在水货手机上因为系统底层是直接连google服务器的,就会无法定位。但用户就是上帝,出现了这个事情在用户看来,就是不能接受的,为了保证app在所有手机上都可以定位,开发者就会不得不使用第三方的独立定位SDK。
如果是用于开发的话,现在有专门的数据接口公司,可以用这些数据,很方便。我们用过好服务的数据,总体比较划算。
已有帐号?
无法登录?
社交帐号登录后使用快捷导航没有帐号?
暂时没有人问过相似的问题,你可以做第一个提问题的人
查看: 6579|回复: 7
定位位置有时候会偏移到以前的点去
我现在使用的定位版本是4.0
现在我的APP里面有一个定时定位的功能,通过轨迹我们发现,定时定位获取的点,有时候会偏移的前面的点去:
发生偏移的时候,应该是在有wifi信号,但是不能连接到wifi网络的时候,下面是一段错误的logcat日志:
D 4-16 9:25.8
[BaiduHandler:MyLocationListenner] 31..506299 time: 09:25:09
D 4-16 9:25.8
[LocationHelper:onLocationChanged] 31..506299 baidu
D 4-16 9:25.8
[LocationManager:onLocationChanged] 31..506299
D 4-16 9:25.15
[LocationHelper:onLocationChanged] 31.33 121.35 gps
I 4-16 9:25.15
[LocationHelper] Discard network and gps location
D 4-16 9:25.16
[LocationHelper:onLocationChanged] 31.66 121.66 gps
I 4-16 9:25.16
[LocationHelper] Discard network and gps location
D 4-16 9:25.17
[LocationHelper:onLocationChanged] 31.663 121.34 gps
I 4-16 9:25.17
[LocationHelper] Discard network and gps location
D 4-16 9:25.18
[LocationHelper:onLocationChanged] 31..32 gps
第一个位置点是从百度的定位API中获取的点, 后面有GPS的点是通过gps获取的,可以发现 这两个点相差7秒中,但是偏差了很大
不知道有没有办法解决
& & 如果是刚启动gps,有可能会存在gps定位不准的问题,如果在手机上打开gps的状态下,定位sdk会使用gps的结果,如果没打开gps会使用wifi或基站定位结果,精度肯定会不如gps,可以设置一下定位频率
谢谢您的回复:
我是开车测试的点,所以GPS点肯定能获取到的。
但是我感觉百度获取的点 是获取手机wifi保存过的wifi信息里面的点
经常有这样的情况,就是我开车开了30分钟,刚开始2个点位置是好的,
但是第三个点的位置 又回到我出发时候的点了(比如说我家或者我公司)
Android定位API里面有没有重新扫描wifi的方法?
& &不会获取旧的点的,也是从android接口层获取新的点,至于为什么会有这种效果,我估计是这样,当开车开到某一个位置时候,那个地方没有wifi了,但是因为基站的面积是比较大的,还没有切换基站,所以定位sdk只能走基站定位了,基站定位就会很大,可能大于500m了,你可以记录一下这段路径上的定位半径,应该能发现问题
非常感谢。
现在如果是错误的点,偏移直线距离有10公里以上;而且每次错误的点,都是我家或者公司的点。这两个地方都是保存过原来WIFI地址的。
而且我还打印了log,发现错误点的地方,WIFI信号都是有的:
D 4-16 19:19.46
[MRM] scan result 0 capabilities is [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]
D 4-16 19:19.46
[MRM] scan result 0 BSSID is 08:10:76:e7:74:bf
D 4-16 19:19.46
[MRM] scan result 0 frequency is 2442
D 4-16 19:19.46
[MRM] scan result 0 SSID is Netcore_2_4G
D 4-16 19:19.46
[MRM] scan result 0 toString is SSID: Netcore_2_4G, BSSID: 08:10:76:e7:74:bf, capabilities: [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS], level: -81, frequency: 2442
D 4-16 19:19.46
[MRM] scan result 1 capabilities is [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]
D 4-16 19:19.46
[MRM] scan result 1 BSSID is ec:17:2f:6d:98:5c
D 4-16 19:19.46
[MRM] scan result 1 frequency is 2437
D 4-16 19:19.46
[MRM] scan result 1 SSID is TP-LINK_CHC
D 4-16 19:19.46
[MRM] scan result 1 toString is SSID: TP-LINK_CHC, BSSID: ec:17:2f:6d:98:5c, capabilities: [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS], level: -85, frequency: 2437
我现在定时定位的方法是每10分钟定位一次,然后每次定位的时候开GPS,每次提交定位结果之后就关闭GPS。所以我采用了您说的方法,在提交位置之前,我就多获取了几次GPS位置,不是取刚打开GPS第一次获取的那个点,但是发现还是会有同样的问题。
不一定第一次打开GPS获取的点有问题,之后获取的点也有可能有问题。
不知道我有没有解释清楚?
令: 我的qq&&
如果您有时间可以帮忙分析一下 我将非常感谢
& &已申请qq加好友了
楼主,这个问题怎么解决了啊?同求答案。
Powered by

我要回帖

更多关于 wifi是什么 的文章

 

随机推荐