如何使用我自己的多模式图快速启动Graphhopper

时间:2013-11-29 11:04:23

标签: graph graphhopper

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

我的基本要求是:

  • 路由应该基于我们自己的multimodal图形数据库(由EDGES / LINKS和NODES组成,还有不同的属性来导出权重
  • 我希望能够在运行时为边缘加权选择不同的属性(即紧急车辆可以走路线,不允许使用普通卡车)
  • 图表的价格超过奥地利的一半(约800.000边)。

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

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

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

    • 我还检查了graphhopper github存储库的web子文件夹,但是根据内置的OSM数据,只有一个现成的graphhopper webservice。

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

    我非常感谢这里的任何人,他们可以给我一些例子,说明当加权参数发生变化时如何构建我自己的图并使用(或重建它?)。

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

1 个答案:

答案 0 :(得分:2)

  

在运行时从数据库中选择边缘权重的不同属性

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

E_CUSTOM_WEIGHT = nextEdgeEntryIndex();
  

图表的价格超过奥地利的一半(约800.000边缘)

不确定你对multimodal graph的意思(也是时间相关的?)。如果正常的道路网800k并不多。整个德国是十倍大,适合低于1gb

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

  

不幸的是,我找不到更全面的例子,包括使用MMapDataAccess构建图表。

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

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

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

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