在GitHub和JavaDocs上艰难地完成了两天的单元测试和graphhopper的片段后,我认为我可能能够将所有这些放在一个非常基本的java应用程序中,我不得不得出结论,我不能:(
我只想做:
- 构建图形
- 初始化graphhopper并正确配置
- 加载图形
- 上面的路线
这是我迄今为止的代码:
package javaapplication1;
import com.graphhopper.*;
import com.graphhopper.routing.util.EncodingManager;
import com.graphhopper.storage.GraphBuilder;
import com.graphhopper.storage.GraphStorage;
public class JavaApplication1 {
protected static String location = "./tmp/graphstorage";
protected static String defaultGraph = "./tmp/graphstorage/default";
private static final EncodingManager encodingManager = new EncodingManager("CAR");
public static GraphStorage createGraph() {
GraphStorage graph = new GraphBuilder(encodingManager).setLocation(location).create();
graph.setNode(0, 42, 10);
graph.setNode(1, 42.1, 10.1);
graph.setNode(2, 42.1, 10.2);
graph.setNode(3, 42, 10.4);
graph.setNode(4, 41.9, 10.2);
graph.edge(0, 1, 10, true);
graph.edge(1, 2, 10, false);
graph.edge(2, 3, 10, true);
graph.edge(0, 4, 40, true);
graph.edge(4, 3, 40, true);
return graph;
}
public static void main(String[] args) {
double fromLat = 42;
double fromLon = 10.4;
double toLat = 42;
double toLon = 10;
GraphStorage gs = createGraph();
GraphHopperAPI instance = new GraphHopper()
.setEncodingManager(encodingManager)
.setGraphHopperLocation(location)
.disableCHShortcuts();
GraphHopper hopper = (GraphHopper) instance;
//hopper.setGraph(createGraph()); // protected because only for testing?
hopper.load(location);
GHResponse ph = hopper.route(new GHRequest(fromLat, fromLon, toLat, toLon));
if(ph.isFound()) {
System.out.println(ph.getDistance());
System.out.println(ph.getPoints().getSize());
} else {
System.out.println("No Route found!");
}
}
}
Java说:"线程"main"Java.lang.IllegalStateException中的异常:在路由之前调用load或importOrLoad"。但我在hopper上调用.load(),不幸的是它返回了"false",但我不知道为什么。
我这个线程的目标是提供GH组件的一个非常基本的工作代码示例,以及如何将它们连接起来以解决用例"在图上路由,而不是从OSM加载"。
如果你不想使用OSM作为数据源,你必须选择:
- 通过复制和粘贴GraphHopper.route下的代码来使用低级API。无需重用GraphHopper类。但这可能更难
- 执行
MyGraphHopper extends GraphHopper
并重载必要的方法。请确保在调用"postProcessing"方法之前设置图形。例如,创建快捷方式并构建位置索引
BTW:在主GraphHopper.setGraph是公共的吗?