2

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

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

(0)
 |
 |
 |
(1)

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

==== 更新

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

  1. 输入是车辆的最后两个点
  2. 基于最后两点,我正在计算角度
  3. 在车辆所在的地方寻找边缘
  4. 基于几何计算边角
  5. 比较两条边

这是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)

4

1 回答 1

1

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

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

参数仍然reverse没有影响任何东西。此参数可以truefalse仅适用于双向算法(对于 unidir 算法,它将始终为false),因此您需要额外注意读取反向速度的反向搜索的权重。

于 2015-04-24T19:52:50.317 回答