1

次の GAE データストア モデル (models/location.py) を取得しました。これを入力します。

from google.appengine.ext import db
class Location(db.Model):
    name = db.StringProperty(required=True)
    country = db.StringProperty(required=False)
    address = db.PostalAddressProperty(required=False)
    coordinates = db.GeoPtProperty(required=False)
    description = db.TextProperty(required=False)

そのために、LocationCreateHandler クラスと関数 _geocode (handlers/location.py) を作成しました。

from google.appengine.ext import db
from google.appengine.api import urlfetch
from webapp2_extras import json
import urllib
from handlers import BaseHandler
from models.location import Location
import logging

class LocationCreateHandler(BaseHandler):
    def post(self):
        name = self.request.get("name")
        country = self.request.get("country")
        address = self.request.get("address")
        coordinates = _geocode(self, address)
        description = self.request.get("description")
        newLocation = Location(name=name, country=country, address=address, coordinates=coordinates, description=description)
        newLocation.put()
        return self.redirect("/location/create")

    def get(self):
        self.render_response("location/create.html")

def _geocode(self, address):
    try:
        logging.info("Geocode address: %s", address)
        parameter = {'address': address.encode('utf-8'), 'sensor': 'false'}
        payload = urllib.urlencode(parameter)
        url = ('https://maps.googleapis.com/maps/api/geocode/json?%s' % payload)
        logging.info("Geocode URL: %s", url)
        result = urlfetch.fetch(url)
        jsondata = json.decode(result.content)
        location = jsondata['results'][0]['geometry']['location']
        coordinates = '%s,%s' % (location['lat'], location['lng'])
        logging.info("Geocode coordinates: %s", coordinates)
        return coordinates
    except:
        return "0.0,0.0"

これを非同期にするにはどうすればよいですか? 現時点では、ユーザーはジオコード ルックアップが完了するまで待たなければなりません。これが機能するようになったら、Location レコードを更新した後に _geocode() も使用する予定です。

「result =」の後の _geocode 部分をまだ把握する必要があります。常に 0.0,0.0 を受け取るため、バグのようです。

-ルカ。

4

2 に答える 2