3

我们正在考虑在我们需要做路线规划器的项目中使用它。我们遇到的第一个问题是我们有非常动态的变量来表示我们的权重值。这意味着我们不能使用收缩层次算法,因为每次这些变量之一发生变化时,我们都应该重新创建“收缩”图,所以我们正在考虑配置 graphhopper 以便不使用 CH 算法

在这种情况下,是否可以修改 graphhopper 代码以支持此动态边权重值?例如,假设我们有节点 A 和节点 B 以及一条边 A--B;假设这条边的值为 3 在我们的场景中,可能有一个事件可以将边 A--B 的值从 3 修改为 6 或从 3 修改为 2 我们可以修改代码以支持此功能吗?这是否依赖于 DataAccess 实现?

4

1 回答 1

5

要修改边缘的速度或距离,您需要获取 EdgeIteratorState(例如从坐标),然后设置标志或距离。这是一个代码片段:

// find edge for lat,lon point
QueryResult qr = locationIndex.findClosest(lat, lon, EdgeFilter.ALL_EDGES);
if(!qr.isValid())
      throw RuntimeException("Cannot find nearby location " + lat+","+lon);
EdgeIteratorState edge = qr.getClosestEdge();
// use existing flags to reuse access information
long existingFlags = edge.getFlags();
// set speed
edge.setFlags(carFlagEncoder.setSpeed(existingFlags, newSpeed));
// set distance
edge.setDistance(newDistance);
于 2014-01-22T15:33:03.707 回答