当前位置: 首页 > 知识库问答 >
问题:

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

耿星雨
2023-03-14

我在谷歌的数据存储中存储了很多包含地质点的实体。现在,我需要根据发送到谷歌云功能的位置获取10个最近的位置
我看到,谷歌的应用程序引擎中有一个distance()函数,但在谷歌云函数中没有可比性,甚至无法计算数据库中的任何内容。

是否可以仅使用谷歌云功能从数据存储中获取最近的10个位置,或者我需要使用不同的数据库?

最好的问候,
帕斯卡

共有3个答案

上官凯泽
2023-03-14

请看下面的帖子

谷歌应用引擎数据存储中的地理空间查询

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

霍锦
2023-03-14

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

本质上,我创建了一个计算字符串属性,它是纬度的字符串连接

如果一个实体有obj.latitude=37.123456

执行搜索时,我确定搜索纬度的网格

#  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更健壮,但这很容易实现,满足了我的需求。

公孙志尚
2023-03-14

我们在AppEngine上运行地理空间重服务。

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

这显然取决于位置的数量,但如果你对存储位置的方式很聪明,你可以很快搜索。

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

 类似资料:
  • 我遇到了以下leetcode问题,我对一些人用来解决它的方法有一个问题。问题是:给定一个非空二叉查找树和一个目标值,在BST中找到最接近目标的k个值。 注意:给定的目标值是浮点。 您可以假设k始终有效,即:k≤总节点。 保证BST中只有一组最接近目标的唯一k值。 所以,有些人所做的是,他们在保持k大小的最近元素队列的同时,按顺序遍历。在顺序遍历过程中,如果发现某个元素比队列中的第一个节点更接近目标

  • 问题内容: 哪种Java数据类型可以存储较大的数值,例如9999999999? 问题答案: 您的具体示例可以存储在(或必要时)中。 如果在任何时候都需要更大的数字,则可以尝试 (如果是整数)或(如果是十进制)

  • 我有如下结构的数据库。如何在5公里内location_id。有纬度和经度的数字已经在数据库表中。请参阅我的数据库结构图像。 以下是数据库结构图像: 我已经从这个链接搜索如何找到最近的位置使用纬度和经度从sql数据库?我不明白密码。 SELECT id,(3959*acos(cos(弧度(37))*cos(弧度(lat ) ) * cos(弧度(lng)-弧度(-122))sin(弧度(37))*s

  • 问题内容: 在文档中,某些类型(例如数字和日期)指定存储默认为no。但是该字段仍然可以从json中检索。 令人困惑。这是否表示_source? 有没有办法根本不存储字段,而只是对其建立索引并进行搜索? 问题答案: 默认情况下,不存储任何字段类型。只有领域。这意味着您始终可以取回发送给搜索引擎的内容。即使您要求特定的字段,elasticsearch也会为您解析该字段并将其退还给您。 您可以根据需要禁

  • 问题内容: 与这个有关debian的问题类似。我有非定制的安装,我想知道数据实际存储在哪里。链接问题未在接受的答案中指出。 问题答案: 在Mac上,数据存储在elasticsearch安装文件夹的子文件夹中。 请参阅目录布局以进行常规安装,即既没有Linux也没有Windows。

  • 问题内容: 应用程序如何执行邻近搜索?例如,用户输入邮政编码,然后应用程序按距离排序列出20英里内的所有企业。 我想在PHP和MySQL中构建类似的东西。这种方法正确吗? 获取我感兴趣的位置的地址并将其存储在数据库中 使用Google的地理编码服务对所有地址进行地理编码 编写包含Haversine公式的数据库查询以进行邻近搜索和排序 这个可以吗?在第3步中,我将计算每个查询的接近度。有一个PROX