Spiegare la differenza tra i file shx e shp di shapefile?


11

Sto cercando una spiegazione più approfondita delle differenze nei file shp e shx con scarso successo. Intendo oltre "shp contiene la geometria - shx contiene un indice della geometria".

Il motivo per cui lo chiedo è perché, mentre recentemente lavoro in QGIS, ho formulato due osservazioni che mi hanno portato a porre domande sulle esatte differenze tra queste estensioni di file:

  1. QGIS può aprire e visualizzare sia shx che shp e ogni file sembra essere più o meno identico nel loro output (display),
  2. ma non esattamente - ho notato che a volte i file shx / shp corrispondenti vengono visualizzati leggermente "off-kilter" l'uno rispetto all'altro. Non sembra essere un problema di proiezione, semplicemente non disegnano nella stessa posizione l'uno dell'altro.

Queste osservazioni mi hanno incuriosito sul motivo per cui esistono queste differenze di visualizzazione e perché QGIS può aprire e far funzionare shx allo stesso modo di shp, quando in precedenza la mia comprensione era che shp è il file "master" se vuoi, ma richiede .dbf e .shx per funzionare correttamente come un'unica entità intera.



Risposte:


19

Il riferimento definitivo sul formato del file di forma è la descrizione tecnica del file di forma ESRI .

È fuorviante descriverlo shxcome un "indice". Invece, è il file offset di accesso diretto. Non ci sono dati in shx, solo un clone dei primi cento byte e numero di record e offset al byte iniziale di quel record in shp. L'unica posizione per gli attributi è il dbf(che è autonomo - nonostante la "conoscenza" al contrario, il shxnon lega il shpe dbf, solo il numero record lo fa).

È possibile che gli shapefile abbiano "spazi" nei shpquali rendere shxindispensabile, ma in pratica gli strumenti Esri riscriveranno l'intero shpe in shxmodo da eliminare qualsiasi gap creato dalla modifica dei record. Nella maggior parte delle condizioni, è possibile recuperare i shxcontenuti se scompaiono; lo stesso non si può dire per shpo dbf.

La denominazione di shpe shxè un artefatto del VFILEmodulo di accesso diretto a larghezza variabile del sistema operativo PrImeOS, prima portato da Esri su Unix, VAX / VMS, Data General e IBM, quindi su Microsoft Windows. La coppia di indici sbn/ sbxspaziali condivide la stessa convenzione di denominazione (sebbene questi non siano documentati nelle specifiche dello shapefile). All'interno della VFILElibreria FORTRAN originale , è stato nominato solo il file di base e il file offset con un xcarattere terminale è appena apparso alla creazione del file.


1
E più tardi: The index file (.shx) contains a 100-byte header followed by 8-byte, fixed-length records. Figure 4 illustrates the index file organization.logicamente è analogo agli indici del database a data structure that improves the speed of data retrieval operations.
user30184

2
No, nonshx è assolutamente un indice spaziale.
Vince,

1
In shxrealtà rallenta l'accesso seriale (più I / O), ma rende possibile l' accesso diretto , che potrebbe essere considerato un miglioramento.
Vince,

1
"..., solo un clone dei primi cento byte e numero record e ..." . "... shx non lega shp e dbf, solo il numero record lo fa" . Per prima cosa dici che "numero record" è all'interno di .shx. Più tardi dici che .shx non lega .shp e .dbf, ma quel 'numero record' lo fa. Se il 'numero record' lega i due formati citati ed è parte di .shx, allora perché non si può dire che .shx lega .shp e .dbf? Mi confonde questa parte della tua risposta. Puoi chiarire? Tks.
Andre Silva,

2
Il numero di registrazione è presente in entrambi shpe shx. È non presente nel dbf, offset dalla fine dei record di intestazione (40 byte per tavolo, che include un conteggio campo, e 40 byte aggiuntivi per ogni campo) volte la dimensione di record soltanto il byte implicita. Ho scritto lettori e scrittori di file di forma sia in 'C' che in Java, ed è la variabile contatore loop del programma che collega il shp/ shxal dbf. Il shxfornisce linkage del numero di registrazione, da compensare con un controllo di integrità recno, all'inizio del shpdisco, niente di più.
Vince,

12

Shx non ha certamente nulla da mostrare su una mappa da solo, come puoi leggere dalle specifiche https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf .

Hai davvero ragione nel dire che è possibile aprire shapefile selezionando la parte .shx con QGIS 3.0.3 ma non riesco a vedere alcuna differenza sulla posizione. Credo che lo shapefile sia ancora aperto attraverso lo stesso percorso e il risultato sia lo stesso. Se è possibile creare un caso di prova per riprodurre il problema relativo al diverso posizionamento delle geometrie, creare un ticket QGIS sul problema.

Se elimini la parte .shp vedrai che QGIS non apre da solo .shx.


Errore mio, ho ricontrollato gli stessi file ed è stata davvero una proiezione non corrispondente. Quando li ho riallineati, le versioni shx e shp dello stesso livello si sono allineate ed erano identiche alle aspettative. È interessante notare che QGIS consente a entrambi .shx e .shp di essere caricati nello stesso progetto e mostrano il loro rispettivo percorso sorgente, ma come sottolineato da altri, l'output ha le stesse geometrie esatte in quanto sono effettivamente lo stesso file.
Maggie,

2

.shxè l'indice per un .shpfile.

È necessario entrambi per poter aprire il .shpfile. Se si apre un .shxfile in QGIS, si apre il .shpfile. Se sono spenti, c'è un problema di proiezione.

Uno ShapeFile necessita di tre componenti:

  1. .shp - memorizza la geometria
  2. .shx - memorizza l'indice
  3. .dbf - memorizza gli attributi

Si .prjconsiglia di solito un file che memorizza le informazioni di proiezione. Possono esserci altri file associati a ShapeFile, ma questi non sono assolutamente necessari.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.