0

非常にシンプルなジオロケーションベースのアプリを構築するためのソリューションを探しています。現在のユーザーの場所を保持し、特定の座標に近いユーザーを選択する必要があります。したがって、フォースクエアまたはグーグルマップ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

「notbetween」はSQLでほとんど使用されないものの1つですが、使用するためにあります。「ない(: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

使用しているデータベースエンジンによっては、MySQLを使用しています。'Spatial'フィールドタイプを確認する必要があります。緯度経度をポイントとして保存し、それがポリゴン内にあるかどうかを確認するためにクエリを実行できます。たとえば、5000ポイントのポリゴンがあり、その中にポイントが含まれるかどうかを確認するためにクエリを実行します。

于 2012-07-28T16:20:30.983 に答える
0

私は良い解決策を見つけました。location => type:pointを使用しました。そして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 に答える