Decompress Polyline Algorithmus
Hallo,
ich möchte eine mit diesem Algorithmus enkodierte Polyline wieder dekodieren. Leider hab ich nur folgenden Javascript gefunden:
Code:
Jemand eine Idee wie man dies am besten in Delphi lösen könnte?
//decode compressed route geometry
_decode: function(encoded, precision) { precision = Math.pow(10, -precision); var len = encoded.length, index=0, lat=0, lng = 0, array = []; while (index < len) { var b, shift = 0, result = 0; do { b = encoded.charCodeAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); var dlat = ((result & 1) ? ~(result >> 1) : (result >> 1)); lat += dlat; shift = 0; result = 0; do { b = encoded.charCodeAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); var dlng = ((result & 1) ? ~(result >> 1) : (result >> 1)); lng += dlng; //array.push( {lat: lat * precision, lng: lng * precision} ); array.push( [lat * precision, lng * precision] ); } return array; } }; |
AW: Decompress Polyline Algorithmus
Wo liegt das Problem denn genau?
Du brauchst doch nur den beschriebenen Algorithmus umkehren? Bzw. das JavaScript nach Delphi konvertieren? |
AW: Decompress Polyline Algorithmus
Und warum übersetzt du das dann nicht einfach ins Pascal?
<< ... SHL x |= y ... x := x or y ~ ... - & ... and usw. Der Algo ist auch so recht einfach Ord(c)-63 und 5 Bit ($1F) = die Zeichen @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ jedes Zeichen ergibt also 5 Bit eines Wertes, als Trennzeichen dient das Leerzeichen oder alles Kleinere (Zeilenumbrüche usw.) Das kleinste Bit (Odd) wird dabei als Vorzeichen verwendet. Es werden nacheinander zwei "Zahlenblöcke" dekodiert und jeweils miteinander aufsummiert. Es wird also immer die Differenz zum vorherrigen Wertepaar gespeichert/ausgelesen und am Anfang natürlich in Bezug auf 0:0. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz