5

GeoModel Python モジュールを使用して、Google App Engine アプリの地理空間データにすばやくアクセスしようとしています。直面している問題について、いくつか一般的な質問があります。クエリを返すために使用できる、proximity_fetch と bounding_box_fetch の 2 つの主要なメソッドがあります。実際には、フィルターされたクエリではなく結果セットを返します。つまり、フィルターされたクエリを渡す前に完全に準備する必要があります。また、結果がフェッチされるため、クエリセットを反復処理することも制限されます。フェッチにオフセットを入力するオプション。

コードを変更する以外に、クエリにオフセットを指定するためのソリューションを推奨できる人はいますか? 私の問題は、変数に対して各結果をチェックして、それを使用できるかどうかを確認する必要があることです。それ以外の場合は、破棄して次をテストします。追加のフェッチを行う必要がある場合に遭遇するかもしれませんが、オフセットから始めます。

4

2 に答える 2

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]
于 2011-09-07T19:14:28.947 に答える
1

geoquery への呼び出しは複数のデータストア クエリに発展し、それらが 1 つの結果セットにマージされるため、これを行う実際的な方法はありません。オフセットを指定できたとしても、geoquery は、要求した結果を返す前に、最初の n 個の結果をすべて取得して破棄する必要があります。

カーソルをサポートするように geoquery を変更することをお勧めしますが、各クエリは単一のカーソルではなく一連のカーソルを返す必要があります。

于 2011-09-08T01:14:44.557 に答える