使用Alex Reisner的Ruby Geocoder并找到.near方法非常有用。我们有一个问题是我们如何设置它以便我们可以在原点之间搜索距离x和距离y之间的对象(此时.near方法仅设置它看起来的最大距离): documentation here
我们正在寻找类似的东西:
places = Place.near("Washington", min_distance, max_distance).reorder("score")
或修改查询的某种方式,以便我们在不使用.reorder(我们用于对另一个“得分”字段进行排序)的情况下获得相同的效果
我们想要的最终结果是能够按分数排序的位置在距离原点x和y英里之间。
答案 0 :(得分:1)
AFAIK本身并未实施。
如果使用ActiveRecord,您可以尝试使用Geocoder的private class methods(参见第105至147行)来推广您自己的“反向”方法,其算法应该更多或更少:
Geocoder::Calculations#bounding_box
#distance_sql(lat,lon,options)
> = min_distance 将此逻辑填入where
范围内,将其链接到near
,然后vo!如果您感到懒惰,您甚至可以复制/粘贴整个方法,只需更改<=
谓词即可。
在旁注中,在地理编码器的github上提交功能请求会很棒,因为我认为它可以很快为它们实现。
答案 1 :(得分:1)
Geocoder生成的查询包含distance
列,因此您只需为最小距离添加条件,例如:
Venue.near("Washington", max_distance).having("distance >= ?", min_distance)
请注意,您需要使用HAVING
,而不是WHERE
。