Graphhopper路线方向加权

时间:2015-04-24 15:16:19

标签: java graphhopper

是否可以根据方向编写权重?我看到有reverse参数,但它意味着什么,我该如何计算它呢?

例如,我有一条从南到北的直线路线

(0)
 |
 |
 |
(1)

我需要从(1)到(0)和从(0)到(1)的不同重量。

====更新

我根据车辆的最后两个点计算了方向:

  1. 输入是车辆的最后两个点
  2. 基于最后两点,我是计算角度
  3. 找到适合车辆的边缘
  4. 基于几何计算边缘角度
  5. 比较两条边
  6. 以下是Scala中的代码:

    def isReverseDirection(target: Point, previous: Point) = {
        val angle = RouteUtils.angleFromCoordinate(previous.lat, previous.long, target.lat, target.long)
        val edgeState = findEdge(target.lat, target.long)
        val pl = edgeState.fetchWayGeometry(3)
    
        val edgeAngle = RouteUtils.angleFromCoordinate(pl.getLat(0), pl.getLongitude(0), pl.getLat(pl.getSize - 1),
          pl.getLongitude(pl.getSize - 1))
    
        Math.abs(edgeAngle - angle) > 90
    }
    

    我已经测试了这个解决方案,它似乎正在运行。我需要实现Car2FlagEncoder。在红点我收到了车辆移动的阻挡数据(0) - > (1)。然后我从两边计算路线:

    (0) -> (1)

    (1) -> (1)

1 个答案:

答案 0 :(得分:1)

这是可能的。你可以存储,例如正如我们在Bike2WeightFlagEncoder中所做的那样,前进和后退速度与下坡相比速度较慢,但​​还有其他应用,如交通影响汽车的速度等。请参阅FastestWeighting如何使用它。

背景:已经正确交换了标志,具体取决于0-> 1还是1-> 0,这是在GraphHopperStorage中的EdgeIterator实现中完成的。

reverse参数仍未影响任何内容。对于双向算法,此参数可以是truefalse(对于unidir算法,它始终是false),因此您需要额外注意反向搜索的权重你读了反向速度。