X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/957ae192b61efa1d8de354f45f28429b3df75cf4..7869631e83a7686c06d92aaefb8a23245e930b57:/app/assets/javascripts/index/directions/graphhopper.js diff --git a/app/assets/javascripts/index/directions/graphhopper.js b/app/assets/javascripts/index/directions/graphhopper.js index 191475873..430801a3b 100644 --- a/app/assets/javascripts/index/directions/graphhopper.js +++ b/app/assets/javascripts/index/directions/graphhopper.js @@ -1,21 +1,21 @@ (function () { - function GraphHopperEngine(id, vehicleType) { + function GraphHopperEngine(modeId, vehicleType) { const GH_INSTR_MAP = { - "-3": 7, // sharp left - "-2": 6, // left - "-1": 5, // slight left - "0": 0, // straight - "1": 1, // slight right - "2": 2, // right - "3": 3, // sharp right - "4": 14, // finish reached - "5": 14, // via reached - "6": 10, // roundabout - "-7": 19, // keep left - "7": 18, // keep right - "-98": 4, // unknown direction u-turn - "-8": 4, // left u-turn - "8": 4 // right u-turn + "-3": "sharp-left", + "-2": "left", + "-1": "slight-left", + "0": "straight", + "1": "slight-right", + "2": "right", + "3": "sharp-right", + "4": "destination", // finish reached + "5": "destination", // via reached + "6": "roundabout", + "-7": "fork-left", + "7": "fork-right", + "-98": "u-turn", // unknown direction u-turn + "-8": "u-turn", // left u-turn + "8": "u-turn" // right u-turn }; function _processDirections(path) { @@ -34,7 +34,7 @@ lineseg ]; // TODO does graphhopper map instructions onto line indices? }); - steps.at(-1)[1] = 14; + steps.at(-1)[1] = "destination"; return { line: line, @@ -47,42 +47,34 @@ } return { - id: id, + mode: modeId, + provider: "graphhopper", creditline: "GraphHopper", draggable: false, - getRoute: function (points, callback) { + getRoute: function (points, signal) { // GraphHopper Directions API documentation // https://graphhopper.com/api/1/docs/routing/ - const data = { + const query = new URLSearchParams({ vehicle: vehicleType, locale: I18n.currentLocale(), key: "LijBPDQGfu7Iiq80w3HzwB4RUDJbMbhs6BU0dEnn", elevation: false, instructions: true, - turn_costs: vehicleType === "car", - point: points.map(p => p.lat + "," + p.lng) - }; - return $.ajax({ - url: OSM.GRAPHHOPPER_URL, - data, - traditional: true, - dataType: "json", - success: function ({ paths }) { - if (!paths || paths.length === 0) { - return callback(true); - } - callback(false, _processDirections(paths[0])); - }, - error: function () { - callback(true); - } + turn_costs: vehicleType === "car" }); + points.forEach(p => query.append("point", p.lat + "," + p.lng)); + return fetch(OSM.GRAPHHOPPER_URL + "?" + query, { signal }) + .then(response => response.json()) + .then(({ paths }) => { + if (!paths || paths.length === 0) throw new Error(); + return _processDirections(paths[0]); + }); } }; } - OSM.Directions.addEngine(new GraphHopperEngine("graphhopper_car", "car"), true); - OSM.Directions.addEngine(new GraphHopperEngine("graphhopper_bicycle", "bike"), true); - OSM.Directions.addEngine(new GraphHopperEngine("graphhopper_foot", "foot"), true); + OSM.Directions.addEngine(new GraphHopperEngine("car", "car"), true); + OSM.Directions.addEngine(new GraphHopperEngine("bicycle", "bike"), true); + OSM.Directions.addEngine(new GraphHopperEngine("foot", "foot"), true); }());