// Doesn't yet support hints
(function () {
- function FOSSGISOSRMEngine(id, vehicleType) {
+ function FOSSGISOSRMEngine(modeId, vehicleType) {
let cachedHints = [];
function _processDirections(route) {
"arrive": "destination"
};
const ICON_MAP = {
- "continue": 0,
- "merge right": 21,
- "merge left": 20,
- "off ramp right": 24,
- "off ramp left": 25,
- "on ramp right": 2,
- "on ramp left": 6,
- "fork right": 18,
- "fork left": 19,
- "end of road right": 22,
- "end of road left": 23,
- "turn straight": 0,
- "turn slight right": 1,
- "turn right": 2,
- "turn sharp right": 3,
- "turn uturn": 4,
- "turn slight left": 5,
- "turn left": 6,
- "turn sharp left": 7,
- "roundabout": 10,
- "rotary": 10,
- "exit roundabout": 10,
- "exit rotary": 10,
- "depart": 8,
- "arrive": 14
+ "continue": "straight",
+ "merge right": "merge-right",
+ "merge left": "merge-left",
+ "off ramp right": "exit-right",
+ "off ramp left": "exit-left",
+ "on ramp right": "right",
+ "on ramp left": "left",
+ "fork right": "fork-right",
+ "fork left": "fork-left",
+ "end of road right": "end-of-road-right",
+ "end of road left": "end-of-road-left",
+ "turn straight": "straight",
+ "turn slight right": "slight-right",
+ "turn right": "right",
+ "turn sharp right": "sharp-right",
+ "turn uturn": "u-turn",
+ "turn slight left": "slight-left",
+ "turn left": "left",
+ "turn sharp left": "sharp-left",
+ "roundabout": "roundabout",
+ "rotary": "roundabout",
+ "exit roundabout": "roundabout",
+ "exit rotary": "roundabout",
+ "depart": "start",
+ "arrive": "destination"
};
function numToWord(num) {
return ["first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth"][num - 1];
}
return {
- id: id,
+ mode: modeId,
+ provider: "fossgis_osrm",
creditline: "<a href=\"https://routing.openstreetmap.de/about.html\" target=\"_blank\">OSRM (FOSSGIS)</a>",
draggable: true,
- getRoute: function (points, callback) {
- const data = [
- { name: "overview", value: "false" },
- { name: "geometries", value: "polyline" },
- { name: "steps", value: true }
- ];
+ getRoute: function (points, signal) {
+ const query = new URLSearchParams({
+ overview: "false",
+ geometries: "polyline",
+ steps: true
+ });
if (cachedHints.length === points.length) {
- data.push({ name: "hints", value: cachedHints.join(";") });
+ query.set("hints", cachedHints.join(";"));
} else {
// invalidate cache
cachedHints = [];
const req_path = "routed-" + vehicleType + "/route/v1/driving/" + points.map(p => p.lng + "," + p.lat).join(";");
- return $.ajax({
- url: OSM.FOSSGIS_OSRM_URL + req_path,
- data,
- dataType: "json",
- success: function (response) {
- if (response.code !== "Ok") {
- return callback(true);
- }
-
+ return fetch(OSM.FOSSGIS_OSRM_URL + req_path + "?" + query, { signal })
+ .then(response => response.json())
+ .then(response => {
+ if (response.code !== "Ok") throw new Error();
cachedHints = response.waypoints.map(wp => wp.hint);
- callback(false, _processDirections(response.routes[0]));
- },
- error: function () {
- callback(true);
- }
- });
+ return _processDirections(response.routes[0]);
+ });
}
};
}
- OSM.Directions.addEngine(new FOSSGISOSRMEngine("fossgis_osrm_car", "car"), true);
- OSM.Directions.addEngine(new FOSSGISOSRMEngine("fossgis_osrm_bike", "bike"), true);
- OSM.Directions.addEngine(new FOSSGISOSRMEngine("fossgis_osrm_foot", "foot"), true);
+ OSM.Directions.addEngine(new FOSSGISOSRMEngine("car", "car"), true);
+ OSM.Directions.addEngine(new FOSSGISOSRMEngine("bicycle", "bike"), true);
+ OSM.Directions.addEngine(new FOSSGISOSRMEngine("foot", "foot"), true);
}());