// 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());