使用Google应用引擎查询的GeoModel

2024-05-29 02:53:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用GeoModel python模块为我的googleappengine应用程序快速访问地理空间数据。 我只是对我遇到的问题有一些一般性的问题。 有两个主要的方法,邻近性取数和边界框取数,可以用来返回查询。它们实际上返回一个结果集,而不是一个过滤的查询,这意味着您需要在传入之前完全准备一个过滤查询。它还限制了您对查询集的迭代,因为结果是提取的,并且您没有在获取中输入偏移量的选项。在

除了修改代码之外,有人能推荐一种在查询中指定偏移量的解决方案吗?我的问题是,我需要对照一个变量检查每个结果,看看是否可以使用它,否则就把它扔掉,然后测试下一个。我可能会遇到这样的情况:我需要做一个额外的提取,但是从偏移量开始。在


Tags: 模块方法代码应用程序选项情况解决方案地理
2条回答

没有实际的方法可以做到这一点,因为对geoquery的调用会分解为多个数据存储查询,并将这些查询合并到一个结果集中。如果能够指定偏移量,geoquery仍然必须获取并丢弃所有前n个结果,然后才能返回所请求的结果。在

一个更好的选择可能是修改geoquery以支持游标,但是每个查询都必须返回一组游标,而不是一个。在

也可以直接使用模型的location_geocells。在

from geospatial import geomodel, geocell, geomath

# query is a db.GqlQuery
# location is a db.GeoPt

# A resolution of 4 is box of environs 150km
bbox = geocell.compute_box(geocell.compute(geo_point.location, resolution=4))
cell = geocell.best_bbox_search_cells (bbox, geomodel.default_cost_function)

query.filter('location_geocells IN', cell)

# I want only results from 100kms.
FETCHED=200
DISTANCE=100
def _func (x):
  x.dist = geomath.distance(geo_point.location, x.location)
  return x.dist

results = sorted(query.fetch(FETCHED), key=_func)
results = [x for x in results if x.dist <= DISTANCE]

相关问题 更多 >

    热门问题