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

Çoklu çizgi kodlaması, bir dizi kodu saklamanıza olanak tanıyan kayıplı bir sıkıştırma algoritmasıdır. koordinatlarını tek bir dize olarak gösterir. Nokta koordinatları, işaretli değerler kullanılarak kodlanır. Sadece birkaç statik noktanız varsa, etkileşimli çoklu çizgi kodlama yardımcı programı hakkında daha fazla bilgi edinin.

Kodlama işlemi, ikilik bir değeri bir karakter kodu dizisine dönüştürür. Bilinen base64 kodlama şemasını kullanan ASCII karakterler: düzgün görüntüleme sağlamak için kodlanan değerler 63 (ASCII karakteri '?') ile toplanır. emin olmanız gerekir. Algoritma ayrıca, belirli bir noktaya ait karakter kodları için her birinin en az anlamlı bitini kontrol ederek bayt grubu; bu bit 1'e ayarlanırsa nokta henüz tam olarak oluşturulmamıştır ve gerektiğini bileceksiniz.

Buna ek olarak, alandan tasarruf etmek için noktalar yalnızca önceki nokta (tabii ilki için geçerli değildir). Tüm noktalar kodlanmıştır enlem ve boylamlar imzalı değerler olduğundan Base64'te işaretli tam sayılar olarak gösterilir. Çoklu çizgi içindeki kodlama biçimi, iki koordinatları göstermelidir Enlem ve boylamı makul bir hassasiyette temsil eden Maksimum +/- 180 derece boylam, 5 ondalık basamak hassasiyeti (180,00000 ila -180,00000) bu durumda 32 bit imzalı ikili tam sayı değeri.

Ters eğik çizginin bir kaçış karakteri olarak yorumlandığını unutmayın. dize değişmez. Bu yardımcı programın herhangi bir çıktısı ters eğik çizgiyi dönüştürür dize sabit değerlerinde çift ters eğik çizgi kullanmayı deneyin.

Bu tür imzalı bir değeri kodlama 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 ikili sayıya dönüştürün. Negatif bir değerin kullanılarak hesaplanır ikilinin tamamlaması gerekir. Bunun için ikili değeri ters çevirip sonuca bir ekleme yapmanız gerekir:
    00000001 00010010 10100001 11110001
    11111110 11101101 01011110 00001110
    11111110 11101101 01011110 00001111
    
  4. İkili değer değerini bir bit sola kaydırın:
    11111101 11011010 10111100 00011110
  5. Orijinal ondalık değer negatifse şu kodlamayı tersine çevirin:
    00000010 00100101 01000011 11100001
  6. İkili değeri, 5 bitlik parçalara (sağ taraftan başlayarak) ayırın:
    00001 00010 01010 10000 11111 00001
  7. 5 bitlik parçaları ters sırada yerleştirin:
    00001 11111 10000 01010 00010 00001
  8. VEYA başka bir bit parçası aşağıdaki gibiyse 0x20 içeren her bir değere:
    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 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, kodlanmış noktalara ilişkin bazı örnekler gösterilmiştir. kodlamaları önceki noktalardan bir dizi ofset olarak ayarlar.

Örnek

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

Enlem Boylam E5'te enlem E5 biçiminde boylam Enlem'deki 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`@