我在比利时2750个城市中心。 我需要知道每2个城市中心之间的距离。 但是,这导致57MB的矩阵,只是要记住这些距离(甚至没有路由),使秤苦头。
相反,我期待在使用公路交叉口枢纽。 基本上,每一个城市都知道这是附近的城市和它的附近集线器(=高速公路路口)。 所有集线器知道彼此的距离。
因此,从1个城市A到另一非附近的城市B中的距离,可通过的距离来计算cityA -> hubX -> hubY -> cityB
。 由于大多数城市都有附近通常3轮毂,我可能需要考虑所有9个组合,并采取最短的。 但在任何情况下,应该明智的规模更好的记忆力。
现在的问题: 我可以描述一个高速公路交汇的一个点? 想一想:一公路由2条道路(一个在两个方向上),所以一个高速公路交汇中心具有4条道路(甚至不算臂)。
一些想法:
- 你可以存储那些离堆或光盘通过创建mapdb或GraphHopper其简单的数据访问实现的距离使得它RAM无关
- 你可以使用float这应该是只有约30MB,甚至短,只需要使用公里
- 你可以尝试按需路由,不存储,因为它只需几毫秒来计算路线。 禁用指令和计算点使得它甚至快一倍。 你甚至可以禁用计算距离,只是使用path.weight - 这会给你一个很好的增速,但需要一个低一点的水平GraphHopper使用,并且只建议,如果你知道你做了什么。
现在,你的问题。 GraphHopper使用由节点(结)和边缘(街道连接路口)的图形模型。 仍然是一个迂回由多个节点组成。 但总的来说,应该可以使用这样的“离开”节点为“集线器-ID”。
我看到来计算这些节点两种方法:
- 通过运行中的收缩,层次结构和采摘最高的1000个节点,并定义它们为中心-这将是类似于在“描述路由传输节点论文”
- 或者你从一个城市计算路线,例如所有其他城市(或者只是8地理方向),发现两条路线的最后的共同节点,以确定一些
对于这两种方法,你就必须到Digg成深一点GraphHopper,你可能会需要更低级别的API 。