Kodowanie liniowe to stratny algorytm kompresji, który umożliwia przechowywanie serii współrzędnych jako pojedynczego ciągu. Współrzędne punktów są kodowane z wykorzystaniem podpisanych wartości. Jeśli masz tylko kilka punktów statycznych, możesz też użyć interaktywnego narzędzia do kodowania linii łamanych.
Proces kodowania przekształca wartość binarną w serię kodów znaków ASCII zgodnie ze znanym schematem kodowania base64. Aby zapewnić prawidłowe wyświetlanie tych znaków, zakodowane wartości są sumowane z 63 (znak ASCII '\">#39;) przed przekształceniem ich w kod ASCII. Algorytm sprawdza również dodatkowe kody znaków dla danego punktu, sprawdzając najmniejszą część każdej grupy bajtów. Jeśli ta wartość wynosi 1, punkt nie jest jeszcze w pełni uformowany i trzeba uwzględnić dodatkowe dane.
Aby zaoszczędzić miejsce, punkty uwzględniają tylko przesunięcie z poprzedniego punktu (z wyjątkiem pierwszego punktu). Wszystkie punkty są kodowane w Base64 jako liczby całkowite, ponieważ szerokość i długość geograficzna są wartościami podpisanymi. Format kodowania na linii łamanej musi reprezentować dwie współrzędne reprezentujące szerokość i długość geograficzną z rozsądną dokładnością. Biorąc pod uwagę maksymalną długość geograficzną od +/- 180 stopni do precyzji 5 miejsc po przecinku, (180.00000 do -180.00000) powoduje to wygenerowanie 32-bitowej wartości binarnej, która jest liczbą całkowitą.
Pamiętaj, że ukośnik lewy jest interpretowany jako znak zmiany znaczenia w literalskich ciągach znaków. Wszystkie dane wyjściowe tego narzędzia powinny zamienić znaki ukośnika lewego na podwójny ukośnik lewy w ciągu literałów łańcuchowych.
Poniżej znajdują się instrukcje dotyczące kodowania takiej podpisanej wartości.
- Wpisz początkową wartość podpisu:
-179.9832104 - Wybierz wartość dziesiętną i pomnóż ją przez 1e5, zaokrąglając wynik:
-17998321 - Konwertuj wartość dziesiętną na binarną. Pamiętaj, że wartość ujemna musi zostać obliczona za pomocą jej uzupełnienia przez odwrócenie wartości binarnej i dodanie jej do wyniku:
00000001 00010010 10100001 11110001
11110101010101010101010101010101010101010101010101010101010101 - Zmień wartość binarną w lewo na lewo:
11111100 11011010 10111100 00011110 - Jeśli pierwotna wartość dziesiętna jest ujemna, odwróć to kodowanie:
00000010 00100101 01000011 11100001 - Podziel wartość binarną na 5-bitowe fragmenty (zaczynając od prawej strony):
00001 00010 01010 10000 11111 00001 - Umieść 5-bitowe fragmenty w odwrotnej kolejności:
00001 11111 10000 01010 00010 00001 - LUB każda wartość z rozmiarem 0 x 20, jeśli występuje inny fragment:
100001 111111 110000 101010 100010 000001 - Przekonwertuj każdą wartość na wartość dziesiętną:
33 63 48 42 34 1 - Dodaj 63 do każdej wartości:
96 126 111 105 97 64 - Przekonwertuj każdą wartość na odpowiedni kod ASCII:
`~oia@
W tabeli poniżej znajdziesz przykłady zakodowanych punktów. Są one widoczne jako seria przesunięcia w stosunku do poprzednich punktów.
Przykład
Punkty: (38.5, -120.2), (40.7, -120.95), (43.252, -126.453)
Szerokość geograficzna | Długość geograficzna | Szerokość geograficzna w E5 | Długość geograficzna w E5 | Zmiana szerokości | Zmiana długości | Szerokość zakodowana | Długość geograficzna zakodowana | Zakodowany punkt |
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`@ |
Zakodowana linia łamana: _p~iF~ps|U_ulLnnqC_mqNvxq`@