Ruby Geocoderを使う
Tableauをちょいちょい使うことがあり地図表示用に緯度経度データを準備することにした。(Tableauは県名などから緯度経度情報に変換してくれる機能があるが、保有しているデータの市町村名だと結構厳しい場合がある ○船橋 ×船橋市)RubyでGeocoderってのが便利そうなので早速使ってみた。※数年前は東大CSVアドレスマッチングサービスを使用していた。
準備したRubyコード(郵便番号から住所と緯度経度を取得する)
# -*- encoding: Shift_JIS -*- require 'geocoder' Geocoder.configure(:language => :ja, :units => :km, :lookup => :google) # 設定 open("./zip.txt" ) {|fin| fin.each {|zip| res_ad = Geocoder.search(zip.chomp.encode('utf-8')) # 一応utf8にしとく res = [zip.chomp] res << res_ad[0].address_components.map{|ad| ad['long_name']}[1..-1].reverse.join(' ').encode('Shift_JIS') res << res_ad[0].geometry['location'].values.join("\t").encode('Shift_JIS') puts res.join("\t") } }
geocoderは地名やIPアドレス、緯度経度などを与えて検索することも出来る。また様々なAPIに対応している。デフォルトはGoogle Geocoding APIでGeocoder.configureで変更することができる。Google Geocoding APIの場合は1日あたりの位置情報リクエストが 2,500回に制限されているらしいので、その場合は他API用にコードを書き換える。
proxy環境の場合は、設定にproxyサーバー情報を追加する。こんな感じ。
Geocoder.configure(:language => :ja, :units => :km, :lookup => :google, :http_proxy => 'ユーザーID:パスワード@xxx.yyy.zzz:8080', :timeout => 10 )
取得する郵便番号のリスト(zip.txt)
103-0001 103-0002 103-0003 103-0004 103-0005
結果
103-0001 日本 東京都 中央区 日本橋小伝馬町 35.691126,139.7788326 103-0002 日本 東京都 中央区 日本橋馬喰町 35.6936397,139.7819296 103-0003 日本 東京都 中央区 日本橋横山町 35.6931621,139.7835989 103-0004 日本 東京都 中央区 東日本橋 35.6918428,139.7854238 103-0005 日本 東京都 中央区 日本橋久松町 35.6897153,139.7841379
参考