// Doesn't yet support hints
(function () {
- function FOSSGISOSRMEngine(id, vehicleType) {
+ function FOSSGISOSRMEngine(modeId, vehicleType) {
let cachedHints = [];
function _processDirections(route) {
}
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);
}());