Kodlanmış Çoklu Çizgi Algoritması Biçimi

Çoklu çizgi 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ı, işaretli değerler kullanılarak kodlanır. Sadece birkaç statik noktanız varsa etkileşimli çoklu çizgi kodlama yardımcı programını da kullanmak isteyebilirsiniz.

Kodlama işlemi, ikili bir değeri, bilinen base64 kodlama şemasını kullanarak ASCII karakterleri için bir dizi karakter koduna dönüştürür. Bu karakterlerin düzgün görünmesini sağlamak için, kodlanmış değerler ASCII'ye dönüştürülmeden önce 63 ("?") ile toplanır. Algoritma ayrıca her bayt grubunun en az anlamlı olan bitini kontrol ederek belirli bir nokta için ek karakter kodları olup olmadığını da kontrol eder. Bu bit 1 olarak ayarlanırsa nokta henüz tam olarak biçimlendirilmemiş demektir ve bunun ardından ek veriler gelmelidir.

Ek olarak, alandan tasarruf etmek için noktalar yalnızca önceki noktaya olan uzaklığı içerir (elbette ilk nokta hariç). Enlem ve boylamlar işaretli değerler olduğundan tüm noktalar Base64'te işaretli tam sayı olarak kodlanır. Bir çoklu çizgi içindeki kodlama biçimi, enlemi ve boylamı makul bir kesinlikte temsil eden iki koordinatı temsil etmelidir. Maksimum boylam +/- 180 derece ile 5 ondalık basamak kesinliğinde (180,00000 ila -180,00000) arandığında 32 bit işaretli ikilik tam sayı değeri gerekir.

Ters eğik çizginin dize değişmez değerlerinde bir çıkış karakteri olarak yorumlanacağını unutmayın. Bu yardımcı programın herhangi bir çıktısı, ters eğik çizgi karakterlerini dize değişmez değerleri içindeki çift ters eğik çizgiye dönüştürmelidir.

Bu tür bir imzalı değeri kodlamaya ilişkin adımlar aşağıda belirtilmiştir.

  1. İlk imzalı değeri alın:
    -179.9832104
  2. Ondalık değeri alıp 1e5 ile çarparak sonucu yuvarlayın:
    -17998321
  3. Ondalık değeri ikilik biçime dönüştürün. Negatif bir değerin, ikili değeri ters çevirerek ve sonuca bir ekleyerek ikinin tamamı kullanılarak hesaplanması gerektiğini unutmayın:
    00000001 00010010 10100001 11110001
    11111110 11101101 01011110 00001110
    11111110 11101101 01011110 00001111
    
  4. İkili değerde bir bitlik sola kaydırın:
    11111101 11011010 10111100 00011110
  5. Orijinal ondalık değer negatifse bu kodlamayı ters çevirin:
    00000010 00100101 01000011 11100001
  6. İkili değeri 5 bitlik parçalara ayırın (sağ taraftan başlayarak):
    00001 00010 01010 10000 11111 00001
  7. 5 bitlik parçaları ters sıraya yerleştirin:
    00001 11111 10000 01010 00010 00001
  8. VEYA başka bir bit parçası aşağıdaki gibiyse 0x20 içeren her değer:
    100001 111111 110000 101010 100010 000001
  9. Her bir değeri ondalık sayıya dönüştürün:
    33 63 48 42 34 1
  10. Her değere 63 tane ekleyin:
    96 126 111 105 97 64
  11. Her bir değeri ASCII eşdeğerine dönüştürün:
    `~oia@

Aşağıdaki tabloda, kodlamaları önceki noktalardan bir dizi ofset olarak gösteren kodlanmış noktalarla ilgili bazı örnekler verilmiştir.

Örnek

Puan: (38,5, -120,2), (40,7, -120,95), (43,252, -126,453)

Latitude Boylam E5'teki enlem E5'teki Boylam Latitude'daki Değişim Boylam Değişimi Kodlanmış Enlem Kodlanmış 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`@