2010-02-11 56 views
5

我正在嘗試使用GeoModel python模塊來快速訪問我的Google App Engine應用程序的地理空間數據。 我只是遇到了一些關於我遇到的問題的一般問題。 有兩個主要方法,proximity_fetch和bounding_box_fetch,您可以用來返回查詢。它們實際上會返回結果集,而不是過濾的查詢,這意味着您需要在傳遞過濾查詢之前完全準備好過濾的查詢。它還限制您對查詢集進行迭代,因爲結果已被提取,而您沒有將偏移量輸入到提取中的選項。帶Google App Engine的GeoModel - 查詢

缺少修改代碼,任何人都可以推薦一個解決方案指定偏移到查詢中嗎?我的問題是,我需要檢查每個結果對一個變量,看看我能否使用它,否則扔掉它並測試下一個。我可能遇到需要進行額外獲取的情況,但是以偏移量開始。

+0

http://code.google.com/p/geomodel/issues/detail?id=3&colspec=ID%20Type%20Summary%20Status%20Priority%20Owner%20Stars%20Milestone – Uri 2011-08-30 13:53:07

回答

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] 
1

有這樣做沒有實際的方法,因爲geoquery呼叫轉予成多個數據存儲區查詢,其合併在一起成爲一個單一的結果集。如果您能夠指定偏移量,則在返回所請求的結果之前,地理查詢仍然必須獲取並丟棄所有前n個結果。

更好的選擇可能是修改地理查詢以支持遊標,但每個查詢都必須返回一組遊標,而不是一個遊標。