Ruby on rails Ruby地理编码器如何设置最小距离

Ruby on rails Ruby地理编码器如何设置最小距离,ruby-on-rails,ruby,geocoding,Ruby On Rails,Ruby,Geocoding,使用Alex Reisner和查找.near方法非常有用。我们面临的一个问题是如何设置它,以便我们可以搜索距离原点x和距离y之间的对象(目前.near方法仅设置看起来的最大距离): 我们正在寻找类似于: places = Place.near("Washington", min_distance, max_distance).reorder("score") 或者通过某种方式修改查询,以便在不使用.reorder的情况下获得相同的效果(我们使用它对另一个“分数”字段进行排序) 我们想要的最终

使用Alex Reisner和查找.near方法非常有用。我们面临的一个问题是如何设置它,以便我们可以搜索距离原点x和距离y之间的对象(目前.near方法仅设置看起来的最大距离):

我们正在寻找类似于:

places = Place.near("Washington", min_distance, max_distance).reorder("score")
或者通过某种方式修改查询,以便在不使用.reorder的情况下获得相同的效果(我们使用它对另一个“分数”字段进行排序)


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

AFAIK它不是本机实现的

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

  • 使用
    Geocoder::Calculations#bounding_box
  • 构建SQL以查找边界框中的所有记录,并使用
    #distance\u SQL(lat、lon、options)
    >=min\u distance

把这个逻辑塞进
范围,把它链接到
附近的
,瞧!如果您感到懒惰,您甚至可以复制/粘贴整个方法,只需更改
,Geocoder生成的查询包含一个
距离
列,因此您只需为最小距离添加一个条件,例如:

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

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

谢谢-很好的建议。我以前从未破解过gem代码——它是用您的常规代码(heroku)部署到生产环境中的吗?还是我需要做一些特殊的事情?我不会破解gem本身,只是在您自己的代码中重新打开正确的模块/类。一种简单的方法是在/lib中创建一些文件,并在初始值设定项中要求它们。如果你想变得更干净,创建你自己的gem,让它依赖于geocoder。