Error: Exception in thread “main” java.lang.IllegalStateException: time value for relation from [x=35.162316961336394][y=-106.51387457531828] to [x=35.11498075724412][y=-106.67752402116778] does not exist
Code:
private static void optimizeRoute(GraphHopper hopper) {
VehicleTypeImpl vehicleType = VehicleTypeImpl.Builder.newInstance(“vehicle_id”)
.build();
VehicleImpl serviceStart = VehicleImpl.Builder.newInstance("0")
.setStartLocation(loc(Coordinate.newInstance(35.162316961336394, -106.51387457531828)))
.setType(vehicleType)
.setReturnToDepot(false)
.build();
Service service1 = Service.Builder.newInstance("1")
.setLocation(Location.newInstance(35.11498075724412, -106.67752402116778))
.build();
Service service2 = Service.Builder.newInstance("2")
.setLocation(Location.newInstance(35.11526306515924, -106.55295605374026))
.build();
Service service3 = Service.Builder.newInstance("3")
.setLocation(Location.newInstance(35.114527475312386, -106.56020801171813))
.build();
VehicleRoutingTransportCostsMatrix.Builder matrixBuilder = VehicleRoutingTransportCostsMatrix.Builder.newInstance(true);
calculateAndAddCosts(matrixBuilder, hopper, serviceStart.getStartLocation(), service1.getLocation(), “0”, “1”);
calculateAndAddCosts(matrixBuilder, hopper, serviceStart.getStartLocation(), service2.getLocation(), “0”, “2”);
calculateAndAddCosts(matrixBuilder, hopper, serviceStart.getStartLocation(), service3.getLocation(), “0”, “3”);
calculateAndAddCosts(matrixBuilder, hopper, service1.getLocation(), service2.getLocation(), "1", "2");
calculateAndAddCosts(matrixBuilder, hopper, service1.getLocation(), service3.getLocation(), "1", "3");
calculateAndAddCosts(matrixBuilder, hopper, service2.getLocation(), service3.getLocation(), "2", "3");
calculateAndAddCosts(matrixBuilder, hopper, service1.getLocation(), serviceStart.getStartLocation(), "1", "0");
calculateAndAddCosts(matrixBuilder, hopper, service2.getLocation(), serviceStart.getStartLocation(), "2", "0");
calculateAndAddCosts(matrixBuilder, hopper, service3.getLocation(), serviceStart.getStartLocation(), "3", "0");
VehicleRoutingTransportCosts matrix = matrixBuilder.build();
VehicleRoutingProblem.Builder problem = VehicleRoutingProblem.Builder.newInstance();
problem.setRoutingCost(matrix)
.addVehicle(serviceStart)
.addJob(service1)
.addJob(service2)
.addJob(service3);
VehicleRoutingProblem problem1 = problem.build();
VehicleRoutingAlgorithm algorithm = new SchrimpfFactory().createAlgorithm(problem1);
Collection<VehicleRoutingProblemSolution> solutions = algorithm.searchSolutions();
VehicleRoutingProblemSolution bestSolution = Solutions.bestOf(solutions);
SolutionPrinter.print(problem1, bestSolution, SolutionPrinter.Print.VERBOSE);
System.out.println("Optimized points:");
bestSolution.getRoutes().forEach(route -> route.getActivities().forEach(activity -> {
System.out.println("Lat: " + activity.getLocation().getCoordinate().getX()
+ " Lon: " + activity.getLocation().getCoordinate().getY());
}));
hopper.close();
}
private static void calculateAndAddCosts(VehicleRoutingTransportCostsMatrix.Builder matrixBuilder,
GraphHopper hopper, Location from, Location to, String fromId, String toId) {
double fromLat = from.getCoordinate().getX();
double fromLon = from.getCoordinate().getY();
double toLat = to.getCoordinate().getX();
double toLon = to.getCoordinate().getY();
GHRequest request = new GHRequest(fromLat, fromLon, toLat, toLon).setProfile("car");
GHResponse response = hopper.route(request);
if (response.hasErrors()) {
System.err.println("Ошибка при расчете маршрута: " + response.getErrors());
} else {
double distance = response.getBest().getDistance(); // Расстояние в метрах
double time = response.getBest().getTime() / 1000.0; // Время в секундах
matrixBuilder.addTransportDistance(fromId, toId, distance);
matrixBuilder.addTransportTime(fromId, toId, time);
}
}