使用产品和位置模型,如何在附近找到“交易”(Rails 3.1.1)

时间:2011-11-18 04:23:20

标签: ruby ruby-on-rails-3 geolocation

我有一个产品模型,在整个城市都有商店(另一个模型商店)的交易。现在,如果有人选择特定商店,我希望我的视图显示该商店地理位置附近区域内所有商​​店的交易(比如在3英里的范围内)。

一种方法是在邮政编码基础上找到所有交易。但想知道是否有更好的方法来做到这一点。也许是一些宝石..

感谢。

2 个答案:

答案 0 :(得分:2)

使用geokit gem:http://geokit.rubyforge.org/。例如:

Store.find(:all, :origin =>[37.792,-122.393], :within=>10)

如果适用于关系数据库。但是,它没有像Geo空间数据库那样进行优化。

答案 1 :(得分:0)

您正在寻找的是空间数据库。您可以通过PostGIS通过Postgres实现此目的。我还强烈建议使用GeoServerMapServer作为PostGIS的前端。一般来说,你会想要对GIS进行一些认真的阅读。这不是单个答案中要涵盖的主题。您可能需要花一些时间在OSGeo网站上寻找。

如果您感觉时髦,可以使用MongoDB's spatial indexes。如果您正在寻找快速解决方案,这可能是我推荐的。 FourSquare实际上完全依赖MongoDB的空间功能。这是他们用来近距离寻找人的方式。因此,对于Mongo,您可以找到类似

之类的附近交易
db.deals.find({
  loc: {
    $near: [YOUR_X, YOUR_Y],
    $maxDistance : DEAL_DISTANCE
  }
});

这将返回您坐标DEAL_DISTANCE内的所有优惠。