L'encodage de polylignes est un algorithme de compression avec perte qui permet de stocker comme une seule chaîne. Les coordonnées des points sont encodées à l'aide de valeurs signées. Si vous n'avez que quelques points statiques, vous pouvez également utiliser le schéma interactif utilitaire d'encodage de polylignes.
Le processus de codage convertit une valeur binaire en une série de codes de caractère pour Caractères ASCII en base64, pour un affichage correct les valeurs encodées sont additionnées par 63 (le caractère ASCII « ? ») avant de les convertir en ASCII. L'algorithme recherche également codes de caractères pour un point donné en vérifiant le bit le moins significatif de chaque groupe d'octets Si ce bit est défini sur 1, le point n'est pas encore entièrement formé et des données supplémentaires doivent s’appliquer.
De plus, pour libérer de l'espace, les points d'accès n'incluent que le décalage par rapport au point précédent (sauf bien sûr le premier point). Tous les points sont encodés en Base64 sous forme d'entiers signés, comme les latitudes et les longitudes sont des valeurs signées. Le format d'encodage dans une polyligne doit représenter deux coordonnées représentant la latitude et la longitude avec une précision raisonnable. Avec une valeur maximale longitude de +/- 180 degrés avec une précision de cinq décimales (de 180,00000 à -180,00000), il est donc nécessaire d'avoir un pipeline 32 bits signé nombre entier binaire.
Notez que la barre oblique inverse est interprétée comme un caractère d'échappement dans les littéraux de chaîne. . Toute sortie de cet utilitaire doit convertir la barre oblique inverse. en double barre oblique inversée dans les littéraux de chaîne.
Les étapes pour encoder une valeur signée sont indiquées ci-dessous.
- Prenez la valeur signée initiale:
-179.9832104
- Prenez la valeur décimale et multipliez-la par 1e5, en arrondissant le résultat :
-17998321
- Convertissez la valeur décimale en valeur binaire. Notez qu'une valeur négative doit être
calculé à l'aide de la métrique
complément de deux en inversant la valeur binaire et en ajoutant un au résultat:
00000001 00010010 10100001 11110001 11111110 11101101 01011110 00001110 11111110 11101101 01011110 00001111
- Décalez la valeur binaire d'un bit vers la gauche:
11111101 11011010 10111100 00011110
- Si la valeur décimale d'origine est négative, inversez l'encodage suivant:
00000010 00100101 01000011 11100001
- Divisez la valeur binaire en fragments de 5 bits (en commençant par le côté droit):
00001 00010 01010 10000 11111 00001
- Inversez l'ordre des fragments de 5 bits:
00001 11111 10000 01010 00010 00001
- Utilisez l'opérateur OR (OU) sur chaque valeur avec 0x20 si un autre bloc de bits suit:
100001 111111 110000 101010 100010 000001
- Convertissez chaque valeur en décimale:
33 63 48 42 34 1
- Ajoutez 63 à chaque valeur:
96 126 111 105 97 64
- Convertissez chaque valeur en son équivalent ASCII:
`~oia@
Le tableau ci-dessous présente quelques exemples de points encodés, indiquant le comme une série de décalages par rapport aux points précédents.
Exemple
Points: (38.5, -120.2), (40.7, -120.95), (43.252, -126.453)
Latitude | Longitude | Latitude en E5 | Longitude en E5 | Modification de la latitude | Modification de la longitude | Latitude encodée | Longitude encodée | Point encodé |
38.5 | -120.2 | 3850000 | -12020000 | +3850000 | -12020000 | _p~iF |
~ps|U |
_p~iF~ps|U |
40.7 | -120.95 | 4070000 | -12095000 | +220000 | -75000 | _ulL |
nnqC |
_ulLnnqC |
43.252 | -126.453 | 4325200 | -12645300 | +255200 | -550300 | _mqN |
vxq`@ |
_mqNvxq`@ |
Polyligne encodée: _p~iF~ps|U_ulLnnqC_mqNvxq`@