После двух трудных дней, проходящих модульные тесты и фрагменты графического купе на GitHub и JavaDocs, думая, что я могу объединить все в очень простое приложение java, Я должен прийти к выводу, что я не могу :(Как быстро запустить графический кузнец с моим собственным графиком - Основы
Все, что я хочу сделать, это:
- построить график
- Init 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 говорит: "Исключение в потоке "основного" java.lang.IllegalStateException: Вызов нагрузки или importOrLoad перед маршрутизацией ". Но я звоню .load() в бункер, который, к сожалению, возвращает «ложь», но я не могу понять, почему.
Моя цель для этой темы - предоставить очень простой пример рабочего кода компонентов GH и как подключить их для решения прецедента «Маршрут на графике, не загружаемом из OSM».
ad 1. uhm ... ok, не думал об этом, но звучит очевидно. По крайней мере, анализ этого сегмента кода дал мне больше понимания работы графического процессора. –
ad 2. В соответствии с 1. Я думаю, что я сделаю класс MyGraphHopper, который реализует интерфейс GraphHopperAPI (как компромисс), вишню, выбирающую некоторые сегменты кода из GraphHopper.java. Но тогда я думаю, что мне нужно знать, где определена «postProcessing»? И где он называется? –
ad BTW: Сначала (как я это видел в модульном тесте, и он появился в завершении кода NB). Я думал, что .setGraph() является общедоступным ... Ура! Это то, что я искал ... нет! Почему нет такой функции, как эта публика? –