根据经纬度实现附近查找

网上找到的几种办法:

  1. 范围查找: blog.charlee.li/location-search/
  2. geohash算法: www.cnblogs.com/dengxinglin/archive/2012/12/14/2817761.html
  3. Mongodb的Geospatial indexes: docs.mongodb.org/manual/applications/geospatial-indexes/
  4. mysql扩展: github.com/lucasepe/lib_mysqludf_haversine

mongodb的Geospatial indexes应该是最强大的,提供了丰富的查询方法。缺点是增加了运维成本,对于不是专门做LBS的应用来说,也是一个问题。

第1,4种方法原理是一样的, 用到了haversine 公式:

  • 第1种算出来的是经纬度范围,然后再以该范围为条件查询数据库,把公式计算放在了应用层。
  • 第4种得出的两点的距离计算结果,可以用该结果来作为返回字段、过滤条件和排序, 但是数据量大的时候无法使用索引也是一个问题。
  • 这里还有haversine 公式各种语言的实现: www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe