我正在app engine上开发一个应用程序,在那里我将位置信息存储在数据存储中。我正在尝试获取给定点的指定半径内的所有点(lat,long)。
类似于SQL上的StackOverflow问题。我想知道GQL是否也能做到这一点。(类似于this article I found
期待您的建议,

最佳答案

不是使用GQL,但是可以使用Search API来实现这一点,尽管这意味着您需要将您的实体单独索引为可搜索文档,并且也much more expensive(数据存储查询为0.06/100k美元,而复杂搜索查询为0.6/10k美元,所有的geopoint搜索查询都是)。
编辑以回答评论中的问题:
在我看来,这个例子确实解决了你的问题:

"distance(survey_marker, geopoint(35.2, 40.5)) < 100"

100替换为500geopoint(35.2, 40.5)中的坐标替换为圆中心的坐标,survey_marker替换为索引GeoPt属性的名称。
因此,如果您像这样索引文档:
from google.appengine.api import search

query = #something
index = search.Index(name="myIndex")
for entity in query:
    my_document = search.Document(
        doc_id = entity.key,
        fields=[
           search.GeoField(name='location', value=search.GeoPoint(entity.point))
           ])
    index.put(document)

您可以这样编写查询:
coords = (lat, long)
query_string = "distance(location, geopoint(%s, %s)) < 500" % (lat, long)
index.search(query.string)

希望这有帮助。

09-25 22:11