我想实现我自己的路由web服务在玩框架(因为它是java,而且是一个快速原型框架)。我还想使用graphhopper作为路由引擎。
我的基本要求是:
- 路由应该基于我们自己的多模式图数据库(包括EDGES/LINKS和NODES,以及从中导出权重的不同属性
- 我希望能够在运行时为边缘加权选择不同的属性(即应急车辆可以行驶路线,不允许使用普通的cardrivers)
- 这张图的面积是奥地利的一半(约800.000条边)
目前我有很多问题,不知道从哪里开始:
- 运输车辆类型是否仅使用EncodingManager定义,或者是否可以在路线中更改?(运行时不重建图形)
- RAMDataAccess和MMapDataAccess到底有什么区别?后者是否意味着图形(部分)存储在光盘上?第一个是否意味着图形只存储在内存中
- 我不理解EDGE对象的NextA和NextB属性。。。有3个或3个以上EDGE的交叉口怎么办?哪个是NextB
- "…其中nodeA总是小于nodeB…"是否意味着ID必须总是更小?图形方向(即EDGE指向另一个方向)如何
- 还有更多问题要问
到目前为止我做了什么:
-
我从开发人员代码片段和低级API开始浏览了graphhopper文档,但在第页上它说这已经过时了?!?!(这是什么意思?)
-
我还检查了graphhopper github存储库的web子文件夹,但只有一个基于OSM数据的现成的graphhopperWeb服务。
-
不幸的是,我找不到任何更全面的例子,包括用MMapDataAccess构建图(edit感谢您提供的关于单元测试的提示,我想我会在那里找到更多)
我非常感谢这里的任何人,他们可以给我一些例子,如何建立我自己的图,并在权重参数变化时使用(或重建它?)。
编辑:试图让我的观点更清晰
在运行时从我们的数据库中选择不同的边缘加权属性
如果要在运行时选择权重,则应避免触发外部数据库。这将减缓一切。相反,将权重输入GraphHopperStorage本身。一张大桌子的每一边都是一排。只需按您需要的重量再添加一列即可:
E_CUSTOM_WEIGHT = nextEdgeEntryIndex();
该图分布在奥地利的一半大小(约800.000个边缘)
不确定您对多模式图(也与时间相关?)的意思。如果正常的道路网800k并不多。整个德国是10倍大,适合1gb以下的
关于快速启动。只是低级别API的维基已经过时了。查看LocationIndexTree的单元测试以了解当前使用情况。(也许你可以在之后更新wiki:)
不幸的是,我找不到任何更全面的例子,包括用MMapDataAccess构建一个图。
您只需更改配置,或者如果您更喜欢低级别的API:
graph = new GraphHopperStorage(new MMapDirectory(), encodingManager)
这里的任何人都可以给我一些例子,当权重参数改变时,如何建立自己的图并重建它。
看看单元测试。很多关于如何构建图的例子。"重建"是什么意思?你是说CH准备?如果您想在运行时计算重量,CH准备是不可能的。