0

Python でジオモデルを使用して、GAE でバウンディング ボックス フェッチを実行しようとしています。ボックスを定義すると、ジオモデル フェッチによって、このボックス内にある座標を含むすべての結果が返されると理解しています。現在、GPS の緯度と経度 (55.497527、-3.114624) を入力してから、この座標の特定の範囲内に N、S、E、W のバウンディング ボックスを次のように設定しています。

latRange = 1.0
longRange = 0.10
provlat = float(self.request.get('latitude'))
provlon = float(self.request.get('longitude'))
logging.info("Doing proximity lookup")
theBox = geotypes.Box(provlat+latRange, provlon-longRange, provlat-latRange, provlon+longRange)
logging.info("Box created with N:%f E:%f S:%f, W:%f" % (theBox.north, theBox.east, theBox.south, theBox.west))
query = GeoVenue.all().filter('Country =', provcountry)
results = GeoVenue.bounding_box_fetch(query, theBox, max_results=10)
if (len(results) == 0):
    jsonencode = json.dumps([{"error":"no results"}])
    self.response.out.write(jsonencode)
    return;
...

ボックスのログ出力で指定された範囲内に結果があるという事実を知っていても、これは常に空の結果セットを返します。

INFO 2011-07-19 20:45:41,129 main.py:117] N:56.497527 E:-3.214624 S:54.497527、W:-3.014624 で作成されたボックス

私のデータストアのエントリには次のものが含まれます。 : "", "venueCountry": "UK"} and {"venueLat": 55.9466506, "venueCity": "Edinburgh", "venueZip": "EH8 9FT", "venueLong": -3.1863224, "venueName": "フェスティバルTheatre Edinburgh", "venueState": "", "venueCountry": "UK"}

どちらも、上で定義したバウンディング ボックス内にある位置を確実に持っています。デバッグをオンにしましたが、次の行に沿って出力が得られるため、バウンディング ボックス フェッチはジオセルを検索しているように見えます。

INFO 2011-07-19 20:47:09,487 geomodel.py:114] bbox クエリは 4 つのジオセルを調べました

ただし、結果が返されることはないようです。すべてのモデルに対して update_location() を実行して、基になるジオセル データが正しいことを確認しました。誰にもアイデアはありますか?

ありがとう

4

1 に答える 1

0

データベースに追加するコード -

from google.appengine.ext import db
from models.place import Place

place = Place(location=db.GeoPt(LAT, LON)) # location is a required field 
                                           # LAT, LON are floats
place.state = "New York"
place.zip_code = 10003
#... set other fields
place.update_location() # This is required even when 
                        # you are creating the object and 
                        # not just when you are changing it
place.put()

近くのオブジェクトを検索するコード

base_query = Place.all() # apply appropriate filters if needed
center = geotypes.Point(float(40.658895),float(-74.042760))
max_results = 50
max_distance = 8000

results = Place.proximity_fetch(base_query, center, max_results=max_results,
                                max_distance=max_distance)

オブジェクトをデータベースに追加する前に update_location を呼び出すことを忘れないでください。

于 2011-12-03T04:11:35.903 に答える