2011-07-19 5 views
0

私は、GAEでジオモデルを使用してバウンディングボックスのフェッチを行うことを試みています。ボックスを定義すると、ジオモデルのフェッチは、このボックス内にある座標を持つすべての結果を返します。私は現在(-3.114624、55.497527)GPSの緯度と経度を入力し、そのようにように、この座標の所定の範囲内、N、S、Eとのバウンディングボックスを確立W午前:GAEのジオモデルで空白のバウンディングボックスの結果

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:41129 main.py:117] N:56.497527 E:-3.214624 S:54.497527、W:-3.014624

私のデータストアのエントリには、 {"venueLat":55.9570323、 "venueCity": "Edinburgh"、 "venueZip": "EH1 3AA"、 "venueLong":-3.1850223、 "venueName": "Edinburgh Playhouse" venueLong ":" venueState ":" "、" venueCountry ":" UK "} および {" venueLat ":55.9466506、" venueCity ":"エジンバラ "、" venueZip ":" EH8 9FT "、" venueLong ":-3.1863224、" venueName ":" Festival Theatre Edinburgh "、" venueState ":" "、" venueCountry ":" UK "}

どちらもほとんどの場合、上で定義したバウンディングボックス内の位置を持ちます。私は上でデバッグを有効にしているし、バウンディングボックスがフェッチ私はの線に沿って出力を得るため、geocellsを検索するように見えるん:

INFO 2011-07-19 20:47:09487 geomodel.py:114] BBOXクエリが見えました4つのジオセルで

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

おかげ

+0

問題を見つけたことはありますか?私もこれについています – Ben

+0

ショーン?ベン?それに対する解決策。私は同じ場所で立ち往生していますが、近接検索 – Aman

答えて

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を呼び出すために覚えているだけでなくバウンディングボックスクエリで動作するはず

オブジェクトをデータベースに追加する前に

関連する問題