分享

手机移动设备究竟是怎样只利用Wi-Fi来定位的?

 飞龙星空骑士 2018-03-12

        有人说是用类似的数据库建立的定位机制,可是刚安装的全新无线路由,如果是利用带GPS功能的手机来收集MAC地址和SSID,不可能立刻就被收集进数据库,但是同样能够得到较为精准的定位, 那究竟是怎么只利用Wi-Fi,不利用移动数据(GPRS数据)、GPS来定位的?


        原因很简单:


        Wi-Fi定位并不只是拿设备正在使用的Wi-Fi当定位依据,此时手机(或其他无线设备)会扫描周围所有的Wi-Fi信号,并把它们当作定位依据。


        Wi-Fi定位时,不需要手机(或其他无线设备)连接Wi-Fi。因为Wi-Fi定位的依据是Wi-Fi的BSSID和RSSI,这两个定为依据在Wi-Fi未被连接的情况下,也可以被手机等无线设备获取。

        以下是详细的Wi-Fi定位原理:


        Wi-Fi定位这事儿其实非常好理解。先打个比方,你现在突然出现在一片荒凉的大草原上,不知道自己身处何方,但神奇的是你身边居然立了大于等于3根的柱子,而且每根柱子上都应有该根柱子的精确坐标。你手里居然还有一把测距仪,能够知道你离柱子的准确距离,那么恭喜你,你现在就可以根据各种算法(三角定位算法、指纹定位算法、最大似然估算法等)算出自己所在位置的坐标。


        回到正题,在实际的Wi-Fi定位中,你眼前的每一根柱子其实就是一个 Wi-Fi热点(以下简称AP,Access Point),或者说路由器。每个AP都有它自己名字和它所在位置的坐标。但关键问题是,在Wi-Fi定位中,柱子的坐标从哪儿来?我怎么知道我离柱子的距离?就算距离和坐标我都知道,我又怎么能算出我的位置?


        这就得说说 Wi-Fi定位的三个步骤:

        第一步:数据采集与制备(采集柱子的名字、制备柱子的坐标)。

        第二步:确定移动设备与热点的距离(确定与柱子之间的距离)

        第三步:通过算法推断出移动设备的位置(通过柱子的坐标与我与柱子的距离,得到我的位置坐标)


        一、数据采集与制备:

        不管你的手机有没有连接 Wi-Fi,手机都会扫描附近存在的Wi-Fi信号,如果扫描出某个Wi-Fi信号,那么手机系统就可以知道发出WIF信号的AP 的BSSID(MAC 地址) ,也就是这个Wi-Fi在地球上唯一的名字。此刻如果你的手机还用 GPS 定上了位,那么在采集方的数据库里就会添加一条数据,【BSSID、(X1,Y1)】,其中(X1,Y1)正是GPS 定位得到的坐标。但是(X1,Y1)并不是 AP 的位置,而是手机的位置,因为手机实际离 AP存在一定的距离。为了得到更精确的 AP 位置坐标,此AP 会被大量的手机扫描到,并重复采集。如果此 AP 被采集了 N 次,那么在数据库里,实际的AP信息应该是【BSSID、(X1,Y1),(X2,Y2)...(Xn,Yn)】。

        一个 AP可能只被采集一次, 可能被采集上百次。当AP被采集的次数越多,通过算法计算出的 AP 坐标也就越精准。经过算法处理,最终该热点的位置数据应该是【BSSID、(X,Y)】。

        PS:如果一个AP 能够被不断采集,那么此 AP 的坐标随着采集次数的增多而不断地迭代,其坐标也会越来越精准。


        二、确定移动设备与热点之间的距离:

        Wi-Fi信号和太阳光一样,都是电磁波。只是 Wi-Fi信号和光有两点较大的不同:一是Wi-Fi信号 的波长比光长许多,二是太阳光的发射源是太阳,Wi-Fi的发射源是 AP(如路由器)。既然Wi-Fi信号也是电磁波,那么Wi-Fi的信号强度必然也会随着传播距离的增加而衰减。

        当手机连接上某一 Wi-Fi时,手机的系统会记录手机能够捕获的 Wi-Fi信号强度-RSSI。既然 Wi-Fi信号会随着距离衰减,那么通过RSSI=a+b*log(d)的理想化模型便可以计算出手机距离路由器的长度 d。当理想化模型终究是理想化模型,无线信号因为干扰、反射等等原因,我们计算出的距离其实并不太准确。 

 

        三、通过算法推断出移动设备的位置

        有了热点的坐标和到热点的距离,就得靠定位算法来帮助我们定位了。

        Wi-Fi定位的算法其实有很多,目前主流的有三种算法:

        

    • 三角定位算法

    • 指纹定位算法

    • 最大似然估算法


        三角定位算法

        说白了就是以 AP 的坐标为圆心画圆,圆的半径是我与热点之间的距离,三圆重叠处就有可能是我的位置,其中的推倒证明公式初中就教了,就不在这里细说了。

 

        但是三角定位也有其缺点,就是定位结果不精准。原因很简单,因为 AP 的位置和手机距离 AP 的长度都是推算出的,误差+误差=更大的误差。

 

         指纹定位算法


        这算法只能在学校实验室拿小样本来玩儿玩儿,真正做 Wi-Fi定位的 App根本不敢用。因为这一算法的核心思想就是大量的数据存储、大量的query查询。

        简单介绍一下指纹算法,回到「数据采集与制备」,当手机获取到 GPS 定位信息的同时,手机会扫描周围所有 AP 的 BSSID。这时所有能采集到的 BSSID 序列就成了指纹存储在数据库中,指向的是收集到该指纹的坐标。当有手机采集的 BSSID 序列能够匹配之前采集到的指纹(BSSID序列),那么就可以认为此时的坐标正是指纹所指向向的坐标。

 

        指纹算法也有致命缺点:一是采集量需要非常大。二是对服务端性能和数据存储要求太高。三是Wi-Fi不密集的地方,定位结果会非常糟糕。

 

         最大似然定位法


        目前最靠谱的 Wi-Fi定位算法。说白了就是三角定位法加入了概率论的因素。感兴趣的同学可自己琢磨和研究。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多