Google App Engine中的GeoModel用法

时间:2012-10-12 06:29:12

标签: python google-app-engine geolocation google-cloud-datastore geocoding

我正在尝试使用Google App Engine的GeoModel类进行proximity_fetch。我想用它的实体是ndb,我不确定我需要下载和导入什么,以及我可以在我的python代码中从谷歌导入的内容。网站似乎有点过时,我想知道是否有人有更多的相关信息。这是我到目前为止,它告诉我Location没有属性proximity_fetch,我知道,但我不知道如何在Location(ndb.Model)类中定义它。

        g = geocoders.Google()

        place, (lat, lng) = g.geocode(inputlocation, exactly_one=False)


        bound = 20
        upper = lat + bound
        lower = lat - bound
        left = lng + bound
        right = lng - bound

        locations = []

        if lat and lng:
            locations = Location.proximity_fetch(
                                                 Location.query(),
                                                 geotypes.Point(lat, lng),
                                                 max_results=50,
                                                 max_distance=500000) 

此外,当我尝试导入geomodel和geotype时,这对我来说非常重要,它会给我一个导入错误,我不知道从哪里获取它们。

非常感谢任何帮助或示例!

2 个答案:

答案 0 :(得分:2)

您应首先查看SVN存储库中的最新代码。您可以在http://code.google.com/p/geomodel/source/checkout

找到相关信息

在您的计算机上本地获得代码后,在主目录中有一个名为geo的目录。您应该将此目录复制到GAE项目中。然后在您的代码中,您从此包导入所需的内容。例如:

from geo import geomodel

现在,关于您的Location模型,为了能够执行proximity_fetch查询,您的模型应该在名为GeoModel的地理模型中扩展所提供的模型。因此,你应该有这样的事情:

class Location(ndb.Model, GeoModel):
....

请注意GeoModel目前使用" old"您在代码中使用的GAE数据存储区db而不是ndb。但是,它不应该造成任何麻烦。

有关如何使用geomodel的更多信息,您还应该查看从SVN获得的代码中也存在的演示。您可以在演示目录中找到它们。

希望这有帮助!

答案 1 :(得分:1)

from geo import geotypes

他们做了一个完整的例子,可以在这里找到:http://code.google.com/p/geomodel/source/browse/trunk/demos/pubschools/handlers/service.py http://code.google.com/p/geomodel/source/browse/#svn/trunk/demos/pubschools

results = PublicSchool.proximity_fetch(
        base_query,
        center, max_results=max_results, max_distance=max_distance)