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 件のコメント:
コメントを投稿