algorithm - 处理 OSM 数据图的想法,用于输出简单的城市/村庄节点,它们之间有边

标签 algorithm data-structures graph path-finding openstreetmap

Input Graph and Output Graph after processing

上图显示了 3 个元素:

  • 输入图 - 根据一个国家/地区的 OSM 数据创建。
  • 过程 - 将输入图转换为输出图
  • 输出图 - 输入图的更简单版本,每条道路上没有详细节点。它仅包含根据输入图道路计算的城市/村庄节点和边。

我想从输入图创建输出图。换句话说,我需要一个图表来让我快速计算出这个问题的答案:如果我从城市 3 开车到城市 7,我会经过哪个城市/村庄? 在这个例子中,答案是:

  • 您将经过城市/村庄:5、6、7
  • 您将经过城市/村庄:2、4、6、7
  • 您将经过城市/村庄:5、4、6、7

城市/村庄节点是从 OSM 文件中检索的。输出图边应具有基于输入图边计算的权重。权重是从一个节点到下一个节点的距离(以米为单位)。

在原始 OSM 数据文件(和输入图中)中,描述城市或村庄的节点未与道路边相连。我所看到的是,我必须处理此图,仅获取代表城市和村庄的节点,然后尝试匹配(基于从城市/村庄节点到道路节点的距离)并制作一些仅连接城市/村庄节点的捷径。

我的问题是:

  • 这已经完成了吗?我不想重复别人的工作。
  • 您将如何创建输出图?

最佳答案

您可以根据路由算法找到一条路径。有几个软件实现,比如 osmand。 然后,在 OSM 数据中,不要寻找代表城市的节点,而是寻找城市的行政边界(多边形)。 此时,使用经典的几何算法,您可以计算路线与行政边界之间的交叉点列表。

此方法可以解决您的问题,但不会将简化图计算为中间步骤。因此,每个请求的计算 secret 集度更高。

恐怕在一张由道路构成的图表中,两点之间有大量不同的路径,可能以各种顺序穿过数据中的所有城市。所以你需要一些优化标准来选择少量路径(短距离、短旅行时间、不收费、风景优美的道路等)。这导致需要一些路由算法,这就导致了上面的解决方案...

关于algorithm - 处理 OSM 数据图的想法,用于输出简单的城市/村庄节点,它们之间有边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9964380/

相关文章:

algorithm - 矩阵链乘法动态规划

arrays - 如何在 Pascal 或任何编程语言中实现字幕文本?

c# - WPF 3D算法题: what model does it use?

java - 在通用树中找到下一个更大的节点?

python - Networkx如何获取多向图中特定边的长度

algorithm - 如何使用具有亚像素偏差的 Bresenham 线绘制算法?

algorithm - 查找第一个元素可被第二个元素整除的对数

c++ - C++ 中的 LRU 缓存

python - 有向图中的最大简单循环

java - 从给定的数组构造一棵树