2 // Doesn't yet support hints
4 function OSRMEngine() {
6 name: "javascripts.directions.engines.osrm_car",
7 creditline: '<a href="http://project-osrm.org/" target="_blank">OSRM</a>',
10 getRoute: function (isFinal, points, callback) {
11 var TURN_INSTRUCTIONS = [
13 I18n.t('javascripts.directions.instructions.continue_on'), // 1
14 I18n.t('javascripts.directions.instructions.slight_right'), // 2
15 I18n.t('javascripts.directions.instructions.turn_right'), // 3
16 I18n.t('javascripts.directions.instructions.sharp_right'), // 4
17 I18n.t('javascripts.directions.instructions.uturn'), // 5
18 I18n.t('javascripts.directions.instructions.sharp_left'), // 6
19 I18n.t('javascripts.directions.instructions.turn_left'), // 7
20 I18n.t('javascripts.directions.instructions.slight_left'), // 8
21 I18n.t('javascripts.directions.instructions.via_point'), // 9
22 I18n.t('javascripts.directions.instructions.follow'), // 10
23 I18n.t('javascripts.directions.instructions.roundabout'), // 11
24 I18n.t('javascripts.directions.instructions.leave_roundabout'), // 12
25 I18n.t('javascripts.directions.instructions.stay_roundabout'), // 13
26 I18n.t('javascripts.directions.instructions.start'), // 14
27 I18n.t('javascripts.directions.instructions.destination'), // 15
28 I18n.t('javascripts.directions.instructions.against_oneway'), // 16
29 I18n.t('javascripts.directions.instructions.end_oneway') // 17
32 var url = "http://router.project-osrm.org/viaroute?z=14&output=json";
34 for (var i = 0; i < points.length; i++) {
35 url += "&loc=" + points[i].lat + ',' + points[i].lng;
39 url += "&instructions=true";
44 success: function (data) {
45 if (data.status == 207)
46 return callback(true);
48 var line = L.PolylineUtil.decode(data.route_geometry);
49 for (var i = 0; i < line.length; i++) {
55 for (i = 0; i < data.route_instructions.length; i++) {
56 var s = data.route_instructions[i];
58 var instCodes = s[0].split('-');
59 var instText = "<b>" + (i + 1) + ".</b> ";
60 instText += TURN_INSTRUCTIONS[instCodes[0]];
62 instText += "exit " + instCodes[1] + " ";
64 if (instCodes[0] != 15) {
65 instText += s[1] ? "<b>" + s[1] + "</b>" : I18n.t('javascripts.directions.instructions.unnamed');
67 if ((i + 1) < data.route_instructions.length) {
68 linesegend = data.route_instructions[i + 1][3] + 1;
70 linesegend = s[3] + 1;
72 steps.push([line[s[3]], s[0].split('-')[0], instText, s[2], line.slice(s[3], linesegend)]);
78 distance: data.route_summary.total_distance,
79 time: data.route_summary.total_time
87 OSM.Directions.addEngine(OSRMEngine(), false);