- 更新日: 2015年7月27日
- Ruby
Google Maps Geocoding APIで住所から緯度・経度を取得するRubyコード
Google Maps API の Geocoding(ジオコーディング)API を利用して、住所の文字列から緯度・経度を求める Ruby コードのサンプルです。Google Maps Geocoding API についての詳細は以下から。1日(24時間)で2500回までの API リクエスト制限がある点に注意です。
The Google Geocoding API | Google Maps Geocoding API | Google Developers
Yahoo のジオコーディング API を使う Ruby コードは以下参照。
Yahoo地図API(YOLP)のジオコーダAPIで住所から緯度・経度を求めるRubyコード | EasyRamble
— 環境 —
Ruby 2.1.2
Google Maps Geocoding API で住所から経度・緯度を求める Ruby コード
net/http を使ってリクエストした後に、JSON でレスポンスを受けとるようにしました。GOOGLE_API_KEY の部分は、Google Maps Geocoding API で使う API キーに変更します。試しに利用する場合は、API キーを指定しなくても利用でき、以下サンプルコードでは request_url で API キーを利用しておりません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#!/usr/bin/env ruby require 'pp' require 'net/http' require 'json' require 'singleton' class GoogleGeocoding include Singleton GEOCODER_BASE_URL = "https://maps.googleapis.com/maps/api/geocode/json" GOOGLE_API_KEY = "*****" # get geocodes from address by Google Maps Geocoding API def geocode_from(address) geocodes = { latitude: nil, longitude: nil } encoded_address = URI.encode(address) url = request_url(encoded_address) uri = URI.parse(url) begin response = Net::HTTP.get_response(uri) # check response code case response when Net::HTTPSuccess then # 200 OK data = JSON.parse(response.body) latitude, longitude = get_coordinates(data) geocodes[:latitude] = latitude geocodes[:longitude] = longitude else puts [uri.to_s, response.value].join(" : ") end rescue => e puts [uri.to_s, e.class, e].join(" : ") end geocodes end private def request_url(encoded_address) # when using API Key # "#{GEOCODER_BASE_URL}?address=#{encoded_address}&key=#{GOOGLE_API_KEY}&sensor=false" # when not using API Key "#{GEOCODER_BASE_URL}?address=#{encoded_address}&sensor=false" end def get_coordinates(data) coordinates = data['results'][0]['geometry']['location'] rescue nil if coordinates && coordinates.size == 2 return [ (coordinates['lat'].to_f).round(8), (coordinates['lng'].to_f).round(8) ] end return [ nil, nil ] end end tokyo_tower = "東京都港区芝公園四丁目2-8" kokkai_gijido = "東京都千代田区永田町一丁目7番1号" pp GoogleGeocoding.instance.geocode_from(tokyo_tower) # => {:latitude=>35.6585928, :longitude=>139.7454636} pp GoogleGeocoding.instance.geocode_from(kokkai_gijido) # => {:latitude=>35.6758935, :longitude=>139.7448659} |
GoogleGeocoding#geocode_from に住所の文字列を引数として渡して、緯度・経度をハッシュで返す実装となっています。Google Maps Geocoding API を利用して、簡単に緯度経度を取得することができました。
- Ruby の関連記事
- Gemの作り方(Ruby Gem)
- ローカル開発中のgemをGemfileに書いてインストール
- 熊本地震の余震が夜に多いのは本当か?Rubyプログラムで検証してみた
- El Capitanでgemのnative extensionビルド失敗に対応
- Rubyで親クラスから子クラスの定数を参照
- MacabをRubyで使う
- rbenv/ruby-buildでRuby最新バージョンをインストール
- Rubyでクラスインスタンス変数にインスタンスメソッドからアクセス
- 距離1kmあたりの緯度・経度の度数を計算(日本・北緯35度)
- Yahoo地図API(YOLP)のジオコーダAPIで住所から緯度・経度を求めるRubyコード
Leave Your Message!