繁体   English   中英

使用Google App Engine的GeoModel - 查询

[英]GeoModel with Google App Engine - queries

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

如果没有修改代码,任何人都可以推荐一个解决方案来指定查询的偏移量吗? 我的问题是我需要针对变量检查每个结果以查看是否可以使用它,否则将其丢弃并测试下一个。 我可能遇到需要进行额外提取的情况,但是从偏移量开始。

您也可以直接使用模型的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]

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM