【使用Google App Engine GQL查找给定半径内的所有位置】幽沉谢世事,俯默窥唐虞。这篇文章主要讲述使用Google App Engine GQL查找给定半径内的所有位置相关的知识,希望能为你提供帮助。
我正在应用程序引擎上开发一个应用程序,我将位置信息存储在数据存储区中。我正在尝试获取给定点的指定半径内的所有点(纬度,长度)。类似于关于SQL的StackOverflow问题。我想知道使用GQL是否可以实现相同目的。 (类似于this article I found)
期待您的建议,
答案不是使用GQL,但是您可以使用Search API执行此操作,但这意味着您需要将实体单独索引为可搜索的文档,并且much more expensive也是如此(数据存储区查询为0.06美元/ 100k,而复杂搜索查询为0.6美元/ 10k)所有地理点搜索查询都是)。
编辑回答评论中的问题:在我看来,这个例子确实解决了你的问题:
"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=https://www.songbingjia.com/android/search.GeoPoint(entity.point))
])
index.put(document)
您可以像这样编写查询:
coords = (lat, long)
query_string = "distance(location, geopoint(%s, %s)) <
500" % (lat, long)
index.search(query.string)
希望这可以帮助。
另一答案500米很小!但至少它意味着除非你是极地探险家,否则你可以忽略地球的曲率。在这种情况下,您可能希望将GeoPt拆分为两个FloatProperty字段以使“简单”索引更容易 - 您可以快速设置bpunding-box查询,lat大于和小于为了隔离你想要的大部分GeoPts(如果事情通常是均匀分布的话,pi / 4值很大),那么只需要对每个候选点进行适当的三角测试。
(我从未试过索引GeoPts,也许你可以直接在子域上进行查询)
推荐阅读
- 如果Flask应用程序在Google App Engine中不可用,如何提供默认错误页面
- Appengine api explorer不会向localhost发送查询
- Android只打电话第二次工作
- 迁移到AndroidX后(无法实例化类:androidx.appcompat.widget.ShareActionProvider。)
- 如何使用adb与Memu / Bluestacks / Nox App Player等模拟器
- Android调试器不断断开连接
- java.lang.NoSuchMethodError public default void android.content.ServiceConnection.onBindingDied(andr
- Unity3D通过Whatsapp发送AudioClip
- 从MyProject-App.xml中检测versionNumber( Adobe AIR)