住所しかない時に何とかして緯度経度に変換する

# 住所しかないないけど、正確に地図を表示しろと・・・

何なら地図上にピンをさせと・・・
そういうことって、よくありますよね！
そんな時でも[Google Maps Geocoding API](https://developers.google.com/maps/documentation/geocoding/intro?hl=ja)を使えば、サクッと変換できちゃいました。

# 準備
- [Google Maps Geocoding API](https://developers.google.com/maps/documentation/geocoding/intro?hl=ja)をよく読み、APIキーを入手する
- 変換する元になるデータを用意する（今回は山手線の駅の住所をCSV形式で用意しました）

```csv:address.csv
id,address
1,東京都品川区大崎三丁目6
2,東京都品川区東五反田一丁目26
3,東京都品川区上大崎二丁目16
4,東京都渋谷区恵比寿南一丁目6
5,東京都渋谷区道玄坂一丁目1
6,東京都渋谷区神宮前一丁目14
7,東京都渋谷区代々木一丁目34
8,東京都新宿区西新宿一丁目1
9,東京都新宿区百人町一丁目10
10,東京都新宿区高田馬場四丁目5
11,東京都豊島区目白三丁目3
12,東京都豊島区西池袋一丁目1
13,東京都豊島区南大塚三丁目33
14,東京都豊島区巣鴨一丁目16
15,東京都豊島区駒込一丁目34
16,東京都北区田端一丁目21
17,東京都荒川区西日暮里五丁目22
18,東京都荒川区西日暮里二丁目19
19,東京都台東区根岸一丁目4
20,東京都台東区上野七丁目1
21,東京都台東区上野五丁目26
22,東京都千代田区外神田一丁目17
23,東京都千代田区鍛冶町二丁目13
24,東京都千代田区丸の内一丁目9
25,東京都千代田区有楽町二丁目10
26,東京都港区新橋二丁目20
27,東京都港区海岸一丁目3
28,東京都港区芝五丁目33
29,東京都港区高輪三丁目26
```

- Ruby書く(Faradayを使っているのでインストールをお忘れなく)

```rb
require 'csv'
require 'Faraday'
require 'JSON'

conn = Faraday.new(:url => 'https://maps.googleapis.com') do |builder|
  builder.request :url_encoded
  builder.response :logger
  builder.adapter :net_http
end

advanced_csv = CSV.generate do |csv|
  csv << ['id', 'address', 'lat', 'lng', 'url']
  CSV.foreach('address.csv', headers: true) do |data|
    res = conn.get '/maps/api/geocode/json', {:address => data['address'], :region => 'jp', :key => 'YOUR_API_KEY'}
    geo_data = JSON.load(res.body)
    advanced_data = [
        data['id'],
        data['address'],
        geo_data['results'][0]['geometry']['location']['lat'],
        geo_data['results'][0]['geometry']['location']['lng'],
        "http://maps.google.com/maps?q=#{geo_data['results'][0]['geometry']['location']['lat']},#{geo_data['results'][0]['geometry']['location']['lng']}"
    ]
    csv << advanced_data
  end
end

File.open('advanced_address.csv', 'w') do |file|
  file.write(advanced_csv)
end

puts 'done!'
```

- いざ、変換

# 出来上がり
```csv:advanced_address.csv
id,address,lat,lng,url
1,東京都品川区大崎三丁目6,35.6203552,139.7267832,"http://maps.google.com/maps?q=35.6203552,139.7267832"
2,東京都品川区東五反田一丁目26,35.6261794,139.7239249,"http://maps.google.com/maps?q=35.6261794,139.7239249"
3,東京都品川区上大崎二丁目16,35.6345671,139.7159115,"http://maps.google.com/maps?q=35.6345671,139.7159115"
4,東京都渋谷区恵比寿南一丁目6,35.6464293,139.7097839,"http://maps.google.com/maps?q=35.6464293,139.7097839"
5,東京都渋谷区道玄坂一丁目1,35.6580971,139.7009177,"http://maps.google.com/maps?q=35.6580971,139.7009177"
6,東京都渋谷区神宮前一丁目14,35.6705179,139.7029782,"http://maps.google.com/maps?q=35.6705179,139.7029782"
7,東京都渋谷区代々木一丁目34,35.683258,139.7019083,"http://maps.google.com/maps?q=35.683258,139.7019083"
8,東京都新宿区西新宿一丁目1,35.690371,139.6993833,"http://maps.google.com/maps?q=35.690371,139.6993833"
9,東京都新宿区百人町一丁目10,35.7000393,139.6998412,"http://maps.google.com/maps?q=35.7000393,139.6998412"
10,東京都新宿区高田馬場四丁目5,35.712838,139.7034124,"http://maps.google.com/maps?q=35.712838,139.7034124"
11,東京都豊島区目白三丁目3,35.7206734,139.7064812,"http://maps.google.com/maps?q=35.7206734,139.7064812"
12,東京都豊島区西池袋一丁目1,35.7305781,139.7104165,"http://maps.google.com/maps?q=35.7305781,139.7104165"
13,東京都豊島区南大塚三丁目33,35.7321009,139.7261623,"http://maps.google.com/maps?q=35.7321009,139.7261623"
14,東京都豊島区巣鴨一丁目16,35.7342368,139.7424863,"http://maps.google.com/maps?q=35.7342368,139.7424863"
15,東京都豊島区駒込一丁目34,35.7364199,139.7476692,"http://maps.google.com/maps?q=35.7364199,139.7476692"
16,東京都北区田端一丁目21,35.7377895,139.7605182,"http://maps.google.com/maps?q=35.7377895,139.7605182"
17,東京都荒川区西日暮里五丁目22,35.7317656,139.7672179,"http://maps.google.com/maps?q=35.7317656,139.7672179"
18,東京都荒川区西日暮里二丁目19,35.7287328,139.7709371,"http://maps.google.com/maps?q=35.7287328,139.7709371"
19,東京都台東区根岸一丁目4,35.72172550000001,139.7779508,"http://maps.google.com/maps?q=35.72172550000001,139.7779508"
20,東京都台東区上野七丁目1,35.713443,139.7768235,"http://maps.google.com/maps?q=35.713443,139.7768235"
21,東京都台東区上野五丁目26,35.7072713,139.7751767,"http://maps.google.com/maps?q=35.7072713,139.7751767"
22,東京都千代田区外神田一丁目17,35.69825,139.77198,"http://maps.google.com/maps?q=35.69825,139.77198"
23,東京都千代田区鍛冶町二丁目13,35.6914869,139.7707858,"http://maps.google.com/maps?q=35.6914869,139.7707858"
24,東京都千代田区丸の内一丁目9,35.6803992,139.7671781,"http://maps.google.com/maps?q=35.6803992,139.7671781"
25,東京都千代田区有楽町二丁目10,35.6750275,139.7643617,"http://maps.google.com/maps?q=35.6750275,139.7643617"
26,東京都港区新橋二丁目20,35.66667,139.7592345,"http://maps.google.com/maps?q=35.66667,139.7592345"
27,東京都港区海岸一丁目3,35.6561324,139.7579182,"http://maps.google.com/maps?q=35.6561324,139.7579182"
28,東京都港区芝五丁目33,35.6466138,139.7479443,"http://maps.google.com/maps?q=35.6466138,139.7479443"
29,東京都港区高輪三丁目26,35.6285851,139.7378792,"http://maps.google.com/maps?q=35.6285851,139.7378792"
```

- 人の目で確認しやすいように、GoogleMapsへの直リンクも生成するようにしました。
- どうしても微妙なずれがでたり、そもそもの住所が間違えていたりする可能性もあるので、大事な局面では人の目で最終確認しましょう！