0

我正在开发一个系统,其中我有一个包含 100000 个地理位置和 10000 个正在移动的汽车的地理位置的列表,并且每 X 秒发生一次车辆的位置更新,即同时我可以接收到 N 个车辆位置更新。

我的问题是,每隔 X 秒,系统需要搜索靠近位置 L 的所有车辆,目前,系统通过地理位置列表查找特定半径内的所有车辆,并应用一些搜索在这个过程中过滤。

但是,我注意到的是,计算直线距离的距离计算系统是这个过滤过程中消耗时间最多的部分,并且由于系统中有几种方法可以执行这些搜索,涉及到距离L 点和 N 点车辆,在一个半径内,这个过程越来越慢,因为对于每个 L 点,我需要遍历整个车辆列表。

因此,我开始寻找索引地理位置的系统,并且我还可以搜索这些索引,例如,使用规则获取距离地理位置 X 半径 N 公里内的所有车辆

H3 对我来说似乎很有趣,但是,我在他们的文档中找不到它,我该怎么做,或者如何在地图上添加 N 车辆。

4

1 回答 1

2

您可以在此处查看有关如何使用 H3 进行半径搜索的教程:https ://observablehq.com/@nrabinowitz/h3-radius-lookup

基本步骤如下:

  • 使用 H3 索引所有数据。根据您的系统,您可能会将结果作为哈希图保存在内存中,或者保存在 K/V 存储中,其中 H3 索引是键,值是该单元格中的车辆列表。
  • 要进行搜索,请从兴趣点计算 k 环L。k 环的大小取决于您用于索引的 H3 分辨率和您要搜索的半径。
  • 在索引中对 k 环中的每个单元格进行 K/V 查找,并将结果附加到某个输出数组。如果您关心确切的距离,而不是近似距离,则可以使 k 环比需要的大,并在此时按真实距离进行过滤。

这应该更有效 - 您之前的方法与车辆数量成比例,而这与 k 环的大小成比例,而 k 环的大小是恒定的。

您仍然需要在车辆移动时对其进行索引。粗略地说,每次获得车辆的新位置时,都需要检查它是否在新单元格中,如果是,则重新索引它。这意味着您需要存储每辆车的当前单元格,无论是在每辆车辆记录中还是在单独的索引中,以及每个单元格的车辆索引中。

于 2021-12-06T23:44:15.393 回答