【问题标题】:Google App Engine - Searching for Locations within a Specified Distance returning Zero resultsGoogle App Engine - 在指定距离内搜索位置返回零结果
【发布时间】:2013-03-24 05:17:01
【问题描述】:

使用 GAE Search API (1.7.6) 按距离搜索地理位置总是返回零结果...

我构建了以下查询:distance(geoLocation, geopoint(27.241131, -82.464445)) < 16093 /* 10 Miles in meters */

虽然我在距离内有地理点,但结果始终为零。例如,在这种情况下,我的搜索原点是 lat: 27.241131, lgn: -82.464445,范围内的地理点之一是 lat:27.233247, lng-82.48819800000001.

当我像这样使用谷歌地图 api v3 计算距离时:

  google.maps.geometry.spherical.computeDistanceBetween (
new google.maps.LatLng(27.241131, -82.464445), 
new google.maps.LatLng(27.233247, -82.48819800000001)) = 2509.46

这就是我将地理点与其他字段一起存储的方式

dictFields = []

dictFields.append(search.AtomField(name = 'zipcode', value = k.get('zipcode')))

geopoint = search.GeoPoint(float(lat), float(lng))
dictFields.append(search.GeoField(name = 'geoLocation', value = geopoint))

以后再做

search.Document(doc_id = document_id, fields = dictFields)

这里有什么问题?我知道 Search 有效,因为当我按不同于地理点的其他字段进行搜索时,它会返回结果。

搜索 id 是这样完成的:

options = search.QueryOptions(limit=1000, returned_fields=['geoLocation', 'zipcode'])
query = search.Query(query_string=query_str, options=options)

在哪里query_str = distance(geoLocation, geopoint(27.241131, -82.464445)) < 16093

更新

我正在使用索引存储的地理点进行测试并获取 search.SearchResults(number_found=0L)。 问题:这是否可以在开发环境中工作?

感谢您的帮助!!!!!!

【问题讨论】:

标签: google-app-engine python-2.7 google-api gae-search


【解决方案1】:

我对此也有一个未解决的问题 - 我做了一些调查,它看起来像是开发环境的问题。它在生产环境中工作。

如果您想关注,请查看问题: Why is geosearching/location based searches returning zero results?

您还可以找到我提出的问题跟踪器的链接。

【讨论】:

  • 感谢您的回复。如果您说您对其进行了测试并在产品中工作,那就是我需要知道的,我会接受您的回答。我还注意到,当您进行搜索(只是因为您正在测试您的逻辑)并且没有索引文档时,会抛出一个奇怪的异常,与 match_count = 0 相关的内容。然后,如果您转到 SDK 控制台并单击全文索引选项卡它会因为一个讨厌的异常而刹车。
  • 确实是奇怪的行为。如果您在生产环境中看到不同之处,请告诉我。确实是奇怪的行为。由于这些是一些非常明显的错误,因此缺乏测试有点气馁。要在开发环境中进行全文搜索,您只需在此处粘贴 localhost:admin_port#/search/index?index=YOUR INDEX NAME&query=&namespace= 我想这是一种解决方法,直到该链接着陆页被修复为止。
  • 很高兴它在产品中工作。我注意到的唯一奇怪的事情是我得到了更多我期望的结果。所以我想在5'英里'内找到一些位置......所以我将5英里转换为米,我有8047m。当我查看结果时..我不知道..您可以看出许多返回的标记不可能在距离中心点 5 英里范围内...您知道我的意思吗?我的转换有问题吗?
  • 这很有趣——你的转换看起来没问题...尝试通过记录每个结果的距离来调试并玩弄范围——从 1 英里开始,然后从那里上升。我没有在我的结果中看到这一点,但请让我知道调试时的情况。确保中心点是查询中使用的实际中心点
  • 谢谢@kevin。我检查了所有这些,似乎我在做正确的事情。我决定走 5000 = 5 英里。非常感谢。
猜你喜欢
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 2023-04-11
  • 1970-01-01
  • 2012-08-03
  • 2013-04-25
相关资源
最近更新 更多