0

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

现在我有模型用户,它有 :lat 和 :long 字段,查询如下:

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

有没有更优雅的方法来做到这一点?

4

3 回答 3

0

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

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

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

实际上,我怀疑您的意思根本不是介于两者之间,而是真正的意思是“介于”之间:

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

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

于 2012-07-28T14:03:04.633 回答
0

我找到了一个很好的解决方案。我使用位置 => 类型:点。和 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
于 2012-07-31T18:22:07.943 回答
0

根据您使用的数据库引擎 - 我使用 MySQL。你应该看看“空间”字段类型。您可以将经纬度存储为一个点,然后查询它是否属于多边形。例如,我有一个 5000 点的多边形,我查询它以查看是否有任何点落在其中。

于 2012-07-28T16:20:30.983 回答