在数据存储中搜索 10 个最近的位置



我有很多包含geoPoints的实体存储在Google的数据存储中。 现在,我需要根据发送到Google云功能的位置获取10个最近的位置。
我看到,在谷歌的App Engine中有一个distance((函数,但在谷歌云函数中没有可比性,甚至不可能计算数据库中的任何内容。

是否可以仅使用Google云功能从数据存储中获取10个最近的位置,还是需要使用其他数据库?

最好的问候,
帕斯卡

我们在 AppEngine 上运行一个地理空间密集型服务。

我们的解决方案是将位置存储在Memcache上并直接进行计算,而不是依赖数据库。

这显然取决于位置的数量,但是如果您对如何存储位置很聪明,则可以非常快速地进行搜索。

R树就是一个很好的例子:https://en.wikipedia.org/wiki/R-tree

我也有类似的需求,我用基于网格的聚类方案解决了它。

本质上,我创建了一个计算字符串属性,它是纬度和经度的字符串串联,小数被砍掉。

如果一个实体有obj.latitude = 37.123456obj.longitude = 45.234567那么obj.grid_id="37:45"

在执行搜索时,我确定搜索纬度和经度的网格以及其他 8 个周围网格,并查询驻留在这 9 个网格中的所有实体。

#  for search latitude = 37.456 & longitude = 45.67
query = SomeModel.query(SomeModel.grid_id.IN([
'36:44', '36:45', '36:46',
'37:44', '37:45', '37:46',
'38:44', '38:45', '38:46',
]))

然后,您将在代码中找到最接近的 10 个。

根据您的需要,您可能希望使网格ID包含小数位(obj.grid_id="37.1:45.2"(或使它们不那么精确(obj.grid_id="30:40"(

根据数据点的分布,这可能对您有用,也可能不适合您,在这种情况下,Zebs 使用 R-Tree 的建议更强大,但这很容易实现并且足以满足我的需求。

请看下面的帖子

Google App Engine Datastore 中的地理空间查询

不幸的是,无法从谷歌云数据存储本身获取最近的位置。您必须实现自己的逻辑,或者必须使用不同的数据库

最新更新