我如何检查我的纬度/经度是否在城市范围内,或者例如,大伦敦被包围:
[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
。