移动互联网时代,手机成了每个人的生活标配。这些手机里,安装了形形色色的APP,提供了各种服务,彻底改变了我们的生活,这些服务里面,就包括我们今天的主角"定位"。
"定位"这个技术大家应该都有使用过,例如很多人都给孩子或者年迈的老人安装上手机定位软件,防止老人和孩子走失,或者手机"叫车服务"、"外卖服务""导航服务"都会应用到"定位"技术。这项技术给很多应用服务提供着辅助支撑。
还有些人会雇佣黑客利用"定位"技术对相关人进行跟踪定位,侵犯他人隐私!那么这项技术的原理到底是什么?如何利用该技术快速定位他人位置?
今天我们就以本篇文章内容给大家详细阐述一下"手机定位的原理与实现"!
一、 手机到底如何实现定位的?工作原理是什么?
1、常用定位技术
现在使用规模较大的定位技术有6种,我分成了两大类
卫星定位:包括GPS、AGPS、Glonass、北斗。
地面辅助定位:包括基站定位、WiFi辅助定位。
2、常见的定位技术原理
(一)卫星定位
常见的卫星定位系统有GPS、北斗、伽利略和Glonass,虽然这些系统提供的服务有些差异,但其背后的定位原理都是相同,现在以应用最广泛的GPS为例来介绍卫星定位。
GPS(Global Positioning System)即全球定位系统,是由美国建立的一个卫星导航定位系统,利用该系统,用户可以在全球范围内实现全天候、连续、实时的三维导航定位和测速;另外,利用该系统,用户还能够进行高精度的时间传递和高精度的精密定位。
1.1GPS系统构成
GPS系统包括三大部分:空间部分--GPS卫星星座;地面控制部分--地面监控部分;用户设备部分--GPS信号接收机。如图1:
1.1.1GPS工作卫星及其星座
21颗工作卫星和3颗在轨备用卫星组成GPS卫星星座。24颗卫星距地高度为20200km,运行周期为11小时58分(恒星时12小时),均匀分布在6个轨道平面内,轨道倾角为55度,各个轨道平面之间相距60度,每个轨道平面内各颗卫星之间相差90度。卫星通过天顶时,卫星可见时间为5个小时,在地球表面上任何地点任何时刻,在高度角15度以上,平均可同时观测到6颗卫星,最多可达9颗卫星。示例如图2:
为了解算测站的三维坐标,必须观测4颗GPS卫星,称为定位星座。
1.1.2地面监控系统
对于导航定位来说,GPS卫星是一动态已知点。星的位置是依据卫星发射的星历--描述卫星运动及其轨道的参数算得的。每颗GPS卫星所播发的星历,是由地面监控系统提供的。卫星上的各种设备是否正常工作,以及卫星是否一直沿着预定轨道运行,都要由地面设备进行监测和控制。地面监控系统另一个重要作用是保持各颗卫星的时间,求出钟差,然后由地面注入站发给卫星,卫星再由导航电文发给用户设备。
GPS工作卫星的地面监控系统包括一个主控站、三个注入站和五个监测站。主控站的作用是根据各监控站对GPS的观测数据,计算出卫星的星历和卫星钟的改正参数等,并将这些数据通过注入站注入到卫星中去;同时,它还对卫星进行控制,向卫星发布指令,当工作卫星出现故障时,调度备用卫星,替代失效的工作卫星工作;另外,主控站也具有监控站的功能;监控站主要任务是为主控站提供卫星的观测数据;注入站任务是将主控站发来的导航电文注入到相应卫星的存储器。
1.1.3GPS信号接收机
能够捕获到按一定卫星高度截止角所选择的待测卫星的信号,并跟踪这些卫星的运行,对所接收到的GPS信号进行变换、放大和处理,以便测量出GPS信号从卫星到接收机天线的传播时间,解译出GPS卫星所发送的导航电文,实时地计算出测站的三维位置,甚至三维速度和时间。
1.2GPS定位原理
GPS导航系统的基本原理是测量出已知位置的卫星到用户接收机之间的距离,然后综合多颗卫星的数据就可知道接收机的具体位置。要达到这一目的,卫星的位置可以根据星载时钟所记录的时间在卫星星历中查出。而用户到卫星的距离则通过纪录卫星信号传播到用户所经历的时间,再将其乘以光速得到(由于大气层电离层的干扰,这一距离并不是用户与卫星之间的真实距离,而是伪距)。
当GPS卫星正常工作时,会不断地用1和0二进制码元组成的伪随机码(简称伪码)发射导航电文。导航电文包括卫星星历、工作状况、时钟改正、电离层时延修正、大气折射修正等信息。GPS导航系统卫星部分的作用就是不断地发射导航电文。然而,由于用户接受机使用的时钟与卫星星载时钟不可能总是同步,所以除了用户的三维坐标x、y、z外,还要引进一个变量 t 即卫星与接收机之间的时间差作为未知数,然后用4个方程将这4个未知数解出来。所以如果想知道接收机所处的位置,至少要能接收到4个卫星的信号。如下图所示:
从以上四个方程中解出x,y,z和t就可以定时、定位。
GPS定位方式,不需要sim卡,不需要连接网络,只要在户外,基本上随时随地都可以准确定位。其他类型卫星定位方式与GPS差不多,不再讲述。
(二)基站定位
基站定位,也就是常说的LBS,Location Based Service(基于位置服务)。
2.1相关概念
因为处在相同频率范围的信号会相互干扰,为防止相邻基站相互干扰,相邻的基站会选择不同的信道(不同频率范围的信号)与移动设备通信。如上图是一个蜂窝移动基站的示意图,其任意相邻的两个基站都具有不同的通信频段。基站不是孤立存在的,其覆盖区域相互交接,组成一张巨大的移动通信网络(如下图)。
移动设备在插入sim卡开机以后,会主动搜索周围的基站信息,与基站建立联系,而且在可以搜索到信号的区域,手机能搜索到的基站不止一个,只不过远近程度不同,再进行通信时会选取距离最近、信号最强的基站作为通信基站。其余的基站并不是没有用处了,当你的位置发生移动时,不同基站的信号强度会发生变化,如果基站A的信号不如基站B了,手机为了防止突然间中断链接,会先和基站B进行通信,协调好通信方式之后就会从A切换到B。这也就是为什么同样是待机一天,你在火车上比在家里耗电要多的原因,手机需要不停的搜索、连接基站。每次坐火车,我都会把手机调成飞行模式,看看电影、听听歌,依然可以维持很长时间。
如上图所示,在这张巨大移动网络中,根据你所在的小区,所从属的基站就可大致知道你的位置信息,如果再加上一些估计算法,就可以更确切的找出你的位置。
2.2基站定位原理
移动电话测量不同基站的下行导频信号,得到不同基站下行导频的TOA(到达时刻)或 TDOA(到达时间差),根据该测量结果并结合基站的坐标,一般采用三角公式估计算法,就能够计算出移动电话的位置。实际的位置估计算法需要考虑多基站(3个或3个以上)定位的情况,因此算法要复杂很多。一般而言,移动台测量的基站数目越多,测量精度越高,定位性能改善越明显。
上面的介绍有点官方,不是很容易理解。直白的说,距离基站越远,信号越差,根据手机收到的信号强度可以大致估计距离基站的远近,当手机同时搜索到至少三个基站的信号时(现在的网络覆盖这是很轻松的一件事情),大致可以估计出距离基站的远近;基站在移动网络中是唯一确定的,其地理位置也是唯一的,也就可以得到三个基站(三个点)距离手机的距离,根据三点定位原理,只需要以基站为圆心,距离为半径多次画圆即可,这些圆的交点就是手机的位置。网传的微信三点定位原理也是这个样子。
由于基站定位时,信号很容易受到干扰,所以先天就决定了它定位的不准确性,精度大约在150米左右,基本无法开车导航。定位条件是必须在有基站信号的位置,手机处于sim卡注册状态(飞行模式下开wifi和拔出sim卡都不行),而且必须收到3个基站的信号,无论是否在室内。但是,定位速度超快,一旦有信号就可以定位,目前主要用途是没有GPS且没有wifi的情况下快速大体了解下你的位置。另外,如果你的手机里没有基站位置数据包,还需要联网才行。
(三) Wi-Fi定位
除了基站定位之外,还有一个大家可能比较陌生的地面定位方式,就是Wi-Fi定位。
没错,Wi-Fi也可以定位哟!
也许你会认为,我所说的Wi-Fi定位,就是IP地位定位。其实并不是哦!
大家都知道,每个人上网,都会有一个公网IP地址。这些IP地位,在网络系统中都是有注册的,例如属于南京电信或上海联通,之类的。
IP地址确实可以大致追踪到你的位置(运营商可以查得更准确),但是,这种定位也有局限性。一方面,现在很多运营商都采用NAT技术,不一定会给每个用户分配公网地址,另一方面, IP地址很容易欺骗,我如果搞一个代理地址,你看到的IP,可能是美国的。
我所说的Wi-Fi定位,和上面的IP地址定位完全不同,是根据Wi-Fi路由器MAC地址进行定位。
每一个无线AP(Wi-Fi路由器)都有一个全球唯一的MAC地址,并且一般来说,无线AP在一段时间内不会移动。
在开启Wi-Fi的情况下,采集设备(例如手机)可以搜到这个无线AP的信号,并且获取它的MAC地址和信号强度信息。
采集装置将这些信息上传到服务器,经过服务器的计算,保存为"MAC-经纬度"的映射。当采集的信息足够多,就在服务器上建立了一张巨大的Wi-Fi信息数据库。
当一个设备处在这样的网络中时,可以将收集到的这些能够标示AP的数据发送到位置服务器,服务器检索出每一个AP的地理位置,并结合每个信号的强弱程度,计算出设备的地理位置并返回到用户设备,其计算方式和基站定位位置计算方式相似,也是利用三点定位或多点定位技术。
位置服务商要不断更新、补充自己的数据库,以保证数据的准确性。
那么,问题来了,这些AP位置映射数据怎么采集的呢?
大致可以分为两种——主动采集和用户提交。
· 主动采集:
谷歌的街景拍摄车,没想到吧?它就是一个采集设备。它采集沿途的无线信号并打上通过GPS定位出的坐标回传至服务器。
· 用户提交:
Android手机用户在开启"使用无线网络定位"时,会提示是否允许使用Google的定位服务,如果允许,用户的位置信息就被谷歌收集到。iPhone则会自动收集Wi-Fi的MAC地址、GPS位置信息、运营商基站编码等,并发送给苹果公司的服务器。
和基站定位一样,Wi-Fi定位在AP密集的地方有很好的效果。如果AP很少,那也很难定位准确。
总的来说,Wi-Fi这种定位方式的执行难度比较大,可用性和准确性也不高。所以,主要还是一种辅助性质的定位手段。
(四)、A-GPS定位
说到辅助,我们就要说到A-GPS了。
A-GPS,Assisted GPS,辅助全球卫星定位系统。从名字就可以看出来,这是GPS的一个增强功能。
AGPS(AssistedGPS:辅助全球卫星定位系统)是结合GSM/GPRS与传统卫星定位,利用基地台代送辅助卫星信息,以缩减GPS芯片获取卫星信号的延迟时间,受遮盖的室内也能借基地台讯号弥补,减轻GPS芯片对卫星的依赖度。AGPS利用手机基站的信号,辅以连接远程定位服务器的方式下载卫星星历 (英语:Almanac Data),再配合传统的GPS卫星接受器,让定位的速度更快。是一种结合网络基站信息和GPS信息对移动台进行定位的技术,既利用全球卫星定位系统GPS,又利用移动基站,解决了GPS覆盖的问题,可以在2代的G、C网络和3G网络中使用。
普通的GPS系统是由GPS卫星和GPS接受器组成,与普通的GPS不同,AGPS在系统中还有一个辅助定位服务器。在AGPS网络中,接收器可通过与辅助服务器的通信而获得定位辅助。由于AGPS接收器与辅助服务器间的任务是互为分工的,所以AGPS往往比普通的GPS系统有速度更快的定位能力、有更高的效率,可以很快捕捉到GPS信号,这样的首次捕获时间将大大减小,一般仅需几秒的时间(单纯GPS接收机首次捕获时间可能要2~3分钟时间),而精度也仅为几米,高于GPS的精度。 利用AGPS接收器不必再下载和解码来自GPS卫星的导航数据,因此可以有更多的时间和处理能力来跟踪GPS信号,这样能降低首次定位时间,增加灵敏度以及具有最大的可用性。
AGPS定位基本步骤
· AGPS手机首先将本身的基站地址信息通过网络传输到定位服务器;
· 定位服务器根据该手机的大概位置传输与该位置相关的GPS辅助信息(包含GPS的星历和方位俯仰角等)到手机;
· 该手机的AGPS模块根据辅助信息(以提升GPS信号的第一锁定时间TTFF能力)接收GPS原始信号;
· 手机在接收到GPS原始信号后解调信号,计算手机到卫星的伪距(伪距为受各种GPS误差影响的距离),并将有关信息通过网络传输到定位服务器;
· 定位服务器根据传来的GPS伪距信息和来自其他定位设备(如差分GPS基准站等)的辅助信息完成对GPS信息的处理,并估算该手机的位置;
· 定位服务器将该手机的位置通过网络传输到定位网关或应用平台(如手机上的GPS应用程序)。
AGPS的优势主要在其定位精度上。在室外等空旷地区,其精度在正常的GPS工作环境下,可达10米左右,堪称目前定位精度最高的一种定位技术。另一优点为:首次捕获GPS信号的时间一般仅需几秒,不像GPS的首次捕获时间可能要2~3分钟。虽然AGPS技术的定位精度很高、首次捕获GPS信号时间短,但是该技术也存在着一些缺点。首先,室内定位的问题目前仍然无法圆满解决。另外,AGPS的定位实现必须通过多次网络传输(最多可达六次单向传输),这对运营商来说是被认为大量的占用了空中资源,对消费者而言将产生不少的流量费用。而且AGPS手机比一般手机在耗电上有一定的额外负担,间接减短了手机的待机时间。除此之外,有时无法取得多个卫星传来的讯号,通常这是因为您的AGPS 话机天线接收器所在环境的限制。在这种情况下,AGPS 功能将不能很好地使用。
二、 开发者是如何实现手机定位的?
了解了这些定位方式的"开发者实现方式",开发者恐怕要浑身冒汗了,千千万万的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。