Skip to content

Instantly share code, notes, and snippets.

@valkiie
Created January 14, 2020 16:26
Show Gist options
  • Save valkiie/a20dbc088dffa62374aca5fe3cf36291 to your computer and use it in GitHub Desktop.
Save valkiie/a20dbc088dffa62374aca5fe3cf36291 to your computer and use it in GitHub Desktop.
public decode(encoded, index){
let b, result=0, shift=0
do {
b = encoded.charCodeAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
return [result,index]
}
public decodePath(encoded, is3D){
let len = encoded.length;
let index = 0;
let array = [];
let lat = 0;
let lng = 0;
let ele = 0;
while (index < len) {
let result = 0;
[result,index] = this.decode(encoded,index)
let deltaLat = ((result & 1) ? ~(result >> 1) : (result >> 1));
lat += deltaLat;
[result,index] = this.decode(encoded,index)
let deltaLon = ((result & 1) ? ~(result >> 1) : (result >> 1));
lng += deltaLon;
if (is3D) {
// elevation
[result,index] = this.decode(encoded,index)
let deltaEle = ((result & 1) ? ~(result >> 1) : (result >> 1));
ele += deltaEle;
array.push([lng * 1e-5, lat * 1e-5, ele / 100]);
} else
array.push([lng * 1e-5, lat * 1e-5]);
}
return array;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment