1

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

假设我们有

# 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 }

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

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

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

或者

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

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

任何帮助是极大的赞赏!

4

1 回答 1

0

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

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

或者

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

于 2015-02-22T02:20:30.340 回答