-function GraphHopperEngine(id, vehicleParam) {
+function GraphHopperEngine(id, vehicleType) {
var GH_INSTR_MAP = {
"-3": 6, // sharp left
"-2": 7, // left
getRoute: function (points, callback) {
// GraphHopper Directions API documentation
// https://github.com/graphhopper/directions-api/blob/master/docs-routing.md
- var url = document.location.protocol + "//graphhopper.com/api/1/route?" +
- vehicleParam +
- "&locale=" + I18n.currentLocale() +
- "&key=LijBPDQGfu7Iiq80w3HzwB4RUDJbMbhs6BU0dEnn" +
- "&type=jsonp" +
- "&elevation=false" +
- "&instructions=true";
-
- for (var i = 0; i < points.length; i++) {
- url += "&point=" + points[i].lat + ',' + points[i].lng;
- }
-
- $.ajax({
- url: url,
- dataType: 'jsonp',
+ return $.ajax({
+ url: document.location.protocol + OSM.GRAPHHOPPER_URL,
+ data: {
+ vehicle: vehicleType,
+ locale: I18n.currentLocale(),
+ key: "LijBPDQGfu7Iiq80w3HzwB4RUDJbMbhs6BU0dEnn",
+ type: "jsonp",
+ elevation: false,
+ instructions: true,
+ point: points.map(function (p) { return p.lat + "," + p.lng; })
+ },
+ traditional: true,
+ dataType: "jsonp",
success: function (data) {
if (!data.paths || data.paths.length === 0)
return callback(true);
]); // TODO does graphhopper map instructions onto line indices?
}
- callback(null, {
+ callback(false, {
line: line,
steps: steps,
distance: path.distance,
time: path.time / 1000
});
+ },
+ error: function () {
+ callback(true);
}
});
}
};
}
-OSM.Directions.addEngine(new GraphHopperEngine("graphhopper_bicycle", "vehicle=bike"), true);
-OSM.Directions.addEngine(new GraphHopperEngine("graphhopper_foot", "vehicle=foot"), true);
+OSM.Directions.addEngine(new GraphHopperEngine("graphhopper_bicycle", "bike"), true);
+OSM.Directions.addEngine(new GraphHopperEngine("graphhopper_foot", "foot"), true);