18.app后端如何实现LBS

标签: app 后端 lbs | 发表时间:2015-03-13 05:12 | 作者:newjueqi
出处:http://blog.csdn.net
移动互联网,除了一直在线这个特点外,还有一个重要特点,能定位到手机的位置。查找附近的人,附近的餐馆等服务,以及大量的o2o应用, 都需要使用LBS(Location Based Services)。那么,如何用户的地理坐标?如何去查找所需的附近的数据呢?在这篇文章中,为你一一道来。

1.如何获取用户的地理坐标


  现在,基于手机来获取用户的地理坐标,主要是下面两种方法:


  (1)使用手机上的GPS模块

  (2)使用手机网络所连接的基站定位


  一般是使用第一种方法,当手机上没有GPS模块,就用第二种方法来定位。

  app端建议直接使用地图sdk提供的获取地理坐标的方法来获取地理坐标,它会自动判断使用哪种方式的。

  对于初次做LBS的小伙伴,地理坐标的偏移问题需要注意。通过手机获取的坐标,放到百度地图或高德地图上,总是会出现偏移,例如,当时是在微信的前总部“南方通讯大厦”附近获取的坐标,那是把坐标放到百度地图上却到了华南师范大学(那是俺的母校)。

  被这个问题困扰了好久,查了好多资料才找到是这个原因:国家的法律规定,所有的电子地图服务提供商都需要给地图数据加上偏移和加密,例如,你获取的坐标是100,90 ,这个坐标到了地图上却变成了105,95,这个数据的差异就是偏移。

  而且,这个偏移量没有明确规定,这就造成了一个现象,不同电子地图服务提供商有不同的坐标体系,例如,Google地图,高德地图,苹果地图是同一套坐标体系,百度地图却是另外一套坐标体系。

  那么,怎么解决这个问题?方法很简单,使用地图sdk提供的获取地理坐标功能,获取的这个坐标是已经偏移过的。


2.如何查找附近的用户(商户,人)


  一般的业务逻辑是,数据中有很多坐标,知道一个坐标,把一定范围内(例如500米内)的其他坐标查出来。

  下面介绍3种实现方案:

(1) mysql的空间数据库



  参考资料:http://blog.csdn.net/chaiqi/article/details/23099407

  从MySQL4.1开始,mysql就引入了一系列空间扩展,使其具备了一定的空间处理能力。

简单点来说,就是mysql里已经可以把地理坐标的数据当成一种独立的数据类型,而且提供了相关的空间函数(例如查找一个矩形范围内的坐标)给开发者直接调用。

(2)geohash


  geohash的详细介绍,可参考 http://www.cnblogs.com/dengxinglin/archive/2012/12/14/2817761.html

  geohash编码,可以把地理坐标转换成一个值,简单点来说就是把二维坐标转换成一维坐标。geohash表示的并不是一个点,而是一个矩形区域。比如编码w23yr3,它表示的是一个矩形区域。geohash编码的前缀可以表示更大的区域。例如w23yr3,它的前缀w23yr表示包含编码w23yr在内的更大范围。 这个特性可以用于附近地点搜索。

  查找附近的时候,非常方便,用SQL中,LIKE ‘w23yr3%’可查询附近的所有地点。

  在以前的产品中,一个需求是查找用户附近的商铺(包含关键字),商铺的数据有130万,全放在mysql中, 发现用mysql LIKE ‘w23yr3%’这种方式检索geohash性能上的瓶颈很大,检索130万行的数据,平均花费了8秒,这是响应速度是无法忍受的。

  后来经过不断优化,确定了如下使用coreseek+redis+mysql解决方案,一下子就把响应速度减少到平均1 秒,这个方案的如下:

  1. 用每个商铺的坐标值计算geohash,把geohash作为key,商铺的id作为value,放到redis的set集中。

  2. 根据用户的坐标计算geohash,在redis中用"keys *"的方法匹配查找附近的商铺geohash(记得geohash的特点吗?geohash编码的前缀可以表示一个区域),再获得商铺的id

  3. 把2中商铺的id作为filter ,在coreseek中继续查找。

(3) mongodb


  地理位置支持是MongoDB的一大亮点,全球最流行的LBS服务foursquare,国内的快的,选择的也是mongodb。

  使用mongodb开发LBS服务有以下的优点:


  1. mongodb自身的性能高,更新,查询的速度快。

  2. 通过副本集,分片等方法,很容易实现mongodb的分布式部署,解决性能瓶颈。

  3. mongodb已在app后端中广泛使用,开发部署对于很多开发者来说都是比较熟悉。


  用mongodb,可支持:

  1. 查询多边形范围的坐标。

  2. 查询附近的坐标。

  3. 查询圆形区域内的坐标。


   强烈推荐LBS服务中优先使用mongodb!!!


---------------------------------------------------------------------------------------------------------------------------

打开链接   app后端系列文章总目录 总目录 ,能查看本人发表过的所有原创“app后端”文章。

【作者】曾健生
【QQ】190678908
【app后端qq群】254659220 
【微信公众号】 appbackend
【新浪微博】 @newjueqi
【博客】http://blog.csdn.net/newjueqi 
作者:newjueqi 发表于2015/3/12 21:12:08 原文链接
阅读:73 评论:0 查看评论

