2011/07/04

地名と共に画像をアップすると、マップ上にコメント付きで画像を配置できるGoogle App Engineアプリを試してみました



地名と共に画像をアップすると、マップ上にコメント付きで画像を配置できるGoogle App Engineアプリを試してみました。

Google App Engine と Maps で作ったWebアプリのソースを公開されている方がいました。面白そうなソースなので、設置をして試してみました。このような動くサンプルを見せていただけると、とても良くGoogle App Engineの構造が分かります。感謝!

自分のアカウントでアップしてみました。Pythonの部分は1点のみ修正をしています。見栄えについては変更しました。

My Photo in Google Maps on GAE
http://vivo-map.appspot.com/maps


Pythonのソースの修正した部分について。ローカルで動作テストをすると、ジオコーディングは正常に動作するのですが、サーバ上に上げると、緯度経度の取得が出来ない現象がありました。サーバ上で何が起きているのかをステータスコードで確認をすると、「google.maps.GeocoderStatus.OVER_QUERY_LIMIT」というステータスを取得していることが分かりました。これは、「使用制限回数の上限を超えたことを示している」そうです。ローカルからのリクエストは問題なく、サーバからのリクエストで問題が起きるのが、よく分かりません。

ジオコーディングをしている下記の部分を変更してみました。
class PostPage(webapp.RequestHandler):

  def getGeometory(self, place):
    url = u"http://maps.google.com/maps/api/geocode/xml?address=%s&sensor=false" % urllib.quote(place.encode('utf8'))
    result = urlfetch.fetch(url)
    lat = 35.6895060 # 東京
    lng = 139.6917010 # 東京
    if result.status_code == 200:
      doc = xml.dom.minidom.parseString(result.content)
      if doc.getElementsByTagName('status').item(0).childNodes[0].data == "OK":
        lat = doc.getElementsByTagName('lat').item(0).childNodes[0].data
        lng = doc.getElementsByTagName('lng').item(0).childNodes[0].data

    return db.GeoPt(lat, lng)

Pythonのgooglemapsモジュールを使った検索にしてみました。内部では同じことをしているのだから、ダメかと思いましたが、サーバ上でも動作をしました。
# モジュールを追加
from googlemaps import GoogleMaps

class PostPage(webapp.RequestHandler):

  def getGeometory(self, place):
    gmaps = GoogleMaps()
    address = place.encode('utf8')
    lat, lng = gmaps.address_to_latlng(address)  

    return db.GeoPt(lat, lng)

でたらめな場所(地名/駅名/〒)の情報でも、何かしらの場所の緯度経度に変換をして地図にポイントをします。

下記の記事のソースを使わせていただきました。

Google App Engine と Maps でWebアプリ作ってみた
http://sakitake4.blogspot.com/2011/04/google-app-engine-maps-web.html?spref=tw


ありがとうございました。

0 件のコメント:

人気の投稿 (過去 30 日間)