【问题标题】:GeoModel with Google App Engine - queries使用 Google App Engine 的 GeoModel - 查询
【发布时间】:2011-01-15 22:35:47
【问题描述】:

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

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

【问题讨论】:

标签: python google-app-engine geolocation geospatial


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      相关资源
      最近更新 更多