【问题标题】:Block nodes/edges in graphhopper routing - wrong edges are getting blocked在 graphhopper 路由中阻止节点/边缘 - 错误的边缘被阻止
【发布时间】:2015-05-05 16:58:34
【问题描述】:

按照文档 (https://github.com/graphhopper/graphhopper/blob/master/docs/core/weighting.md) 中描述的示例,我正在尝试阻止我的 graphhopper 路由中的边缘。 我试图找到必须被

阻挡的边缘
EdgeIteratorState edge = hopper.getLocationIndex().findClosest(lat, lon, EdgeFilter.ALL_EDGES ).getClosestEdge();

但是在运行我的应用程序时,它显示一些完全不同的边缘被阻止,而不是我试图阻止的边缘。 我做错了什么,你有什么提示吗?自从四天以来我一直被这个问题困扰,没有留下任何想法。

【问题讨论】:

  • 没有任何进一步的信息很难猜测。纬度,经度的顺序是否正确? getClosestEdge.getEdge 实际上是一些积极的价值吗?是否正确选择了块权重并且实际上包含找到的边缘 ID?
  • 还有一个类似的例子。也许你以前试过这个? github.com/karussell/graphhopper-traffic-data-integration
  • 感谢您的快速回复!是的,纬度/经度的顺序正确。更具体一点:在通过我的 BlockingWeighting 类的 calcWeight-Method 进行调试时,它为我提供了计算路径的以下边缘:28 [22->1、22->16]、30 [22->1。 22->16], 20 20 13-6, 19 19 6-5, 12 [1-22, 17 1-20, 12 1-2],禁止边是0,9和10。请看!attached picture。 - 计算出的路线以蓝色绘制。我正在使用离线地图进行室内路线 - 也许我在创建地图时做错了什么?
  • 您是否禁用了速度模式? graphhopper.setCHEnabled(false)
  • 我之前尝试过,但如果我这样做了,我会收到此错误:java.lang.IllegalStateException: Cannot load the graph when using instance of com.graphhopper.storage.GraphHopperStorage and location: /data/数据/cc.bitmedia.app.secureflex/cache/KS337_2/

标签: graphhopper


【解决方案1】:

还不知道,这是否优雅,但我想我找到了解决方法: 在我添加的 graphhopper.sh 的 config.properties 中

prepare.chWeighting=no

在加载图表时,我设置了

tmpHopp.setCHEnable(false);

之后要阻止一条边,我只需将这条边的速度设置为 0

FlagEncoder footEncoder =    TempAppData.getInstance().getHopper().getEncodingManager().getEncoder("foot");
                edge.setFlags(footEncoder.setSpeed(edge.getFlags(), 0));

【讨论】:

  • 不建议将速度设置为 0。而是使用访问属性。 footEncoder.setAccess。此外,如果您在应用程序中创建料斗,则无需更改配置并使用 java API,只需一个即可。我还更新了 weighting 文档以避免将来对 chWeighting 产生这种误解。
  • 完美,就是这样!非常感谢!
猜你喜欢
  • 2021-10-22
  • 2016-02-22
  • 2018-07-29
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2011-09-01
相关资源
最近更新 更多