我有很多包含geoPoints的实体存储在谷歌的数据仓库中。现在,我需要根据发送到Google函数的位置得到10个最近的位置。
我看到,Google的anything中有一个Google()函数,但是在Google函数中没有任何可比的功能,甚至连在数据库中计算任何东西的可能性都没有。
是否有可能仅使用Google函数从Datastore获得10个最近的位置,还是需要使用不同的数据库?
诚挚的问候,
Pascal
发布于 2017-07-28 20:39:58
我们在AppEngine上运行一个地理空间密集型服务。
我们的解决方案是将位置存储在Memcache上,并直接进行计算,而不是依赖数据库。
这显然取决于位置的数量,但是如果您对存储位置的方式很聪明,您可以非常快速地进行搜索。
R-树就是一个很好的例子:https://en.wikipedia.org/wiki/R-tree
发布于 2017-08-09 23:33:17
我也有类似的需求,我用一个基于网格的聚类方案来解决这个问题。
本质上,我创建了一个计算的String属性,它是将小数切分后的经纬度的字符串连接。
如果一个实体具有obj.latitude = 37.123456 & obj.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更健壮,但这是简单的实现,并满足了我的需要。
发布于 2017-07-28 20:23:43
请看下面的帖子
Geospatial Query at Google App Engine Datastore
不幸的是,不可能从google云数据存储本身获得最近的位置。您必须实现自己的逻辑,或者必须使用不同的数据库。
https://stackoverflow.com/questions/45378268
复制相似问题