在App Engine中索引和查询地理空间数据。
项目描述
GeoModel使用类似于geohash的对象,称为“geocells”,以提供在App Engine中索引和查询地理空间数据的一般化解决方案。GeoModel针对基本房地产查找/商店定位器用例进行了优化,但可以适应用于大型数据集。
使用GeoModel,开发者可以通过简单地从GeoModel类继承来立即对数据存储模型进行地理上下文化。目前,实体可以与单个地理点相关联,并随后根据与边界框的一致性或与搜索中心点的邻近性(最近n个)进行索引和过滤。
更改
版本 0.2.0 (2009-08-31)
使用单个StringListProperty而不是每个单元格的一个StringProperty。有关如何迁移现有GeoModel实体索引的说明,请参阅http://code.google.com/p/geomodel/wiki/PreRevision8Migration
更多单元测试。
版本 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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 61f99cdd8959e4cfc5981c6b8dc3f989acb5239d5876d73c4e7358bd824c2751 |
|
MD5 | c362e57cb987d0b1c53383076b0aaa8f |
|
BLAKE2b-256 | 05b1d102c703f447a9fe96421c8c6865d3878348631ad6c54bb99445c15451ab |
geomodel-0.2.0-py2.5.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 500bfb528001004d37a47ee48fab55fc604e9d2bedd62564809ba660a613381d |
|
MD5 | 70bec329b3f1216c6d68ed8f1842dc09 |
|
BLAKE2b-256 | c99d74a1f252b32829d76aebb840c187d6aa55252d04df1cd003ffc5ad4c9911 |