使用 Alex Reisner 的 Ruby Geocoder并发现 .near 方法非常有用。我们遇到的一个问题是如何设置它,以便我们可以搜索距原点距离 x 和距离 y 之间的对象(目前 .near 方法仅设置看起来的最大距离): documentation here
我们正在寻找类似的东西:
places = Place.near("Washington", min_distance, max_distance).reorder("score")
或者某种修改查询的方法,以便我们在不使用 .reorder 的情况下获得相同的效果(我们用它来对另一个“分数”字段进行排序)
我们想要的最终结果是能够按照分数对距离原点在 x 到 y 英里之间的地点进行排序。
最佳答案
据我所知,它不是 native 实现的。
如果使用ActiveRecord,可以尝试使用Geocoder的private class methods (参见第 105 行到第 147 行)推出自己的“反向”方法,其算法应该或多或少:
- 使用
Geocoder::Calculations#bounding_box
计算最小距离查询的边界框 - 构建 SQL 来查找边界框中的所有记录 AND 和
#distance_sql(lat,lon,options)
>= 最小距离
将此逻辑填充到 where
中范围,将其链接到 near
,瞧!如果您觉得懒,您甚至可以复制/粘贴整个方法,然后更改 <=
谓词。
顺便说一句,最好在地理编码器的 github 上提交功能请求,因为我认为这会很快为他们实现。
关于ruby-on-rails - Ruby Geocoder 如何设置最小.near距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14624669/