跳转到主要内容

在App Engine中索引和查询地理空间数据。

项目描述

GeoModel使用类似于geohash的对象,称为“geocells”,以提供在App Engine中索引和查询地理空间数据的一般化解决方案。GeoModel针对基本房地产查找/商店定位器用例进行了优化,但可以适应用于大型数据集。

使用GeoModel,开发者可以通过简单地从GeoModel类继承来立即对数据存储模型进行地理上下文化。目前,实体可以与单个地理点相关联,并随后根据与边界框的一致性或与搜索中心点的邻近性(最近n个)进行索引和过滤。

更改

版本 0.2.0 (2009-08-31)

版本 0.1.0 (2009-07-15)

  • PyPI初始发布。

创建和保存GeoModel派生实体

要使用GeoModel类,只需声明一个新的模型类,继承自geomodel.GeoModel类,如下所示

>>> import google.appengine.ext.db
>>> import geo.geomodel
>>> class MyEntity(geo.geomodel.GeoModel):
...     foo = google.appengine.ext.db.StringProperty()
...     bar = google.appengine.ext.db.IntegerProperty()

目前,仅支持单点实体。新类型的MyEntity实体将具有location属性,其类型为db.GeoPt,可以根据需要设置。在将实体put()到数据存储之前,请确保调用update_location以同步实体的底层geocell索引属性

>>> some_entity = MyEntity(location=google.appengine.ext.db.GeoPt(37, -122),
...                        foo='Hello',
...                        bar=5)
>>> some_entity.location = google.appengine.ext.db.GeoPt(38, -122)
>>> some_entity.update_location()
>>> some_entity.put()
datastore_types.Key.from_path(u'MyEntity', 1, _app=u'test')

查询您的实体

GeoModel库目前支持两种基本地理空间查询类型

  • 边界框查询

  • 邻近性(最近n个)查询

要执行边界框查询,请使用 bounding_box_fetch 类的如下方法:

>>> import geo.geotypes
>>> results = MyEntity.bounding_box_fetch(
...               MyEntity.all().filter('bar >', 4),  # Rich query!
...               geo.geotypes.Box(39, -121, 37, -123),
...               max_results=10)
>>> results[0].foo
u'Hello'

请注意不要请求太多结果,否则会导致数据存储或请求超时!

要执行邻近查询,请使用 proximity_fetch 类的如下方法:

>>> result = MyEntity.proximity_fetch(
...               MyEntity.all().filter('bar <', 10),  # Rich query!
...               geo.geotypes.Point(39, -121),  # Or db.GeoPt
...               max_results=10,
...               max_distance=160934)  # Within 100 miles.
>>> result[0].foo
u'Hello'

注意,对于多个属性上的丰富查询,您需要在 index.yaml 文件中设置正确的索引。在开发服务器上测试您的应用程序应该会填充该文件所需索引。此外,GeoModel 目前在每个实体(每个地理单元分辨率一个)上需要许多内部属性,这可能导致 index.yaml 文件看起来很混乱。这将是未来版本中希望改变的事情。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

geomodel-0.2.0.tar.gz (16.5 kB 查看哈希值)

上传时间

构建分发

geomodel-0.2.0-py2.5.egg (38.8 kB 查看哈希值)

上传时间

由...

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面