gpt4 book ai didi

java - 如何使用我自己的图表快速启动 graphhopper - 基础知识

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:06 24 4
gpt4 key购买 nike

在艰难地度过了两天 GitHub 和 JavaDocs 上的单元测试和 graphhopper 片段之后,认为我可以将所有内容放在一个非常基本的 Java 应用程序中,我必须得出结论,我是不能:(

我只想:

  1. 构建图表
  2. 初始化graphhopper并正确配置
  3. 加载图表
  4. 路线在上面

到目前为止我的代码是这样的:

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 中的异常:在路由之前调用加载或 importOrLoad”。但我在料斗上调用 .load(),不幸的是它返回“false”,但我无法弄清楚原因。

我的这个线程的目标是提供一个非常基本的 GH 组件工作代码示例,以及如何将它们连接起来以解决用例“在图形上路由,而不是从 OSM 加载”。

最佳答案

如果您不想使用 OSM 作为数据源,您必须选择:

  1. 通过复制并粘贴 GraphHopper.route 下的代码来使用低级 API。无需重用 GraphHopper 类。但这可能更难。
  2. MyGraphHopper extends GraphHopper 并重载必要的方法。确保在调用“postProcessing”方法之前设置图表。哪个例如创建快捷方式并构建 locationIndex。

顺便说一句:在 master GraphHopper.setGraph 中是公开的?

关于java - 如何使用我自己的图表快速启动 graphhopper - 基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com