2016-08-07 9 views

答えて

1

これは、ジオコーダーを使用して簡単に行うことができます。あなたのGemfile

gem 'geocoder' 

にこれを追加し、私はあなたがユーザの位置を持っている場合は、最寄りの店舗を表示することを前提とし

bundle install 

実行します。 Geocoderには、正確にはnearメソッドがあります。お店のモデル(app/models/store.rb)で

、店のアドレスはジオコーダの宝石が使用することを

geocoded_by :address 
after_validation :geocode 

注意を追加します。 新しいレコードが作成されると、2行目は緯度と経度のフィールドを自動的に設定します。

コントローラで、特定のユーザーの近くの店舗を取得するコードを追加します(ユーザーの場所がわかっている場合)。

def index 
@current_lat = params[:lat] 
@current_lon = params[:lon] 
if (@current_lat.nil? || @current_lon.nil?) 
    @stores = Store.all 
    render json: @stores 
else 
@stores = Store.near([@current_lat, @current_lon], 10, :units => :km) 
end 

これは、ユーザの現在位置から10km以内にある店舗を取り込みます。あなたはまた、マイルにdefauls単位ハッシュで渡すことができます。より多くの場合

https://github.com/alexreisner/geocoder#for-activerecord-models

+0

@Alain Professionalを使用することができます。さて、あなたはStore上で 'near'メソッドを呼び出して、距離を計算したいユーザーの緯度と経度を渡すことができます。 –

+0

@ AlainProfessionalデフォルトでは、このクエリは距離順に並べられたストアオブジェクトを返します。 https://github.com/alexreisner/geocoder#for-activerecord-models –

+0

よろしくお願いします –

関連する問題