Domanda

Se si hanno dati geografici memorizzati in forme ESRI, si hanno almeno tre file: uno che termina con .shp contenente i dati vettoriali, uno che termina con .dbf contenente gli attributi e un file che termina con .shx contenente un indice.

Sono interessato al file shx. Come funziona? Contiene una mappatura completa, come "mappe della prima geometria sulla terza riga nel dbf e mappe della seconda geometria sulla prima riga" per ogni geometria? O funziona diversamente?

È stato utile?

Soluzione

Secondo le spec lo shx contiene un'intestazione di 100 byte seguita da una sequenza di record a 8 byte. Ogni record memorizza un offset di 4 byte e una lunghezza del contenuto di 4 byte per un record nel file di dati .shp principale.

+-----------------------------------------------+
| header (100 bytes)                            |
+-----------------+------------------+----------+
| offset(4 bytes) | length (4 bytes) | 
+-----------------+------------------+
| offset(4 bytes) | length (4 bytes) | 
+-----------------+------------------+
| offset(4 bytes) | length (4 bytes) | 
+-----------------+------------------+
| offset(4 bytes) | length (4 bytes) | 
+-----------------+------------------+
| ....                               | 
+-----------------+------------------+

Si noti che l'offset è specificato in parole a 16 bit, quindi l'offset per il primo record è 50 (poiché l'intestazione .shp è di 100 byte, o 50 parole, lunga). La lunghezza del contenuto è anche specificata in parole a 16 bit.

Quindi, puoi capire il numero di record da (index_file_length-100)/8 e usare l'indice per accedere a un particolare record di forma nel file .shp in modo casuale o in sequenza.

Altri suggerimenti

Ottima risposta di Paul Dixon.

Anche se mi chiedevo cosa ne farai! Se hai intenzione di scrivere codice per leggere o scrivere file SHP, ti consiglio vivamente di usare una libreria - ce ne sono alcuni buoni open source gratuiti come GDAL , anche alcuni buoni commerciali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top