仅协调RoR 3中的用户地理位置

时间:2012-07-28 13:53:12

标签: sql ruby-on-rails geolocation

我正在寻找一种解决方案来构建非常简单的基于地理位置的应用。它应保留当前用户位置,并选择特定坐标附近的用户。所以我不需要基于foursquare或谷歌地图apis的解决方案,我需要更简单的东西。

现在我有模型用户,它有:lat和:long字段,以及这样的查询:

"SELECT lat, long FROM users WHERE long < :lolow AND long > :lohigh AND lat < :lalow AND long > :lahigh"

还有更优雅的方法吗?

3 个答案:

答案 0 :(得分:0)

这对我来说似乎并不优雅。也许你觉得这更美观了:

SELECT lat, long
FROM users
WHERE long not between :lolow AND :lohigh AND
      lat not between  :lalow AND :lahigh

“not between”是几乎从未在SQL中使用过的东西之一,但它可以用于使用。你也可以说“不(长期:lolow和:lohigh)”

实际上,我怀疑你并不意味着根本不介意,你的意思是“介于”之间:

SELECT lat, long
FROM users
WHERE long between :lolow AND :lohigh AND
      lat between  :lalow AND :lahigh

当“低”值在数值上小于“高”值时,原始查询将不返回任何内容。

答案 1 :(得分:0)

取决于您正在使用的数据库引擎 - 我使用MySQL。你应该看一下'Spatial'字段类型。您可以将lat-long存储为一个点,然后查询它是否属于Polygon。例如,我有一个5000点的多边形,我查询它是否有任何点落在其中。

答案 2 :(得分:0)

我找到了一个很好的解决方案。我使用location =&gt;键入:点。 和SQL代码:

def self.next_to_me(coordinates, distance)
where( "circle :which @> location AND updated_at > :time",
                                                   :which => "<(#{coordinates}),#{distance}>",
                                                   :time => 20.minutes.ago ).limit(100)
end