Graphhopper:无法创建位置索引,当图具有无效界限(Graphhopper: Cannot

2019-09-27 18:12发布

我在我的Java项目中使用的Maven通过0.8 graphhopper。 我创建了folling码网

FlagEncoder encoder = new CarFlagEncoder();
EncodingManager em = new EncodingManager(encoder);

// Creating and saving the graph
GraphBuilder gb = new GraphBuilder(em).
    setLocation(testDir).
    setStore(true).
    setCHGraph(new FastestWeighting(encoder));
GraphHopperStorage graph = gb.create();

for (Node node : ALL NODES OF MY NETWORK) {
    graph.getNodeAccess().setNode(uniqueNodeId, nodeX, nodeY);
}

for (Link link : ALL LINKS OF MY NETWORK) {
    EdgeIteratorState edge = graph.edge(fromNodeId, toNodeId);
    edge.setDistance(linkLength);
    edge.setFlags(encoder.setProperties(linkSpeedInMeterPerSecond * 3.6, true, false));
}

Weighting weighting = new FastestWeighting(encoder);
PrepareContractionHierarchies pch = new PrepareContractionHierarchies(graph.getDirectory(), graph, graph.getGraph(CHGraph.class), weighting, TraversalMode.NODE_BASED);
pch.doWork();

graph.flush();

LocationIndex index = new LocationIndexTree(graph.getBaseGraph(), graph.getDirectory());
index.prepareIndex();
index.flush();

在这一点上,保存在图形边框显示正确的数字。 文件写入到磁盘中包括“location_index”。 然而,重新加载数据让我下面的错误

Exception in thread "main" java.lang.IllegalStateException: Cannot create location index when graph has invalid bounds: 1.7976931348623157E308,1.7976931348623157E308,1.7976931348623157E308,1.7976931348623157E308
at com.graphhopper.storage.index.LocationIndexTree.prepareAlgo(LocationIndexTree.java:132)
at com.graphhopper.storage.index.LocationIndexTree.prepareIndex(LocationIndexTree.java:287)

读数与下面的代码完成

FlagEncoder encoder = new CarFlagEncoder();
EncodingManager em = new EncodingManager(encoder);

GraphBuilder gb = new GraphBuilder(em).
            setLocation(testDir).
            setStore(true).
            setCHGraph(new FastestWeighting(encoder));

// Load and use the graph
GraphHopperStorage graph = gb.load();

// Load the index
LocationIndex index = new LocationIndexTree(graph.getBaseGraph(), graph.getDirectory());
if (!index.loadExisting()) {
    index.prepareIndex();
}

所以LocationIndexTree.loadExisting运行良好,直到进入prepareAlgo 。 在这一点上,图形被加载。 然而,边界框未设置并保持默认设置? 读取位置索引不更新边界框。 因此,错误下行流。 我究竟做错了什么? 如何保持在首位的边框? 如何重建BBOX?

Answer 1:

TL; DR不要使用直角坐标系,但坚持通过OSM使用的WGS84。

一个直角坐标系象例如EPSG:25832可能在数以百万计的坐标范围。 执行一些数学运算后的坐标的大小可以进一步增加。 最终,Graphhopper将存储的坐标为整数。 也就是说,所有的坐标,最终可能会为Integer.MAX_VALUE的。 因此,一个无效的边界框。



文章来源: Graphhopper: Cannot create location index when graph has invalid bounds
标签: graphhopper