Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Decompress Polyline Algorithmus (https://www.delphipraxis.net/185086-decompress-polyline-algorithmus.html)

MetalChris 13. Mai 2015 18:49

Decompress Polyline Algorithmus
 
Hallo,

ich möchte eine mit diesem Algorithmus enkodierte Polyline wieder dekodieren.

Leider hab ich nur folgenden Javascript gefunden:

Code:
//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;
}

};
Jemand eine Idee wie man dies am besten in Delphi lösen könnte?

nuclearping 13. Mai 2015 19:14

AW: Decompress Polyline Algorithmus
 
Wo liegt das Problem denn genau?

Du brauchst doch nur den beschriebenen Algorithmus umkehren? Bzw. das JavaScript nach Delphi konvertieren?

himitsu 13. Mai 2015 19:37

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 (Delphi-Referenz durchsuchenOdd) 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