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



在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加载"。

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

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

BTW:在主GraphHopper.setGraph是公共的吗?

相关内容

  • 没有找到相关文章

最新更新