【问题标题】:ActiveRecord query by computed value based on each row's valuesActiveRecord 根据每行的值通过计算值查询
【发布时间】:2015-02-22 10:20:30
【问题描述】:

我正在尝试解决“查找附近的送货”类型的问题,您需要找到送货范围覆盖您公寓的所有送货餐厅。

假设我们有

# Restaurant.rb
geocoded_by :location
:latitude
:longitude
:radius

我收到一个搜索查询

# search_queries
search_queries[latitude] = 36.13422
search_queries[longitude] = -122.23411

我目前使用 Geocoder 的低效解决方案是

coord = [search_params[:latitude], search_params[:longitude]]
nearby_deliveries = Restaurant.all.select { |res| res.distance_from(coord) <= res.radius }

Geocoder 仅提供一种搜索半径内附近对象的方法,但如何搜索半径覆盖目标的对象?

我在想我应该做一些类似(伪代码)的事情

Restaurant.where("radius >= THIS.distance_from(target_lat, target_lng)")

Restaurant.where("radius >= Geocoder::Calculations.distance_between([latitude, longitude], [target_lat, target_lng])

但我不知道如何将 Geocoder 的计算与查询交织在一起。

非常感谢任何帮助!

【问题讨论】:

    标签: ruby-on-rails activerecord rails-geocoder ruby-on-rails-4.2


    【解决方案1】:

    我不会直接回答,但我有两个解决您问题的方法的建议 寻找最近的邻居

    看gem kdtree https://github.com/gurgeous/kdtree/blob/master/README.md

    或者

    查看 Algolia.com 服务,他们提供地理定位搜索作为一项功能。

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      相关资源
      最近更新 更多