pythonさんでジオコーディングと逆ジオコーディング
というのを書きましたが、いつまにかGoogle map apiがV3になっていました。
V3になって、Google Map APIを利用するためのキーが必要なくなりました。
なので、V3版で場所の名前から緯度経度取得するジオコーディングとその逆をpythonでやってみました。
Google map api V3でのジオコーディングに関しては、
http://code.google.com/intl/en/apis/maps/documentation/geocoding/
に書いてあります。
コードは以下のような感じです。
google app engineで利用することを前提にしているので
urlfetchを使っていますが、そうでないならばそこを置き換える必要があります。
jsonのパーサーも場合によって変更が必要だと思います。
import urllib
from google.appengine.api import urlfetch
import django.utils.simplejson as json
from django.conf import settings
#場所名から緯度経度取得
def geocoding(addr):
url = 'http://maps.google.com/maps/api/geocode/json?'
url = url + '&language=ja&sensor=false®ion=ja'
url = url + '&address=' + urllib.quote(addr.encode('utf-8'))
result = urlfetch.fetch(url)
if result.status_code != 200:
return None
obj = json.loads(result.content)
if obj["status"] != "OK":
return None
ret = {}
ret['lon'] = str(obj["results"][0]["geometry"]["location"]["lng"])
ret['lat'] = str(obj["results"][0]["geometry"]["location"]["lat"])
return ret
#緯度経度から場所名取得
def regeocoding(lat,lon):
url = 'http://maps.google.com/maps/api/geocode/json?'
url = url + '&language=ja&sensor=false®ion=ja'
url = url + '&latlng=' + str(lat) + ',' + str(lon)
result = urlfetch.fetch(url)
if result.status_code != 200:
return None
obj = json.loads(result.content)
if obj["status"] != "OK":
return None
addr = None
for result in obj["results"]:
if "sublocality" in result["types"]:
addr = result["formatted_address"]
addr = addr.replace(u'日本, ', '', 1)
break
return addr
0 件のコメント:
コメントを投稿