我如何检查我的纬度/经度是否在城市范围内,或者例如,大伦敦被包围:

[bbox=-0.489,51.28,0.236,51.686]

来源 :

http://wiki.openstreetmap.org/wiki/Bounding_Box

如何检查位置(纬度/经度):

51.55238,0.047032

已经有 gem 了吗?或者什么是最好的方法来做到这一点?

赏金更新:

我有一个可行的解决方案,但我觉得它不是正确的解决方案,我使用的是 geocoder gem,而我的用户具有 geocoded_by 和 lat/long 属性。所以这是我的方法:
def self.user_from_dublin(user_id)
  near([53.349937,-6.261917], 15).pluck(:id).include?(user_id)
end

所以这会加载都柏林的所有用户,并将用户的 id 与都柏林的用户进行比较。如果找到 id,则认为用户来自都柏林。

我认为当有更多用户时这不会很好地工作。

更新

我正在使用 postgres 数据库

最佳答案

如果它是一个 bool 值,为什么不使用 where 将结果仅限于您的用户。这样它只会涉及一个 SQL 查询,该查询要么是空的,要么大小为 1(您的用户是唯一的记录)

def self.user_from_dublin(user_id)
  !(near([53.349937,-6.261917], 15).where(id: user_id).empty?)
end

当您的用户不在边界内时,empty? 将为真,因此开头的 ! 将否定这一点,当用户不在边界内时,您的函数将返回 false

10-08 16:43