使用mysql来实现lbs(地理位置服务)功能

标签: 收藏文章 lbs | 发表时间:2012-11-10 11:45 | 作者:admin
出处:http://blog.haohtml.com

现在大型的网站实现的lbs服务基本上是用mongodb的实现定位的(gps不太清楚)。对于小的应用来说,有些大材小用了,而且还大大增加了维护成本。这里用mysql来实现lbs的功能。

以下是从“知乎”网上的一篇文章( http://www.zhihu.com/question/20059072)。

数据库设计层面,有两个方案

(1)字段主要包括 userId,lat,lng。分别代表用户ID、最近一次 Checkin 的经度、纬度。
lat/lng 建立复合索引。

然后通过手机的定位,得到自己的位置,比如记为 myLat,myLng。
代码如下,先做一个计算,算出 1km 所对应的经纬度范围:
double range = 180 / Math.PI * 1 / 6372.797;      //里面的 1 就代表搜索 1km 之内,单位km
double lngR = range / Math.cos(myLat * Math.PI / 180.0);
double maxLat = myLat + range;
double minLat = myLat - range;
double maxLng = myLng + lngR;
double minLng = myLng - lngR;

然后执行 SQL :
SELECT * FROM checkinTable WHERE ((lat BETWEEN ? AND ?) AND (lng BETWEEN ? AND ?))
这四个问号,分别代入变量
minLat、maxLat、minLng、maxLng

然后就可以查询得到结果
但是,这样得到的结果不是有序的。
如果要排序,在客户端执行。
不建议在 SQL 层上执行,因为上述的那个 SQL 是可以用到索引进行查询的,一旦引入排序后,就会影响效率。

(2)高级用法,但是有点大材小用的感觉。
就是使用 Spatial Index(空间索引)。MySQL 5.0 之上的系统,都支持该类型的索引。
数据表可以简化为 userId 和 userLocation。 userLocation 是 Point 类型,同时建立 R-TREE 索引。
SQL 语句直接使用一个非标准的 OpenGIS 函数 DISTANCE 就可以了。
这个部分可以参考 MySQL Spatial Index Manual。如果用其他数据库,应该类似。

经测试发现用这个的方法确实实现。对于小网站来说也足够了。

相关 [mysql lbs 地理位置] 推荐:

使用mysql来实现lbs(地理位置服务)功能

- - haohtml's blog
现在大型的网站实现的lbs服务基本上是用mongodb的实现定位的(gps不太清楚). 对于小的应用来说,有些大材小用了,而且还大大增加了维护成本. 这里用mysql来实现lbs的功能. 以下是从“知乎”网上的一篇文章( http://www.zhihu.com/question/20059072).

探索新的 LBS 商业模式:超越地理位置的束缚

- Michael - 爱范儿 · Beats of Bits
著名的地理位置签到服务 Foursquare 在本周开放了一项新业务:允许任何人建立品牌和商户专属页面,并逐渐脱离地理位置展开互动. “在这项业务之前,每周有约 70 个品牌页面被创建. 但是现在,任何人都能建立这样的页面,并且大家可以 Follow 这个页面. ”Foursquare 的产品经理 Noah Weiss 如是说,目前共有 2500 个品牌入驻.

LBS第二战

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

LBS 已兴,Context Awareness 未起

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

LBS 还能怎么玩?

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

HTML 5中地理位置api小结

- - ITeye博客
  HTML 5提供了地理位置等一系列API可以给用户使用,方便用户制作LBS的地理应用,首先在支持HTML 5的浏览器中,当开启API时,会询问是否用户同意使用api,否则不会开启的,保证安全. 1) 开启,判断是否浏览器支持LBS api.    上面的例子中,还在displayError方法中,捕捉了异常;.

开源地理位置数据库:tile38

- - 标点符
Tile38是地理定位数据存储,空间索引和实时地理围栏. 它支持多种对象类型,包括纬度/经度点,边界框,XYZ平铺,Geohashes和GeoJSON. 地理空间索引,支持类似附近、包含、相交... 通过 webhooks或 pub/sub channels实现实时地理围栏. 支持多种对象: lat/lon,  bbox,  Geohash,  GeoJSON,  QuadKey, and  XYZ tile..

手机LBS位置服务盘点

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

中国 LBS 网站牌照之痛

- Riku - 康国平-艺术解放人民
在互联网领域,特别是中文互联网领域,我最最讨厌牌照,发牌,审批,管制,申请诸如此类的词. 因为一旦涉及到这几个词,就必然存在着腐败、竞争壁垒、暗箱操作,以及不当竞争,使坏. 这些词,相对应的也就有了突然死亡、关门、撤资、裁员、压制创新和企业倒闭等等新闻出现. 刚刚,有从事LBS行业的朋友,发来一条新闻链接, 《7月1日牌照大限 互联网地图监管“紧箍咒”》让我预测一个事情,街旁网jiepang.com在7月1日大限之前,到底能否拿到所谓的互联网地图牌照,街旁这类LBS网站,如果,万一没拿到牌照,到底还能否经营得下去.

BlindSquare:利用 LBS 数据帮助盲人

- - 爱范儿 · Beats of Bits
最近 Foursquare 积累了数量庞大的真实地理位置数据,它拥有 2000 万名用户以及 20 亿次签到. 这些数据不但可以 帮助商户掘金,还可以帮助盲人导航. iOS 应用 BlindSquare 利用 Open Street Maps 来定位用户的位置,然后通过 Foursquare 的数据找出附近有什么地方,再通过苹果内置的 VoiceOver 或 Acapela Group 提供的文本转声音服务,将地名读出来,好让用户知晓,这样便为盲人创建了一个由语音构成的地图.