GraphHopper如何处理高速公路交叉口的一个点?

时间:2014-09-03 15:38:02

标签: graphhopper

我在比利时有2750个城市中心。我需要知道每两个城市中心之间的距离。 但这导致了一个57MB的矩阵,只是为了记住那些距离(甚至不是路线),所以这些比例非常大。

相反,我正在考虑使用公路交叉口作为枢纽。基本上,每个城市都知道它是附近的城市,它是附近的枢纽(=公路交叉口)。所有中心都知道彼此之间的距离。

因此,从1个城市A到另一个非附近城市B的距离可以通过cityA -> hubX -> hubY -> cityB的距离来计算。因为大多数城市附近通常有3个中心,所以我可能需要查看所有9个组合并采用最短的组合。但无论如何,它应该更好地记忆。

现在问题: 我可以将高速公路交叉点描述为单点吗?想一想:高速公路由2条道路组成(两条道路均为一条道路),因此高速公路交叉口中心有4条道路(甚至不包括武器)

1 个答案:

答案 0 :(得分:1)

一些想法:

  1. 您可以通过MapDB或堆栈将这些距离存储在堆外或光盘上 GraphHopper简化的DataAccess实现使其与RAM无关
  2. 你可以使用浮点数,它应该只有~30MB甚至更短,只需使用千米
  3. 您可以尝试按需路由,而无需存储,因为只需几毫秒来计算路由。禁用指令和计算点使其速度提高两倍。您甚至可以禁用计算距离并使用path.weight - 这将为您提供另一个良好的加速,但需要较低级别的GraphHopper使用,并且仅在您知道自己所做的事情时才推荐使用。
  4. 现在回答你的问题。 GraphHopper使用由节点(交汇点)和边(连接交汇点的街道)组成的图模型。环形交叉口仍由多个节点组成。但总的来说,应该可以使用这样的“离开”#39;节点为' hub-id'。

    我看到两种计算这些节点的方法:

    • 通过运行Contraction-Hierarchy并选择最高的1000个节点并将它们定义为集线器 - 这类似于' transit node routing'纸
    • 或者您计算从一个城市到所有其他城市(或仅8个地理方向)并找到两条路线的最后一个公共节点来识别一些

    对于这两种方法,您必须深入了解GraphHopper,并且您可能需要lower level API