Format Algoritme Polyline yang Dienkodekan

Enkode polyline adalah algoritme kompresi bersifat lossy yang mengizinkan Anda menyimpan serangkaian koordinat sebagai string tunggal. Koordinat titik dienkodekan menggunakan nilai yang ditandatangani. Jika Anda hanya memiliki sedikit titik statis, sebaiknya gunakan juga utilitas enkode polyline interaktif.

Proses enkode mengonversi nilai biner menjadi serangkaian kode karakter untuk karakter ASCII menggunakan skema enkode base64 yang sudah dikenal: untuk memastikan karakter ini ditampilkan dengan benar, nilai yang dienkodekan dijumlahkan dengan 63 (karakter ASCII '?') sebelum mengonversinya ke dalam ASCII. Algoritme juga harus memeriksa kode karakter tambahan untuk titik yang diberikan dengan memeriksa LSB (least significant bit) dalam setiap grup byte; jika bit ini disetel ke 1, titik belum terbentuk sepenuhnya dan data tambahan harus mengikuti.

Selain itu, untuk menghemat ruang, titik hanya menyertakan offset dari titik sebelumnya (tentu saja kecuali untuk titik pertama). Semua titik dienkodekan dalam Base64 sebagai integer yang ditandatangani, karena garis lintang dan garis bujur merupakan nilai yang ditandatangani. Format enkode di dalam polyline harus mewakili dua koordinat yang merepresentasikan garis lintang dan bujur hingga presisi yang wajar. Misalkan baris bujur +/- 180 derajat yang memiliki presisi 5 angka desimal (180.00000 hingga -180.00000), hasilnya adalah memerlukan nilai integer biner 32 bit yang ditandatangani.

Perhatikan bahwa garis miring terbalik diinterpretasikan sebagai karakter escape dalam literal string. Keluaran apa pun dari utilitas ini harus mengonversi karakter garis miring terbalik menjadi garis miring terbalik ganda di dalam literal string.

Langkah-langkah untuk mengenkode nilai yang ditandatangani tersebut dijelaskan di bawah ini.

  1. Ambil nilai awal yang ditandatangani:
    -179.9832104
  2. Ambil nilai desimal dan kalikan dengan 1e5 dan bulatkan hasilnya:
    -17998321
  3. Konversikan nilai desimal menjadi biner. Perhatikan bahwa nilai negatif harus dihitung menggunakan pelengkap keduanya dengan membalik nilai biner dan menambahkan satu ke hasilnya:
    00000001 00010010 10100001 11110001
    11111110 11101101 01011110 00001110
    11111110 11101101 01011110 00001111
  4. Geser nilai biner ke kiri sebanyak satu bit:
    11111101 11011010 10111100 00011110
  5. Jika nilai desimal aslinya negatif, balik enkode berikut:
    00000010 00100101 01000011 11100001
  6. Pisahkan nilai biner menjadi potongan 5-bit (mulai dari sisi sebelah kanan):
    00001 00010 01010 10000 11111 00001
  7. Tempatkan potongan 5-bit dalam urutan mundur:
    00001 11111 10000 01010 00010 00001
  8. ATAU setiap nilai dengan 0x20 jika potongan bit yang lain mengikutinya:
    100001 111111 110000 101010 100010 000001
  9. Konversikan setiap nilai ke desimal:
    33 63 48 42 34 1
  10. Tambahkan 63 ke setiap nilai:
    96 126 111 105 97 64
  11. Konversikan setiap nilai ke padanan ASCII-nya:
    `~oia@

Tabel berikut menampilkan beberapa contoh titik yang dienkodekan, yang menampilkan enkode sebagai serangkaian offset dari titik sebelumnya.

Contoh

Titik: (38.5, -120.2), (40.7, -120.95), (43.252, -126.453)



Garis Lintang Garis Bujur Garis Lintang dalam E5 Garis Bujur dalam E5 Perubahan dalam Garis Lintang Perubahan dalam Garis Bujur Garis Lintang yang Dienkodekan Garis Bujur yang Dienkodekan Titik yang Dienkodekan
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`@

Polyline yang dienkodekan: _p~iF~ps|U_ulLnnqC_mqNvxq`@

Kirim masukan tentang...

Google Maps API
Google Maps API