Question

Si vous avez des données géographiques stockées dans des formes ESRI, vous avez au moins trois fichiers: un se terminant par .shp contenant les données vectorielles, un se terminant par .dbf contenant des attributs et un fichier se terminant par .shx contenant un index.

Je suis intéressé par le fichier shx. Comment ça marche? Contient-il une cartographie complète, telle que "première géométrie correspond à la troisième ligne du dbf et deuxième géométrie correspond à la première ligne" pour chaque géométrie? Ou cela fonctionne-t-il différemment?

Était-ce utile?

La solution

Selon les spécifications , le shx contient un en-tête de 100 octets suivi par une séquence de 8 octets. Chaque enregistrement stocke un décalage de 4 octets et une longueur de contenu de 4 octets pour un enregistrement dans le fichier de données .shp principal.

+-----------------------------------------------+
| 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) | 
+-----------------+------------------+
| ....                               | 
+-----------------+------------------+

Notez que le décalage est spécifié en mots de 16 bits. Le décalage pour le premier enregistrement est donc de 50 (l’en-tête .shp ayant une longueur de 100 octets ou 50 mots). La longueur du contenu est également spécifiée en mots de 16 bits.

Ainsi, vous pouvez déterminer le nombre d'enregistrements dans (index_file_length-100)/8 et utiliser l'index pour accéder à un enregistrement de forme particulier dans le fichier .shp au hasard ou en séquence.

Autres conseils

Réponse précise de Paul Dixon.

Bien que je me demandais ce que vous allez en faire! Si vous voulez écrire du code pour lire ou écrire des fichiers SHP, je vous suggère fortement d'utiliser une bibliothèque à la place - il existe quelques bons logiciels libres open source comme GDAL , également de bons produits commerciaux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top