0

geocoder gem を使用した Rails 3 アプリケーションがあります。ユーザーが私のウェブサイトでアカウントを作成すると、彼は私に自分のアドレスを教えてくれます。ジオコーダーを使用して、彼の緯度と経度をデータベースに保存し、Google マップに配置できるようにしました。

ユーザーが検索を行うとき、彼は自分に最も近いユーザーを見つけなければなりません。

とりあえず、ジオコーダで半径を計算してその中のユーザーを見つけます:

bounds_calc = Geocoder::Calculations.bounding_box(center, radius, units: :km)
users = User.where('? < addresses.lat AND addresses.lat < ?', bounds_calc[0], bounds_calc[2]).where('? < addresses.lng AND addresses.lng < ?', bounds_calc[1], bounds_calc[3])

私がやりたいことは、最も近いものusersから最も遠いものへとソートすることです。それを行う簡単な方法はありますか?

4

2 に答える 2

0

Geocoder を使用してユーザーの配列を並べ替える方法を見つけました。

results = results.sort_by { |x| Geocoder::Calculations.distance_between([x.latitude, x.longitude], [loc.first, loc.second]) }

Peter Goldstein の回答を読む前にコードを作成したので、彼の回答が機能するかどうかはわかりません。ジオコーディングされたインスタンスで呼び出される他の配列ではなく、任意の配列で呼び出すことができるため、私は自分のソリューションを好みます。

ただし、どのソリューションが最速かはわかりません。

于 2013-10-15T08:03:33.443 に答える
0

ジオコーディングされたユーザー インスタンスがあると仮定すると、ジオコーディングされたインスタンスで「nearbys」メソッドを使用できるはずです。したがって、ユーザーの場合は、次のように書くことができるはずです

user.nearbys(radius_in_miles)

ここで、radius_in_miles は境界円の半径 (マイル単位) です。デフォルトの順序は、最も近いものから最も遠いものへです。

于 2013-10-15T03:00:14.590 に答える