我正在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
替换为500
,geopoint(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)
希望这有帮助。