3

经过两天的艰苦努力,在 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:在路由之前调用 load 或 importOrLoad ”。但是我在 hopper 上调用 .load(),不幸的是它返回“false”,但我无法弄清楚原因。

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

4

1 回答 1

3

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

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

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

于 2013-12-01T17:13:45.777 回答