Saya telah menulis perpustakaan parsing shapefile, dan telah menemui beberapa keputusan desain dalam spesifikasi yang saya tidak segera mengerti. Saya berharap ada pengembang ESRI tua yang keriput di sini yang dapat memberi tahu saya mengapa hal-hal ini terjadi.
File rekaman utama (.shp) adalah campuran endianness . Secara khusus, bagian-bagian dari header fitur pemesanan big endian byte, tetapi catatan semua sedikit endian. Saya biasanya bekerja pada level yang lebih tinggi daripada byte dan bit, tetapi semua yang saya baca sejauh ini tentang endianness menandai ini sebagai tidak biasa. Mengapa file yang ditentukan tidak endianness seragam?
Bidang "Panjang File", serta bidang panjang dan posisi lainnya, direkam dalam kata-kata 16-bit, alih-alih lebih standar (dari perspektif terbatas saya) pemosisian 8 bit. Bagaimana keputusan ini dicapai?
Saya memposting pertanyaan serupa di Stack Overflow, tetapi tidak mendapat tanggapan. Jika ini kelihatannya terlalu asing bagi orang lain, saya dapat mendukung untuk menutupnya.
Jawaban:
Pengembangan shapefile bersamaan dengan pengembangan ArcView, yang secara khusus dirancang untuk menjadi platform independen. (Bahkan, itu ternyata kejatuhannya: dengan mengandalkan antarmuka yang dikembangkan dalam platform independen GUI yang disebut "Neuron Data," itu tidak bisa mengambil keuntungan dari banyak kemampuan Windows. Itu akhirnya mencerminkan yang terburuk dari semua sistem itu telah dipasarkan untuk.) Meskipun spesifikasi shapefile aneh sejak awal, itu membuat semacam pengertian gila dalam kerangka desain ini: karena shapefile dimaksudkan untuk banyak platform, spesifikasi mereka tidak boleh berpihak pada salah satu dari mereka dan karenanya harus sama menjengkelkannya untuk programmer dari semua persuasi.
Pertanyaan kedua tampaknya didasarkan pada asumsi yang tidak benar. Misalnya, bidang "Panjang File" muncul pada byte offset 24 di header utama dan merupakan bilangan bulat (ditandatangani) empat-byte (32 bit), karena harus mewakili panjang hingga 2 ^ 31- 1. Itu didahului oleh "File Code" empat byte dan lima bidang empat byte lainnya yang dicadangkan untuk penggunaan di masa mendatang: ketika Anda memesan ruang seperti itu, tentu saja Anda ingin membuat bidang sebesar mungkin, yang pada saat itu adalah 32 bit, untuk mempertahankan fleksibilitas sebesar mungkin. Ini juga membantu untuk menyelaraskan bidang angka dalam file pada batas kata:
sumber
int
16-bit.Seseorang di luar sana tahu jawaban ini dan banyak lagi tetapi mereka tidak berbicara.
Tim saya telah bekerja dengan untuk memecahkan kode file sbn dan sbx tidak berdokumen telah menemukan lebih banyak keanehan yang sama-sama mirip namun bahkan lebih aneh pada saat yang sama.
Sebagian besar struktur shapefile logis dan sangat efisien yang menyarankan pengembang ESRI memikirkan semuanya. Sepertinya mereka memiliki banyak pengembang pintar dengan satu orang gila dilemparkan ke dalam.
Seperti yang disarankan oleh posting lain, keanehan mungkin hasil dari persyaratan mesin atau bahasa yang asing bagi kami sekarang.
Saya selalu menduga kata 16-bit adalah cara mudah untuk menghemat ruang. Anda akan menemukan bahwa Anda harus memegang nilai kata 16-bit dalam memori saat menangani file. Strategi penghitungan nilai untuk menghemat ruang sudah umum dalam format biner bahkan hingga hari ini. Tapi saran int asli Mike juga sama mungkin.
Membalikkan endian hanya aneh. Tidak ada yang punya jawaban bagus yang pernah saya lihat.
Format dbf dirobek dari format dbase III yang berasal dari tahun 1960-an. Ini telah banyak digunakan sejak dan dapat ditemukan dengan nama lain termasuk foxpro dan xbase.
Meskipun cacat format keanehan, keanehan, dan keterbatasan itu tetap ada di dalam dan di sekitar bidang GIS. Setiap upaya lain untuk menggantikannya terlalu membengkak untuk penyimpanan vektor sederhana atau terlalu eksklusif. Bahkan ESRI berpikir shapefile akan menjadi mainan yang akan menggerakkan pemula menuju ArcINFO, cakupan, dan geodatabase. Internet mungkin banyak hubungannya dengan format lepas landas.
Saya belajar banyak menulis pyshp. Menulis parser adalah cara yang fantastis untuk mempelajari format.
sumber
Ini adalah pendapat saya.
Format shapefile kemungkinan besar berevolusi dari ARC / INFO yang memiliki sejarah sejak dari asal FORTRAN / PR1ME. Semua format ARC / INFO memiliki tajuk 100 byte ini dan endianess Besar dari Kode File dan Panjang File (misalnya Cakupan, TIN).
Ketika Shapefile dibuat untuk ArcView 1, ESRI berfokus pada membobol pasar Microsoft Windows dan sisanya dari format Shapefile sangat terfokus untuk menjadi endian kecil PC.
Pergantian konstan antara endianess adalah, mungkin kebutuhan untuk mendukung asal-usul warisan sambil mengantisipasi manfaat dari menerobos ke dalam platform.
sumber
Saya selalu berasumsi bahwa perpecahan endian disebabkan oleh memiliki dua tim satu di Sun Workstations dan yang lainnya di PC dan mereka tidak bertemu sampai menjelang akhir proses pengembangan.
Saya ingin tahu apa yang sebenarnya terjadi.
sumber
Saya pikir di suatu tempat di belakang sana saya mendengar sesuatu tentang asal usul dbf / foxpro.
Itu bisa saja hanya mimpi aneh yang saya miliki.
sumber
Anda harus memahami shapefile diperkenalkan sekitar 20 tahun yang lalu, pada saat itu ada banyak sekali format file yang tidak konsisten dan dirancang dengan buruk, jadi tidak terkecuali shapefile. Saya telah menulis parser shapefile sendiri dan saya harus mengatakan saya memiliki lebih banyak masalah dengan parsing format DBF dibandingkan dengan shapefile (.SHP) sendiri.
sumber