我正在开发应用程序引擎上的应用程序,并将位置信息存储在数据存储中。我试图在给定点的指定半径内获取所有点(lat,long)。 与此类似,StackOverflow关于SQL的问题。我想知道是否可以通过GQL实现同样的功能。 (类似this article I found)使用Google App Engine查找给定半径内的所有位置GQL
期待您的建议,
我正在开发应用程序引擎上的应用程序,并将位置信息存储在数据存储中。我试图在给定点的指定半径内获取所有点(lat,long)。 与此类似,StackOverflow关于SQL的问题。我想知道是否可以通过GQL实现同样的功能。 (类似this article I found)使用Google App Engine查找给定半径内的所有位置GQL
期待您的建议,
不与GQL,但你可以做到这一点使用的Search API,虽然这意味着你需要单独索引你的实体可搜索的文件,是much more expensive以及(对于数据存储查询,0.06美元/ 10万美元,而对于复杂的搜索查询,所有的结果搜索查询都是0.6美元/ 10万)。
编辑来回答咨询者在注释: 在我看来,像例如并解决您的问题:
"distance(survey_marker, geopoint(35.2, 40.5)) < 100"
替换geopoint(35.2, 40.5)
的100
与500
和坐标与中心的坐标你的圈子,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)
希望这有助于。
500m非常小!但至少它意味着除非你是极地探险家,否则你可以忽略地球的曲率。在这种情况下,您可能需要将GeoPt拆分为两个FloatProperty字段,以使“简单”索引更容易完成 - 然后,您可以快速设置一组bpunding-box查询,lat大于和小于lat ,长,大于和长小于,隔离最你想要的GeoPts的(π/ 4的价值,如果事情通常是均匀分布的),那么就过滤列表,自己在每个候选点做适当的三角试验。
(我从来没有尝试过的索引GeoPts,也许你可以做直接的子域的查询)
感谢@Roman莱,可以搜索API可用于实现这一目标特定半径功能:[链接](HTTP: //housing.co.in/bangalore/buy/flats-near=koramangala:12.931656:77.622696:2900;apartment-types=3bhk;sort-by=distance:true?gclid=CPeg6YOs0rgCFfF34godVFcAEA)。我在数据存储中存储特定的坐标,根据用户的地理位置在500米半径范围内映射到地图上,半径是静态的,与上面的链接不同,它是动态的...再次感谢人:) ..期待您的回复:) – sengar19
感谢的人,,,现在我得到了清晰的画面,这是非常有帮助:) – sengar19