
地名から緯度経度を求めたり、緯度経度から住所登録をやる場合に便利なのが、この『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がすごい - もぎゃろぐ