相关 [app 后端 lbs] 推荐:

18.app后端如何实现LBS

- - CSDN博客推荐文章
移动互联网,除了一直在线这个特点外,还有一个重要特点,能定位到手机的位置. 查找附近的人,附近的餐馆等服务,以及大量的o2o应用, 都需要使用LBS(Location Based Services). 1.如何获取用户的地理坐标.   现在,基于手机来获取用户的地理坐标,主要是下面两种方法:.   (1)使用手机上的GPS模块.

LBS第二战

- - 《商业价值》杂志
LBS加速了传统世界的互联网化,而其中所蕴含的巨大价值,使得大众点评、高德、腾讯、百度、阿里等原本完全不同的公司,围绕相同的战略目标发起战争. 2012年10月初,百度正式将地图部门拆分,成为独立的LBS事业部,与百度移动·云事业部一起成为百度移动互联网战略中并行的两个部门. 据百度董事长兼CEO李彦宏在第3季度财报会议上披露,百度地图用户已经达到7700万,在新成立的事业部中,还有一系列百度身边、百度路况等一系列基于LBS(Location Based Service,位置服务)的应用.

14.app后端如何设计api

- - CSDN博客推荐文章
app和后端的交互,一般都是通过后端提供的api实现. api的设计,估计很多刚进入app后端的小伙伴会一无头绪,不知道怎么入门. 下面根据自己3年的app后端经验,总结出下几个api设计原则,给小伙伴参考.   这个问题在以前发表的文章“7.app和app后端的通讯”中其实已经回答了,这里再重复一次.

移动APP后端网络处理一些问题记录

- - BlogJava-首页技术区
这里讲的移动APP主要指的是安卓平台,大部分情况也适用于IOS等移动平台,可能重点嘛会在后半部分呢. 但凡一个常用的APP都会嵌入至少一个SDK,不同来源或同一来源,有广告SDK,有推送SDK,有性能汇报SDK,有用户跟踪SDK,有统计流量SDK等,有支付SDK等等. 虽然带来了功能的复用和解耦,便于纵向扩展,但可能会存在:.

[原]21.app后端如何高效更新内容

- - 曾健生的专栏
         在app的主页或通知栏,经常需要通过api取最新的数据. 那么,怎么在这部分上做优化,使获取内容的效率更高呢. 在本文中,通过推拉和增量更新,实现了一种高效获取数据的策略. 1.高效更新数据策略在app中的应用场景. 如图所示,在app首页,经常会有这种瀑布流形式的内容,具体可参考新浪微博的app.

[原]23.app后端如何架设文件系统

- - 曾健生的专栏
         现在app展现内容的形式多种多样的,有文字,图片,声音,视频等等,其中文件占了一个很大的比重. 随着app不断运营,文件会越来越多,占用的磁盘空间也不断增大,架设一套高效的文件系统,对于整个app架构有着巨大的影响. 1.    如果可能,使用成熟的文件云存储服务.        对于创业公司来说,我一直推崇的架构原则是“ 尽量使用成熟的第三方服务和软件,自己只负责业务逻辑”.

LBS 已兴,Context Awareness 未起

- - 爱范儿 · Beats of Bits
搜索一下 App Store 我们能发现,很多应用也承诺了以上的功能,可是当下载下来一看,就总会有这样那样的失望. 我们的智能手机虽然被冠了智能的名字,可还无法有效的感知我们人造的大千世界. 与此同时,被期以厚望的各个纯 LBS 应用,也正在遭遇憧憬破灭的尴尬. 徽章图像越做越精美,能吸引到去点击的用户也寥寥;网上的签到看去有点热闹,可也不能打动店家的腰包;对了,我们还可以摇一摇.

LBS 还能怎么玩?

- - 极客公园-GeekPark
主职写黄书,副业做挨踢,业余时间做一名电子商务专业的本科生. [核心提示]单纯的拘泥于移动特性开发 LBS 产品也许并非是唯一的出路,让我们一块来看看 LBS 还能怎么玩. 基于移动应用的 LBS(Location Based Service 位置服务)社区似乎已经过了白热化的阶段,越来越多同质化无特色的 LBS 社区因为用户活跃度不高或者是盈利模式不明确逐渐的退出了这块市场.

[原]17.app后端如何保证通讯安全--aes对称加密

- - 曾健生的专栏
在上文《16.app后端如何保证通讯安全--url签名》提到,url签名有两个缺点,这两个缺点,如果使用对称加密方法的话,则完全可以避免这两个缺点. 在本文中,会介绍对称加密的具体原理,和详细的方案,使app通讯更加安全.   采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密.

手机LBS位置服务盘点

- bluesnail - 月光博客
  位置服务(LBS,Location Based Services)指的是通过移动终端和移动网络的配合,确定移动用户的实际地理位置,从而提供用户与位置相关的服务信息.   在美国,Foursquare为代表的以用户主动签到(check-in)为核心的位置签到服务(Location Check-in Service)重新定义了位置服务的内涵,掀起了新一轮移动互联网产业发展热潮,即以位置签到为核心的垂直型位置签到服务企业快速涌现并迅速发展,国内社交网站和微博服务提供商也纷纷更新移动互联网产品,以下月光博客将对国内外较为知名的位置服务进行一些盘点.