边缘索引如何在graphhopper中工作?

时间:2015-06-23 09:51:41

标签: graphhopper

我在这里有一个新问题。

我正在制作一个自定义算法,需要图形边缘的预先计算数据。我像这样使用AllEdgesIterator:

AllEdgesIterator it = graph.getAllEdges();
int nbEdges = it.getCount();
int count = 0;

int[] myData = new int[nbEdges];

while (it.next())
{
    count++;
    ...
}

第一个奇怪的事情是nbEdges等于15565个边缘但是count只等于14417.它怎么可能?

第二个奇怪的事情是当我运行我的自定义A *时:我只是使用outEdgeExplorer浏览节点,但我在myData数组上的索引15569处得到一个IndexOutOfBound。我认为边缘索引包含在[0; N-1]其中N是边数,是不是真的如此?

这里可能发生什么?顺便说一下,我已禁用图形收缩层次结构。

感谢您每次都快速回答!

1 个答案:

答案 0 :(得分:1)

  

第一个奇怪的是nbEdges等于15565个边缘   但是数量只等于14417.怎么可能?

这是因为“压缩”中删除了无法访问的子网,但是当前只有节点从图中删除,边缘才会断开连接并保留在标记为已删除的边 - “阵列”中。因此iter.getCount只是一个上限,但AllEdgeIterator在迭代时正确排除了这些未使用的边缘并具有正确的计数。但使用iter.getCount分配自定义数据数组是正确的做法。

关于第二个问题:这可能是因为QueryGraph引入了具有更大edgeId的新虚拟边缘iter.getCount。根据确切的情况,有不同的解决方案,例如排除或使用原始边缘等等