UNPKG

@iwpnd/valhalla-ts

Version:

A nodejs client and helper utilities for valhalla routing engine

66 lines 1.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.polylineToLineString = exports.decodePolyline = void 0; /** * Decode a valhalla polyline to an array of {@link GeoJSON.Position} * * @param {String} polyline * @param {Number} precision = 6 * @returns {@link GeoJSON.Position[]} * * @see https://github.com/DennisOSRM/Project-OSRM-Web/blob/master/WebContent/routing/OSRM.RoutingGeometry.js */ const decodePolyline = (polyline, precision = 6) => { let index = 0; let lat = 0; let lon = 0; let result = 0; let shift = 0; let byte = null; let dLatitude; let dLongitude; const factor = 10 ** precision; const coordinates = []; while (index < polyline.length) { byte = 0x20; shift = 0; result = 0; while (byte >= 0x20) { byte = polyline.charCodeAt(index) - 63; result |= (byte & 0x1f) << shift; shift += 5; index++; } dLatitude = result & 1 ? ~(result >> 1) : result >> 1; byte = 0x20; shift = 0; result = 0; while (byte >= 0x20) { byte = polyline.charCodeAt(index) - 63; result |= (byte & 0x1f) << shift; shift += 5; index++; } dLongitude = result & 1 ? ~(result >> 1) : result >> 1; lat += dLatitude; lon += dLongitude; coordinates.push([lon / factor, lat / factor]); } return coordinates; }; exports.decodePolyline = decodePolyline; /** * Decode valhalla polyline shape to {@link GeoJSON.LineString} * * @param {String} polyline * @param {Number} precision * * @returns {GeoJSON.LineString} * */ const polylineToLineString = (polyline, precision = 6) => ({ type: 'LineString', coordinates: (0, exports.decodePolyline)(polyline, precision), }); exports.polylineToLineString = polylineToLineString; //# sourceMappingURL=decode-polyline.js.map