Yahoo!地図情報を利用して、経度緯度から住所を取得する(Ruby版)

ブログの夏休みも終了ということで、2ヶ月ぶりにブログを書く。
ある程度更新しているときは大したことのないことでも記事にするのに、しばらく更新していないと、まあブログに書くことでもないか、となってしまうのが不思議。


さて、この夏は単純なRailsアプリを作っていて、その際に必要となるかどうかわからないけど、緯度経度から大体の住所を取得できたら便利かも、と思った。
住所から緯度経度を取得するための道具はけっこうあるんだけど、その逆となると実はそのための道具があまりない。調べてみると下記の方法が比較的簡単そうだったのでそのRubyバージョンを作ってみた。
Yahoo!地図を利用して、緯度経度から住所を取得する (Yusukebe::Tech)

require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'kconv'

#東京タワーの緯度経度
lat = "35.65538"     #緯度
lon = "139.74876111" #経度

doc = Hpricot(open("http://map.yahoo.co.jp/pl?type=static&lat=#{lat}&lon=#{lon}"))
title = doc.at(:title).inner_text.toutf8

address = title.gsub(/(Yahoo!地図情報 - )|(の周辺地図)/, "")

puts address
#=> 東京都港区芝公園4丁目

HpricotというHTMLパーサを使うとすごく簡単に書ける。Hpricotの使用方法などは下を参照。
http://tam.qmix.org/wiki/Hpricot.html


Yahoo!地図情報のページの文字コードEUC-JPなので、パターンマッチさせるときにUTF-8に変更しておくことと(Railsでの利用も想定していたので)、openするURIに"type=static"を付けたすことに少し注意。"type=static"がないと、タイトルタグの中身が"Yahoo!地図情報 - スクロール地図"になってしまい正しく住所を取得できない。


緯度経度から住所を取得する他の方法としては下のinvgeocoderを利用するという手もある。
http://wiki.knya.net/wiki.cgi?page=invgeocoder
こっちのほうがもしかして楽かも。