地名から緯度経度を求めたり、緯度経度から住所登録をやる場合に便利なのが、この『alexreisner/geocoder』です。
ActiveRecordと組み合わると、緯度経度を登録したら後は自動で変換を行うカラムを追加できるといったことが可能になります。
Gemのインストール
いつもどおりGemfile
に以下を追加して、bundle install
を実行してください。
Modelにカラムを追加
モデルに緯度経度を表すカラムlatitude, longitude
を追加するマイグレーションを実行。
1
2
| rails generate migration AddLatitudeAndLongitudeToModel latitude:float longitude:float address:string
rake db:migrate
|
Modelに緯度経度から住所に自動変換
これで、latitude, longitude
を登録すると、address
カラムを自動で取得してくれるようになります。
1
2
| geocoded_by :address
after_validation :geocode, if: Proc.new { |a| a.address_changed? }
|
Modelに住所を登録すると緯度経度に自動変換
逆にaddress
カラムを登録すると、緯度経度latitude, longitude
を取得することも可能です。
1
2
| reverse_geocoded_by :latitude, :longitude
after_validation :reverse_geocode if: Proc.new { |a| a.latitude_changed? or a.longitude_changed? }
|
地図を表示
こちらは単に450x300のサイズのGoogle Mapを表示するURLですが、よく併用するので念の為haml
で追記。
1
| = image_tag "http://maps.google.com/maps/api/staticmap?size=450x300&sensor=false&zoom=16&markers=#{@location.latitude}%2C#{@location.longitude}"
|
Special Thanks
#273 Geocoder - RailsCasts
Ruby geocoderがすごい - もぎゃろぐ