geocoder地名から緯度経度に変換or緯度経度から住所変換が簡単にできるgem

地名から緯度経度を求めたり、緯度経度から住所登録をやる場合に便利なのが、この『alexreisner/geocoder』です。
Active Recordと組み合わると、緯度経度を登録したら後は自動で変換を行うカラムを追加できるといったことが可能になります。


Gemのインストール

いつ戻おりGemfileに以下を追加して、bundle installを実行してください。

1
gem 'geocoder'

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? }

地図を表示

こちらは単に450×300のサイズのGoogle Mapsを表示するURLですが、よく併用するので念の為hamlで追記。

1
= image_tag "http://maps.google.com/maps/api/staticmap?size=450x300&sensor=false&zoom=16&markers=#{@location.latitude}%2C#{@location.longitude}"

参考リンク

#273 Geocoder - RailsCasts

Ruby geocoderがすごい - もぎゃろぐ