Menjelaskan perbedaan antara file shx dan shp dari shapefile?

11

Saya mencari penjelasan yang lebih mendalam tentang perbedaan file shp dan shx tetapi tidak berhasil. Maksud saya di luar 'shp berisi geometri - shx berisi indeks geometri'.

Alasan saya bertanya, adalah karena saat bekerja di QGIS baru-baru ini, saya telah membuat dua pengamatan yang mengarah pada pertanyaan-pertanyaan di benak saya seputar perbedaan yang pasti dalam perluasan file ini:

  1. QGIS dapat membuka dan menampilkan shx dan shp, dan setiap file tampaknya kurang lebih identik dalam outputnya (tampilan),
  2. tapi tidak persis begitu - saya perhatikan bahwa kadang-kadang file shx / shp yang cocok menampilkan sedikit 'off-kilter' satu sama lain. Tampaknya bukan masalah proyeksi, mereka tidak menggambar di lokasi yang sama persis satu sama lain.

Pengamatan ini membuat saya penasaran mengapa perbedaan tampilan ini ada, dan mengapa QGIS dapat membuka dan mengoperasikan shx dengan cara yang sama dengan shp, ketika sebelumnya pemahaman saya adalah bahwa shp adalah file 'master' jika Anda mau, tetapi membutuhkan .dbf dan .shx berfungsi dengan benar sebagai satu kesatuan, seluruh entitas.

Maggie
sumber

Jawaban:

19

Referensi definitif pada format shapefile adalah Deskripsi Teknis ESRI Shapefile .

Adalah menyesatkan untuk menggambarkan shxsebagai "indeks". Sebaliknya, itu adalah file offset akses langsung. Tidak ada data dalam shx, hanya klon dari seratus byte pertama dan nomor catatan dan diimbangi dengan byte awal dari catatan itu di shp. Satu-satunya lokasi untuk atribut adalah dbf(yang berdiri sendiri - meskipun "pengetahuan" sebaliknya, shxtidak mengikat shpdan dbf, hanya nomor catatan yang melakukannya).

Dimungkinkan untuk shapefile memiliki "celah" di shpmana membuat shxsangat diperlukan, tetapi dalam praktiknya alat Esri akan menulis ulang keseluruhan shpdan shxsehingga setiap celah yang dibuat oleh mengedit catatan dihapus. Dalam sebagian besar kondisi, dimungkinkan untuk memulihkan shxkonten jika hilang; hal yang sama tidak dapat dikatakan untuk shpatau dbf.

Penamaan shpdan shxmerupakan artefak dari VFILEmodul akses langsung lebar variabel dari sistem operasi PrImeOS, pertama porting oleh Esri ke Unix, VAX / VMS, Data General, dan IBM, kemudian ke Microsoft Windows. The sbn/ sbxspasial pasangan indeks saham konvensi yang sama penamaan (meskipun ini tidak didokumentasikan dalam spesifikasi shapefile). Di dalam VFILEpustaka FORTRAN asli , hanya file dasar yang dinamai, dan file offset dengan xkarakter terminal baru saja muncul pada pembuatan file.

Vince
sumber
1
Dan kemudian: The index file (.shx) contains a 100-byte header followed by 8-byte, fixed-length records. Figure 4 illustrates the index file organization.Logikanya analog dengan indeks basis data a data structure that improves the speed of data retrieval operations.
user30184
2
Tidak, shxini sama sekali bukan indeks spasial.
Vince
1
The shxbenar-benar memperlambat akses serial (lebih I / O), tapi itu tidak membuat akses langsung mungkin , yang dapat dianggap perbaikan.
Vince
1
"..., hanya tiruan dari seratus byte pertama dan catat nomor dan ..." . "... shx tidak mengikat shp dan dbf, hanya nomor record yang melakukannya" . Pertama, Anda mengatakan 'nomor catatan' ada di .shx. Kemudian Anda mengatakan .shx tidak mengikat .shp dan .dbf, tetapi 'catatan nomor' itu tidak. Jika 'record number' mengikat kedua format yang dikutip dan itu adalah bagian dari .shx, lalu mengapa tidak bisa dikatakan .shx mengikat .shp dan .dbf? Bagi saya ini membingungkan bagian dari jawaban Anda. Bisakah Anda mengklarifikasi? Tks.
Andre Silva
2
Nomor catatan hadir di keduanya shpdan shx. Ini tidak ada dalam dbf, hanya offset byte implisit dari akhir catatan header (40 byte untuk tabel, yang mencakup jumlah bidang, dan 40 byte tambahan untuk setiap bidang) dikalikan ukuran catatan. Saya telah menulis pembaca dan penulis shapefile di kedua 'C' dan Java, dan itu adalah variabel counter loop dari program yang menghubungkan shp/ shxke dbf. The shxmenyediakan linkage dari catatan jumlah, dengan diimbangi dengan cek integritas recno, untuk awal shprekaman, tidak lebih.
Vince
12

Shx tentu tidak memiliki apa pun untuk ditampilkan di peta sendiri karena Anda dapat membaca dari spesifikasi https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf .

Anda memang benar dalam hal ini dimungkinkan untuk membuka shapefile dengan memilih bagian .shx dengan QGIS 3.0.3 tetapi saya tidak dapat melihat perbedaan pada lokasi. Saya percaya bahwa shapefile masih dibuka melalui jalur yang sama dan hasilnya sama. Jika Anda dapat membuat test case untuk mereproduksi masalah penempatan geometri yang berbeda, harap buat tiket QGIS tentang masalah tersebut.

Jika Anda menghapus .shp bagian Anda akan melihat bahwa QGIS tidak membuka .shx saja.

pengguna30184
sumber
Kesalahan saya, saya memeriksa file yang sama lagi dan itu memang proyeksi yang tidak cocok. Ketika saya menyelaraskan ini, versi shx dan shp dari lapisan yang sama berbaris dan identik seperti yang diharapkan. Menariknya, QGIS memungkinkan baik .shx dan .shp untuk diunggah ke proyek yang sama, dan mereka menampilkan jalur sumber masing-masing, tetapi seperti yang ditunjukkan oleh yang lain, hasilnya adalah geometri yang sama persis karena ini memang file yang sama.
Maggie
2

.shxadalah indeks untuk suatu .shpfile.

Anda perlu keduanya untuk dapat membuka .shpfile. Jika Anda membuka .shxfile di QGIS, itu membuka .shpfile. Jika tidak aktif, ada masalah proyeksi.

ShapeFile membutuhkan tiga komponen:

  1. .shp - menyimpan geometri
  2. .shx - menyimpan indeks
  3. .dbf - menyimpan atribut

Sebuah .prjfile yang biasanya dianjurkan, yang menyimpan informasi proyeksi. Mungkin ada file lain yang terkait dengan ShapeFile, tetapi ini tidak mutlak diperlukan.

HeikkiVesanto
sumber