X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/2cfc030bbac65d8cb687ee17e6fbf18ffa5ea2cc..87363858cb4e9cff9b5c29ac6e95425c5c3fab8b:/app/assets/javascripts/index/directions/fossgis_osrm.js diff --git a/app/assets/javascripts/index/directions/fossgis_osrm.js b/app/assets/javascripts/index/directions/fossgis_osrm.js index bb968f2da..2332049be 100644 --- a/app/assets/javascripts/index/directions/fossgis_osrm.js +++ b/app/assets/javascripts/index/directions/fossgis_osrm.js @@ -2,7 +2,7 @@ // Doesn't yet support hints (function () { - function FOSSGISOSRMEngine(id, vehicleType) { + function FOSSGISOSRMEngine(modeId, vehicleType) { let cachedHints = []; function _processDirections(route) { @@ -150,19 +150,20 @@ } return { - id: id, + mode: modeId, + provider: "fossgis_osrm", creditline: "OSRM (FOSSGIS)", 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 = []; @@ -170,27 +171,18 @@ 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); }());