1

我想在 play 框架中实现我自己的路由 Web 服务(因为它是 java 并且它是一个快速原型设计框架)。我也想使用 graphhopper 作为路由引擎。

我的基本要求是:

  • 路由应该基于我们自己的多模式图数据库(由 EDGES/LINKS 和 NODES 以及不同的属性组成,以从中获取权重
  • 我希望能够在运行时为边缘加权选择不同的属性(即紧急车辆可以采取路线,普通汽车司机可以使用)
  • 该图分布在奥地利面积的一半以上(大约 800.000 条边)。

目前我有很多问题,不知道从哪里开始:

  1. 运输车辆类型是仅使用 EncodingManager 定义的,还是可以在路线中更改?(在运行时不重建图形)
  2. RAMDataAccess 和 MMapDataAccess 之间到底有什么区别?后者是否意味着图形(部分)存储在磁盘上?第一个是否意味着图形仅存储在内存中?
  3. 我不了解 EDGE 对象的 NextA 和 NextB 属性...与 3 个或更多 EDGE 的交叉点呢?哪一个是 NextB 与其他每个?
  4. “......其中nodeA总是小于nodeB......”是否意味着ID必须总是更小?图形方向(即指向另一个方向的边缘)呢?
  5. 更多的问题要提出......

到目前为止我做了什么:

  • 我从开发人员片段和低级 API开始浏览 graphhopper 文档,但在页面上它说这已经过时了?!?!(这意味着什么?)

  • 我还检查了 graphhopper github 存储库的 web 子文件夹,但那里只有一个基于 OSM 数据的现成可用的 graphhopper web 服务。

  • 不幸的是,我找不到任何更全面的示例,包括使用 MMapDataAccess 构建图表编辑感谢您提供查看单元测试的提示,我想我会在那里找到更多信息)

我会非常感谢这里的任何人,谁能给我一些示例,如何构建我自己的图表并在加权参数发生变化时使用(或重建它?)。

编辑:试图让我的观点更清楚

4

1 回答 1

2

从我们的数据库中选择运行时边缘加权的不同属性

如果要在运行时选择权重,则应避免触发外部数据库。它会减慢一切。而是将您拥有的权重输入 GraphHopperStorage 本身。每条边都是一张大桌子上的一行。只需为您需要的每个重量添加一列:

E_CUSTOM_WEIGHT = nextEdgeEntryIndex();

该图分布在奥地利面积的一半以上(约 800.000 条边)

不确定您对多模态图的含义(也是时间相关的?)。如果正常路网800k也不多。整个德国是十倍大,适合不到 1gb

关于快速入门。只是低级 API 的 wiki 已经过时。查看 LocationIndexTree 的单元测试以了解当前的使用情况。(也许你可以在之后更新 wiki :))

不幸的是,我找不到任何更全面的示例,包括使用 MMapDataAccess 构建图形。

您只需更改配置,或者如果您更喜欢低级 API:

graph = new GraphHopperStorage(new MMapDirectory(), encodingManager)

当权重参数发生变化时,这里的任何人都可以给我一些示例,如何构建我自己的图表并重建它。

看看单元测试。很多如何构建图表的示例。使用“重建” - 你是什么意思?你是说CH准备吗?如果您想在运行时计算重量,则无法进行 CH 准备。

于 2013-11-29T19:44:02.943 回答