2

使用 Alex Reisner 的Ruby Geocoder并发现 .near 方法非常有用。我们遇到的一个问题是我们如何设置它,以便我们可以搜索距离原点的距离 x 和距离 y 之间的对象(目前 .near 方法只设置它看起来的最大距离): documentation here

我们正在寻找类似的东西:

places = Place.near("Washington", min_distance, max_distance).reorder("score")

或修改查询的某种方式,以便我们在不使用 .reorder 的情况下获得相同的效果(我们使用它来对另一个“score”字段进行排序)

我们想要的最终结果是能够按分数排序的位置在距离原点 x 到 y 英里之间。

4

2 回答 2

1

AFAIK 它不是本机实现的。

如果使用 ActiveRecord,您可以尝试使用 Geocoder 的私有类方法(参见第 105 到 147 行)来滚动您自己的“反向”方法,算法应该或多或少:

  • 计算最小距离查询的边界框Geocoder::Calculations#bounding_box
  • 构建 SQL 以查找边界框中的所有记录 AND 与#distance_sql(lat,lon,options)>= min_distance

将此逻辑填充到where范围内,将其链接到near,然后瞧!如果您觉得懒惰,您甚至可以复制/粘贴整个方法并更改<=谓词。

附带说明一下,在地理编码器的 github 上提交功能请求会很棒,因为我认为它会很快为他们实现。

于 2013-01-31T13:34:36.893 回答
1

Geocoder 生成的查询包含一distance列,因此您需要做的就是添加最小距离的条件,例如:

Venue.near("Washington", max_distance).having("distance >= ?", min_distance)

请注意,您需要使用HAVING,而不是WHERE.

于 2013-04-03T16:53:16.487 回答