我们经常用到的手机定位的原理到底是什么?

1

手机定位的价值

目前智能手机的使用已经越来越普遍,手机定位也是手机上的一个核心基础功能。举一个常见的应用如叫车,司机需要知道你在哪里,同时打车软件也需要基于司机和乘客的位置规划一条路线,让司机更高效的行驶到用户这里。这就是典型的定位服务的应用。当然,除去这种应用,用户位置本身的展示,也是地图产品中不可缺少的。

那么问题就来了,作为app的用户,你可能会好奇这个app是如何知道你的位置;而作为app的开发者,是如何在程序中得到设备当前的准确位置的呢?

这个问题说来话长,我们还是先从定位原理上来解释吧!

2

可用于无线定位的信号

很显然,一个功能正常的手机,总是能够受到各种无线信号,这些无线信号的“局部唯一性”,是该设备能定位的关键前提。什么叫局部唯一性?我们再把这些具体的信号来展开解释下你就知道了:

基站信号:

一个手机能够接打电话、收发短信,说明该手机能与附近基站发起交互,收发信号。特别地,对于智能手机,还可以通过系统的接口得到基站ID。正常情况下,每个基站ID是全球唯一的,这样如果扫到了某个基站ID,我们又知道该基站的位置,便能粗略估计设备的位置。做出这个推测的前提就是一个基站的信号发射范围是有限的,正常的手机,不可能在相距这个基站很远的时候,还收到这个基站的信号。

在无线通信相关的教科书里,讲到基站定位,总是会谈到三角定位,也就是下图描述的原理。下图是很容易理解的,一个手机能扫描到三个基站的信号,因此其必然在三个基站的共同覆盖范围内,从而推算的范围就大大缩小。但现实是很骨感的,在现在的智能手机上,只有极少数的手机可以获取到多个周围的基站ID,而且也无法反算出和这些基站的距离,所以这个算法除非电信运营商自己可以试试,对于别人是没有实战价值的。在实战中,只能是退而求其次,基于单个基站来定位。

WIFI信号:

现在的智能手机都支持wifi上网了,而我们连接的每个wifi路由器(包括手机做移动热点的那种),都有全球唯一的MAC地址。更重要的是,wifi路由器的部署成本低,因而非常普遍,在一个楼层里就会有很多个wifi热点。因而不难想到,一旦我们有了这个全球每个路由器的实际位置,那么我们就可以基于用户手机扫描到的周围wifi热点,确定用户当前的位置。

说到这里,有的朋友会问,如果一个人带着手机,开着移动热点到处行走,还有那种地铁、高铁、公交车上的移动wifi,岂不是就会引起定位的错误?答对了,确实是这样,而且根据统计,这种情形还在愈演愈烈。因此,如何想办法来迅速过滤这种移动热点,是个值得研究的问题。

GPS信号:

如果手机在室外或者窗边,那么就可以接收到天上的定位卫星发射出来的信号,基于这种信号,可以推算手机到每颗卫星的距离、卫星位置,进而推算出手机的位置来。需要注意的是,这个解算是在GPS芯片中完成的,在手机操作系统层面上,可以直接通过API接口得到解算的结果和误差半径。

对于GPS的原因我们不多解释,但在调用时要注意两点。第一就是GPS的初始定位是很耗时间的,对于老一些的芯片,可能要耗费几分钟才能冷启动定位成功;第二是GPS精度并非是完全可依赖的,在一些地方达到几百米都有可能。

其他:

以上三种是最常用的定位方式,此外还有蓝牙/IP/地磁场等手段,对于它们的优缺点,我们汇总如下:

定位方法

场景

精度

开发者实现方式

GPS

室外或窗边,初次定位需要若干秒锁定等待时间

一般情况下10M内,高楼边和高架下面100M内

芯片实现,系统API提供,开发者直接调用。

基站定位

可以打电话的地方

几百米

系统API提供基站ID获取接口,开发者自行维护基站数据库,自行查询推算位置。

WIFI定位

有WIFI覆盖的地方

几米到几十米均可能,取决于部署密度。

系统API提供周围WIFI的mac地址获取接口,开发者自行维护mac数据库,自行查询推算位置。

IP定位

所有能上网的手机

如果连宽带上网,且宽带IP稳定,则几十米到几百米,否则只能到城市级,在漫游时IP定位可能会发生严重的错误。

开发者需要部署一个服务端,在服务端得到手机设备联网的公网ip,并且自行维护一个ip数据库,查询推算位置。

蓝牙定位

有iBeacon部署的区域

5-10M左右,取决于部署密度

系统API提供周围蓝牙信标的设备ID获取接口,开发者自行维护ibeacon数据库,自行查询推算位置。

磁场定位

任意区域。

室内磁场分布多样的区域可达到3M,否则就会变差。

系统API提供磁场强度获取接口,开发者自行维护磁场数据库,自行查询推算位置。注意磁场强度的绝对定位能力弱,须配合WIFI和Ibeacon等绝对定位方式

对于这些定位方法的详细原理以及适用范围,我们会在以后的介绍中,细致展开。

3

开发者如何实现定位能力

了解了这些定位方式的“开发者实现方式”,开发者恐怕要浑身冒汗了,千千万万的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。

4

结束语

在本文中,我们讨论了手机定位的价值、各种定位方式的原理与开发者实现定位的工程化手段,希望大家读完本文后,可以结合提示,给出下列问题的回答。

在苹果手机上,微信的定位准、微博的定位不准!(苹果手机上的应用定位能力是谁提供的?)

我们公司搬家了,我在新的公司定位到了老的地方!(先看看你是不是把路由器都带过来了?)

在最新的Nexus6手机上,谷歌地图居然无法定位!(谷歌地图为什么会无法定位?)

在家里居然给我定位到几百米以外了,我都搞不清是xx地图太烂还是手机太烂了,不是说好GPS精度5米吗?(家里的话GPS可以定位成功吗?)

用陌陌,在三个位置,对同一个好友计算三次距离,即可用“三角定位”锁定好友的位置(如果对方在室内,用的是什么定位?他的定位精确度是多少?你认为这个精度可以做三角定位,还精确到对方的家吗?)

在以后的介绍中,我们会进一步对各种定位硬件的特点、各种定位方式的实现原理进行更细致的揭秘,敬请期待。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容