2010-02-11 5 views
5

GeoModel python 모듈을 사용하여 Google App Engine 앱의 지형 공간 데이터에 빠르게 액세스하려고합니다. 내가 겪고있는 문제에 대해 몇 가지 일반적인 질문이 있습니다. 쿼리를 반환하는 데 사용할 수있는 proximity_fetch와 bounding_box_fetch의 두 가지 주요 메소드가 있습니다. 실제로 필터 된 쿼리가 아닌 결과 집합을 반환합니다. 즉, 필터링 된 쿼리를 전달하기 전에 해당 쿼리를 완전히 준비해야한다는 의미입니다. 또한 결과 집합을 가져 오는 동안 쿼리 집합을 반복하지 못하도록 제한합니다. 가져 오기에 오프셋을 입력하는 옵션입니다.GeoModel with Google App Engine - 검색어

코드를 수정하지 않은 사람이라면 누구든지 쿼리에 오프셋을 지정하는 솔루션을 추천 할 수 있습니까? 내 문제는 각 결과를 변수와 비교하여 사용할 수 있는지 확인해야하며 그렇지 않으면 버리고 다음 테스트를 수행해야한다. 추가 가져 오기를 수행해야하지만 오프셋으로 시작해야하는 경우가 발생할 수 있습니다.

+0

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

답변

2

모델의 location_geocells으로 직접 작업 할 수도 있습니다. geoquery에 대한 호출이 하나의 결과 집합에 함께 병합 여러 데이터 저장소 쿼리에 양도한다 때문에

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

는이 작업을 수행하는 실제적인 방법은 없습니다. 오프셋을 지정할 수 있다면 지오 쿼리는 요청한 결과를 반환하기 전에 첫 번째 결과를 모두 가져와 버려야합니다.

커서를 지원하기 위해 지오 쿼리를 수정하는 것이 더 나은 옵션 일 수 있지만 각 쿼리는 하나의 커서가 아닌 커서 집합을 반환해야합니다.