// OSRM car engine
// Doesn't yet support hints
OSRMEngine = function (vehicleName, baseURL, locale) {
this.vehicleName = vehicleName;
this.baseURL = baseURL;
this.locale = locale;
if (!locale)
this.locale = "en";
};
OSRMEngine.prototype.createConfig = function () {
var that = this;
return {
name: "javascripts.directions.engines.osrm_" + this.vehicleName.toLowerCase(),
creditline: 'OSRM',
draggable: true,
_hints: {},
getRoute: function (isFinal, points) {
var url = that.baseURL + "?z=14&output=json";
for (var i = 0; i < points.length; i++) {
var pair = points[i].join(',');
url += "&loc=" + pair;
if (this._hints[pair]) url += "&hint=" + this._hints[pair];
}
if (isFinal) url += "&instructions=true";
this.requestCORS(url);
},
gotRoute: function (router, data) {
if (data.status == 207) {
return false;
}
// Draw polyline
var line = L.PolylineUtil.decode(data.route_geometry);
for (i = 0; i < line.length; i++) {
line[i].lat /= 10;
line[i].lng /= 10;
}
router.setPolyline(line);
// Assemble instructions
var steps = [];
for (i = 0; i < data.route_instructions.length; i++) {
var s = data.route_instructions[i];
var linesegend;
var instCodes = s[0].split('-');
var instText = "" + (i + 1) + ". ";
instText += TURN_INSTRUCTIONS[instCodes[0]];
if (instCodes[1]) {
instText += "exit " + instCodes[1] + " ";
}
if (instCodes[0] != 15) {
instText += s[1] ? "" + s[1] + "" : I18n.t('javascripts.directions.instructions.unnamed');
}
if ((i + 1) < data.route_instructions.length) {
linesegend = data.route_instructions[i + 1][3] + 1;
} else {
linesegend = s[3] + 1;
}
steps.push([line[s[3]], s[0].split('-')[0], instText, s[2], line.slice(s[3], linesegend)]);
}
if (steps.length) router.setItinerary({ steps: steps, distance: data.route_summary.total_distance, time: data.route_summary.total_time });
return true;
}
};
};
OSM.RoutingEngines.add(false, new OSRMEngine("Car", "http://router.project-osrm.org/viaroute").createConfig());