2016-11-10 4 views
0

WGS84 좌표 만 사용하면 write the graph and index to disk입니다. 다른 자바 프로젝트에서 그래프와 인덱스를 디스크에서 읽었습니다. 이것은 또한 다음 코드로 잘 작동합니다.Graphhopper : CH를 사용하여 경로를 계산할 때 ClassCastException이 발생합니다. Astar/Dikstra Bi

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 index 
LocationIndex index = new LocationIndexTree(graph.getBaseGraph(), graph.getDirectory()); 
if (!index.loadExisting()) 
    throw new IllegalStateException("location index cannot be loaded!"); 

AlgorithmOptions algoOpts = AlgorithmOptions.start().algorithm(Parameters.Algorithms.ASTAR_BI). 
traversalMode(TraversalMode.NODE_BASED). 
weighting(new FastestWeighting(encoder)). 
build(); 

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

QueryResult fromQR = index.findClosest(fromCoordinate.x, fromCoordinate.y, EdgeFilter.ALL_EDGES); 
QueryResult toQR = index.findClosest(toCoordinate.x, toCoordinate.y, EdgeFilter.ALL_EDGES); 
QueryGraph queryGraph = new QueryGraph(graph); 
queryGraph.lookup(fromQR, toQR); 

RoutingAlgorithm algorithm = pch.createAlgo(queryGraph, algoOpts); 

Path path = algorithm.calcPath(fromQR.getClosestNode(), toQR.getClosestNode()); 

그러나 먼저 수축 계층 구조의 준비에는 왜 많은 시간이 필요한지 궁금합니다. 나는 그 준비가 이미 끝났을 것으로 기대했을 것입니다. 이 일이 다시 끝났습니까? "shortcuts_fastest_car"라는 파일의 목적은 무엇입니까?

둘째로, algorithm.calcPath이 호출되면 혼란스러운 ClassCastException가 수신됩니다.

Exception in thread "main" java.lang.ClassCastException: com.graphhopper.storage.BaseGraph$EdgeIterable cannot be cast to com.graphhopper.util.CHEdgeIteratorState 
at com.graphhopper.routing.util.LevelEdgeFilter.accept(LevelEdgeFilter.java:48) 
at com.graphhopper.routing.AbstractRoutingAlgorithm.accept(AbstractRoutingAlgorithm.java:79) 
at com.graphhopper.routing.AStarBidirection.fillEdges(AStarBidirection.java:217) 
at com.graphhopper.routing.AStarBidirection.fillEdgesFrom(AStarBidirection.java:194) 
at com.graphhopper.routing.AbstractBidirAlgo.runAlgo(AbstractBidirAlgo.java:68) 
at com.graphhopper.routing.AbstractBidirAlgo.calcPath(AbstractBidirAlgo.java:61) 

무슨 일입니까? 일부 설정 플래그가 누락 되었습니까?

답변

0

나는 당신이 CH 그래프

graph.getGraph(CHGraphImpl.class)

대신 의 QueryGraph 생성자에게 전달하는 것 같아요.

+0

감사합니다. 그것은 트릭을했다. [문서] (https://github.com/graphhopper/graphhopper/blob/master/docs/core/low-level-api.md)가 코드의 최신 변경 사항을 반영 할 수 있다면 좋을 것입니다. – Andreas

+0

아, 네. 풀 요청을 제출 하시겠습니까 :)? – Karussell

+0

완료. 이미 준비된 파일을 디스크에서 다시 읽을 때 PrepareContractionHierarchies에 doWork()가 필요하지 않은 것은 사실입니까? – Andreas