一条关于用 MySQL 查找某个范围(比如 5 公里内)用户 timeline 更新的 sql

2015-08-06 15:42:29 +08:00
 gangsta

这应该算是LBS最常见的一个功能了吧:
用户查看timeline时首先取得自己当前GEO(经纬度坐标),然后与数据库里的经纬度经行计算、比较后排序.
其实就是这个问题:
http://stackoverflow.com/questions/1006654/fastest-way-to-find-distance-between-two-lat-long-points

google了一下找到挺多的,请教下大家有没有跑在线上的,正确稳定的sql供参考下呢?

2753 次点击
所在节点    MySQL
3 条回复
gangsta
2015-08-06 15:48:27 +08:00
刚才Google的时候才发现好多不知道的mysql内置函数啊:MBRContains() RADIANS() ...
zado
2015-08-06 15:49:57 +08:00
这是我做的在线上跑的: http://www.zxapi.com/last.html 我是用键值数据库来存储和检索的。先用类似 GeoHash 的编码方式对坐标编码,检索的时候按需要的精度选取合适的前缀去列举,当然因为 GeoHash 算法的原因,范围要预估大一点,然后计算每个点的距离,然后排序选取距离最小的那一部分。
zhicheng
2015-08-06 15:50:00 +08:00
新的 MySQL 和 MariaDB 已经有了 Geo 的功能了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/211266

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX