【问题标题】:Empty bounding box result with geomodel in GAEGAE 中带有地理模型的空边界框结果
【发布时间】:2011-07-19 20:54:22
【问题描述】:

我正在尝试使用 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 创建的框

我的数据存储中的条目包括: {“venueLat”:55.9570323,“venueCity”:“爱丁堡”,“venueZip”:“EH1 3AA”,“venueLong”:-3.1850223,“venueName”:“爱丁堡剧场”,“venueState”:“”,“venueCountry” : “英国”} 和 {“venueLat”:55.9466506,“venueCity”:“爱丁堡”,“venueZip”:“EH8 9FT”,“venueLong”:-3.1863224,“venueName”:“爱丁堡节日剧院”,“venueState”:“”,“venueCountry” ": "英国"}

两者的位置都在上面定义的边界框内。我已经打开了调试,并且边界框获取似乎确实搜索了地理单元,因为我得到了以下行的输出:

INFO 2011-07-19 20:47:09,487 geomodel.py:114] bbox 查询查看了 4 个地理单元

但是,似乎没有返回任何结果。我确保我为所有模型运​​行了 update_location() 以确保基础地理单元数据是正确的。有人有什么想法吗?

谢谢

【问题讨论】:

  • 您发现问题了吗?我也被困在这个问题上
  • 肖恩?本?任何解决方案。我被困在同一个地方,但要进行邻近搜索

标签: python google-app-engine geohashing


【解决方案1】:

要添加到数据库的代码 -

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。

【讨论】:

    猜你喜欢
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    相关资源
    最近更新 更多