public GHResponse route( List<GHPoint> waypoints, List<Double> headings, boolean withInstructions) { if (waypoints.size() < 2) { throw new IllegalArgumentException("Number of waypoints must be greater or equal 2"); } GHRequest request; if (headings != null) { request = new GHRequest(waypoints, headings); request.setVehicle(FlagEncoderFactory.CAR); request.setWeighting("fastest"); if (!USE_CONTRACTION_HIERARCHIES) { request.getHints().put(Parameters.CH.DISABLE, true); request.getHints().put("routing.flexible_mode.force", true); request.getHints().put(Parameters.Routing.EDGE_BASED, true); } else { request .getHints() .put( Parameters.CH.FORCE_HEADING, true); // Allow headings for routes using CH, but may produce artifacts (see // https://github.com/graphhopper/graphhopper/pull/434#issuecomment-110275256) } } else { request = new GHRequest(waypoints); } request.setLocale(Locale.getDefault()).setAlgorithm(Parameters.Algorithms.DIJKSTRA_BI); if (!withInstructions) { request.getHints().put(Parameters.Routing.INSTRUCTIONS, false); } return gh.route(request); }