Çoklu kodlama kodlaması, bir dizi koordinatı tek bir dize olarak depolamanıza olanak tanıyan kayıplı bir sıkıştırma algoritmasıdır. Nokta koordinatları, değerler kullanılarak kodlanır. Yalnızca birkaç statik noktanız varsa etkileşimli çoklu çizgi kodlama yardımcı programını da kullanabilirsiniz.
Kodlama işlemi, bilinen Base64 kodlama şemasını kullanarak ikili değeri ASCII karakterler dizisine dönüştürür: Bu karakterlerin doğru gösterildiğinden emin olmak için, kodlanmış değerler ASCII'ye dönüştürülmeden önce, 63 (ASCII karakteri '?#39;) karakteriyle toplanır. Algoritma, her bir bayt grubunun en az anlamlı olan bitini kontrol ederek belirli bir nokta için ek karakter kodları da kontrol eder. Bu bit 1 olarak ayarlanırsa, nokta henüz tam olarak oluşturulmamıştır ve ek verilerin izlenmesi gerekir.
Alandan tasarruf etmek için noktalar yalnızca önceki noktadan itibaren ofseti içerir (elbette ilk nokta için hariç tutma). Tüm noktalar, Base64'te imzalı tam sayılar olarak kodlanmıştır. Bunun nedeni, enlem ve boylam değerlerinin imzalı değerler olmasıdır. Bir çoklu çizgideki kodlama biçiminin, enlem ve boylamı makul bir kesinlikte temsil eden iki koordinatı temsil etmesi gerekir. 5 ondalık basamak kesinliği için +/- 180 derece maksimum boylam (180.00000 ila -180.00000) göz önüne alındığında, 32 bit imzalı tam sayı değerine ihtiyaç duyar.
Ters eğik çizginin, dize değişmez değerleri içinde bir çıkış karakteri olarak yorumlandığını unutmayın. Bu yardımcı programın çıktıları, dize değişmez karakterleri içindeki ters eğik çizgi karakterlerini çift ters eğik çizgiye dönüştürmelidir.
Böyle bir imzalı değeri kodlamayla ilgili adımlar aşağıda belirtilmiştir.
- İlk imzalı değeri alın:
-179.9832104 - Ondalık değeri alın ve sonucu yuvarlayarak 1e5 ile çarpın:
-17998321 - Ondalık değeri ikiliye dönüştürün. Negatif bir değerin, iki değeri tersine çevirerek ve sonuca bir değer ekleyerek ikisi tamamlayıcı değeri kullanılarak hesaplanması gerektiğini unutmayın:
00000001 00010010 10100001 111100001
11111110 11100001111101010101010101010101010101010101010101 - İkili değeri bir bit sola kaydırın:
11111101 11011010 10111100 00011110 - Orijinal ondalık değer negatifse şu kodlamayı tersine çevirin:
00000010 00100101 01000011 11100001 - İkili değeri 5 bit parçalara ayırın (sağ taraftan başlayarak):
00001 00010 01010 10000 11111 00001 - 5 bit parçalarını yeniden sıralayın:
00001 11111 10000 01010 00010 00001 - VEYA başka bir bit parçasının ardından her değer 0x20 ile gelir:
100001 111111 110000 101010 100010 000001 - Her bir değeri ondalık değere dönüştürün:
33 63 48 42 34 1 - Her değere 63'ü ekleyin:
96 126 111 105 97 64 - Her bir değeri ASCII eşdeğerine dönüştürün:
`~oia@
Aşağıdaki tabloda, kodlanmış noktalara bazı örnekler verilmiştir. Kodlamalar, önceki noktalardaki ofsetler dizisi olarak gösterilmiştir.
Örnek
Puanlar: (38,5, -120,2), (40,7, -120,95), (43,252, -126,453)
Enlem | Boylam | E5'te enlem | E5 Boylamları | Enlemi değiştir | Boylamdaki Değişim | Kodlanmış Enlem | Boylam Boylam | Kodlanmış Nokta |
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`@ |
Kodlanmış çoklu çizgi: _p~iF~ps|U_ulLnnqC_mqNvxq`@