新手问题 Ruby 做 lbs 怎么计算最近门店或者有什么方法介绍

as181920 · 2013年05月19日 · 最后由 as181920 回复于 2013年05月20日 · 4986 次阅读

需求,根据当前地址,找出最近的门店。

基础材料: 当前地址:微信后台发给的 location_x,location_y 门店的地址,xx 路几号。

一个方法是确定门店的 location x,y,去计算,关键计算有普通对比的方法似乎有点慢咯。mongo 去年说要内建这个功能,不过我找是 postgresql 数据库。

另一个方法,当然是人家不屑的 gem 拉,不知道有木有类似的

任何方法,感谢指点

#1 楼 @bhuztez 好强大且复杂的说,赶时间来不及研究,等有时间了看看这个。先找临时应对方法哈

先用 geocoder

Mongodb 已经有 geospatial indexing 了,如果 postgres 最好用 postgis, 如果查找一个区域内的点,还好说,但如果算距某点最近的点并按距离排序,最好找数据库原生支持的。

看看 mongodb 的原理,能否自己做索引?

mongo 表示无压力啊。我有个站就是 mongodb,就是地图上随便点个位置,找最近的 5 家。 http://jjjg.027xf.com,看是不是满足你的要求?

mongodb,geohash,geocode,gis_distance

昨晚用了 gem geocoder 先实现了查找网店和排序,高级功能暂时不涉及。下次用到了研究上面的这些,性能肯定 db 原生的好。

#4 楼 @hisea #7 楼 @belmount 多谢各位,Thx。

我都是 sql 里自己算的,去当前位置经纬度,加范围多少公里,得到左上和右下两点,然后比较经纬度范围,得到很小的数据,再算出距离,排序

#10 楼 @badboy 1000 家点,都计算一遍再排序,这个消耗 cpu 蛮多吧,还是怎么个优化方法?如果店数量再上一个数量级呢

我们是用 Solr 的 Geospatial 功能来做的,ruby 有 sunspot 这个很好用的 solr gem,可以直接支持。 它还能和全文索引集成在一起,挺方便的。

先分片,在命中片区内再排序

1000 家店,你在当前经纬度 20 公里内能有 100 家你就很牛了好不

@quakewang sphinx 的也挺好用

#12 楼 @quakewang #15 楼 @jonny solr 好像和 ruby 的配套使用是蛮成熟的了,前面用搜索时贪新用了 elasticsearch,也挺好用。solr 还有地理相关的功能阿,学习了。

在用 elasticsearch 之前用 sphinx/coreseek,那个确实快,后来有一些麻烦的逻辑功能,为了开发方便,就换了。不过 sphinx 只搜索吧,没有地理位置原生的东西吧。

为了吃饭,先忙业务活了,这些技术活以后有时间了慢慢研究,先谢过指导。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号