LBS-查找附近的人-地理坐标定位详解

O2O应用层出不穷的这几年,极大的推进了LBS技术架构的发展。O2O应用除了无状态请求但又是一直在线这个特点,还有一个重要的特点:终端用户有一个位置信息。就是这个位置信息才有了O2O应显示附近餐馆、定位上车、还有微信的摇一摇获取附的人,不少游戏中也是有和附近的朋友完。这些都需要使用LBS(Location Based Services)

本系列文章会介绍LBS App后台架构中的相关技术知识。

LBS类应用特点-定位

不管是什么LBS应用,一个共同的特点就是:他们的数据都或多或少包含了地理位置信息。那核心的问题就是如何获取用户的位置信息了,要解决这个问题我们还要先了解一下定位方案。

而如何对这些信息进行查询、处理、分析,也就成为了支撑LBS应用的最基础也是最关键的技术问题。

而由于地理位置信息的特殊性,在开发中经常会有比较难以处理的问题出现,比如:由于用户所在位置的不固定性,用户可能会在很小范围内移动,而此时经纬度值也会随之变化;甚至在同一个位置,通过GPS设备获取到的位置信息也可能不一样。所以如果通过经纬度去获取周边信息时,就很难像传统数据库那样做查询并进行缓存。

获取用户定位信息

下面4中方法可以获取用户的地理坐标

  1. 基站定位

每个手机基站都有一个ID标识符,一个手机能够接打电话、收发短信,说明该手机能与附近基站发起交互,收发信号。特别地,对于智能手机,还可以通过系统的接口得到基站ID。基站定位则是利用基站对手机的距离的测算距离来确定手机位置的,但是现实并没有理论那么完美,实际上手机很难同时获取到周围的多个基站ID,运营商也不会浪费钱,一个地方已经有基站覆盖了,为什么还要建立其他基站对吧。基站定位的精度很大程度依赖于基站的分布及覆盖范围的大小,有时误差会超过一公里。这个只能在粗略定位中使用,比如app刚刚启动时获取用户所在省份。

  1. Wi-Fi定位

现在的智能手机都支持wifi上网了,而我们连接的每个wifi路由器(包括手机做移动热点的那种),都有全球唯一的MAC地址。更重要的是,wifi路由器的部署成本低,因而非常普遍,在一个楼层里就会有很多个wifi热点。因而不难想到,一旦我们有了这个全球每个路由器的实际位置,那么我们就可以确定用户当前的位置。
说到这里,有的朋友会问,如果一个人带着手机,开着移动热点到处行走,那么这种移动热点的mac地址,岂不是就会引起定位的错误?答对了,确实是这样,而且根据统计,这种情形还在愈演愈烈,因此,如何想办法来迅速过滤这种移动热点,是个值得研究的问题。

  1. 3.GPS定位

如果手机在室外或者窗边,那么就可以接收到天上的定位卫星发射出来的信号,基于这种信号,可以推算手机到每颗卫星的距离、卫星位置,进而推算出手机的位置来。需要注意的是,这个解算是在GPS芯片中完成的,在手机操作系统层面上,可以直接通过API接口得到解算的结果和误差半径。
对于GPS,要注意两点。第一就是GPS的初始定位是很耗时间的,对于老一些的芯片,可能要耗费几分钟才能冷启动定位成功;第二是GPS精度并非是完全可依赖的,在一些地方达到几百米甚至上千米都很正常

  1. AGPS定位(Assisted GPS)-GPS+基站的结合

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

AGPS利用网络,首先将基站定位或者WIFI定位获得的大概位置发到远程服务器,由服务器进行查询和计算,得出这个位置下当前卫星信息,反馈给设备,设备就可以直接用这些信息来接受卫星信号,不用等待漫长的卫星轨道信息广播完毕后,才能知道卫星的位置,大大缩短搜星时间。GPS解决方案的优势主要体现在其定位精度上,在室外等空旷地区,其精度在正常的GPS工作环境下,可以达到10米左右,堪称目前定位精度最高的一种定位技术。该技术的另一优点为:首次捕获GPS信号的时间一般仅需几秒,不像GPS的首次捕获时间可能要2~3分钟。

定位方法 场景 精度 开发者实现方式
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等绝对定位方式

生产实际中,还是建议使用第三方的定位SDK,比如国内的百度、高德等地图厂商自行实现了定位SDK,该定位SDK的作用就是通过系统接口读取到原始定位信息,然后借助于各家自行部署维护的数据库,查询到当前扫描到的基站、WIFI的位置,最终计算出更准确的定位结果,通过SDK的接口,返回给开发者。这么做的好处,在于能够让app的定位能力脱离对手机系统的依赖。

定位偏移问题

做过LBS App应用的移动端人员应该都遇见过定位不准或者说坐标便宜的问题,App通过系统级的函数获取的坐标,放到百度地图或者高德地图上,会发现他们显示的位置信息是不一致的。

通过系统底层获取的坐标系是国际坐标系WGS-84(World GEodetic System 1984),是为GPS全球定位系统的使用而建立的坐标系统。

GCJ-02是由中国国家测绘局制定的地理信息系统的坐标系统,其是对经纬度数据(WGS-84)的加密算法,即加入随机的偏差。不同的电子地图服务提供商有不同的坐标系,例如,Google、高德地图使用的是同一套坐标系,而百度、腾讯又是使用的另一套坐标系,解决这个问题最简单的办法就是尽量使用相同的坐标系,当然有时候迫不得已的话,也可以进行坐标系的转化。腾讯就提供这样的服务

确定功能需求

了解了定位相关的知识,那些都是移动端的同事需要关心的,现在我们要去考虑服务端的东西了。

假设我们先要开发一个打车APP,APP有司机端和用户端,用户提供自己的定位,需要获取到附近的司机信息,司机需要由近到远排序,并显示距离,没错这个就是嘀嘀打车等APP的其中一个小功能。

可能的技术方案

排除一些不通用和难以实现的技术,我们罗列出以下几种方案:

  • 基于MySQL数据库
  • 采用GeoHash索引,基于MySQL
  • MySQL空间存储(MySQL Spatial Extensions)
  • 使用Redis存储地理位置信息
  • 使用MongoDB存储地理位置信息

文章同步发布在博客,LBS-查找附近的人-地理坐标定位详解

请看下篇

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

推荐阅读更多精彩内容