ruby-on-rails - Ruby Geocoder 如何设置最小.near距离

标签 ruby-on-rails ruby geocoding

使用 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/

相关文章:

ruby-on-rails - Mongoid 默认范围覆盖默认值。为什么?

ruby - 替换 Matrix 对象的内部状态

ruby - 如何以特定用户身份运行 Chef 资源

google-maps - Google Maps APIv3高程分辨率

ruby-on-rails - 如何在事件管理员中的多个选择中填充值(使用 select2)

ruby-on-rails - 删除 Assets 预编译的console.log

ruby-on-rails - 我有两个相互依赖的模型才有效。我如何为他们创建有效的工厂?

ruby-on-rails - 将 YAML 与变量一起使用

javascript - 谷歌地图/jquery 反向地理编码

google-maps - Google Maps V3 API - 超过查询限制,但只有 1 个请求