我有一个产品模型,在整个城市都有商店(另一个模型商店)的交易。现在,如果有人选择特定商店,我希望我的视图显示该商店地理位置附近区域内所有商店的交易(比如在3英里的范围内)。
一种方法是在邮政编码基础上找到所有交易。但想知道是否有更好的方法来做到这一点。也许是一些宝石..
感谢。
答案 0 :(得分:2)
使用geokit gem:http://geokit.rubyforge.org/。例如:
Store.find(:all, :origin =>[37.792,-122.393], :within=>10)
如果适用于关系数据库。但是,它没有像Geo空间数据库那样进行优化。
答案 1 :(得分:0)
您正在寻找的是空间数据库。您可以通过PostGIS通过Postgres实现此目的。我还强烈建议使用GeoServer或MapServer作为PostGIS的前端。一般来说,你会想要对GIS进行一些认真的阅读。这不是单个答案中要涵盖的主题。您可能需要花一些时间在OSGeo网站上寻找。
如果您感觉时髦,可以使用MongoDB's spatial indexes。如果您正在寻找快速解决方案,这可能是我推荐的。 FourSquare实际上完全依赖MongoDB的空间功能。这是他们用来近距离寻找人的方式。因此,对于Mongo,您可以找到类似
之类的附近交易db.deals.find({
loc: {
$near: [YOUR_X, YOUR_Y],
$maxDistance : DEAL_DISTANCE
}
});
这将返回您坐标DEAL_DISTANCE
内的所有优惠。