「集合知プログラミング」のサンプルコードのGeoサーチを日本対応に修正してみた。

集合知プログラミング」はサンプルコードもたくさん載っている
とても参考になる書籍なのですが
すべてが日本仕様?に修正されているわけではないので
部分的に日本や日本語ではそのまま使えないところもあります。


225ページ「9章 高度な分類手法:カーネルメソッドとSVM」にある
getlocationもその一つです。


ここではYahoo!APIを使って住所から経度緯度を取得しているのですが
残念ながら日本語の住所では検索できません。


せっかくのサンプルコードなので
Yahoo! JAPANが提供する地図Webサービス
使うようにちょっとだけ修正してみました。

yahookey="YOUR API KEY"
from xml.dom.minidom import parseString
from urllib import urlopen,quote_plus

loc_cache={}
def getlocation(address):
  if address in loc_cache: return loc_cache[address]
  data=urlopen('http://map.yahooapis.jp/LocalSearchService/V1/LocalSearch'+\
               '?appid=%s&p=%s&datum=tky' %
               (yahookey,quote_plus(address))).read()
  doc=parseString(data)
  lat=doc.getElementsByTagName('Lat')[0].firstChild.nodeValue
  long=doc.getElementsByTagName('Lon')[0].firstChild.nodeValue
  loc_cache[address]=(float(lat),float(long))
  return loc_cache[address]


このように置き換えると動くと思います。

測地系Yahoo!JapanのAPIで標準の日本測地系です。
世界測地系で結果を得たい場合にはプログラム中のdatum=tkyを
datum=wgsに変更してください。


これで住所はもちろんのこと「東京タワー」や「六本木ヒルズ」といった
ランドマーク名からでも経度緯度が出てくるようになります。


Yahoo!Japan GJです。


ではでは