Expliquer la différence entre les fichiers shx et shp du fichier de formes?

11

Je cherche une explication plus approfondie des différences dans les fichiers shp et shx en vain. Je veux dire au-delà du «shp contient la géométrie - shx contient un index de la géométrie».

La raison pour laquelle je pose la question est que, tout en travaillant récemment dans QGIS, j'ai fait deux observations qui m'ont amené à me poser des questions sur les différences exactes dans ces extensions de fichier:

  1. QGIS peut ouvrir et afficher à la fois shx et shp, et chaque fichier semble être plus ou moins identique dans leur sortie (affichage),
  2. mais pas exactement - j'ai remarqué que parfois les fichiers shx / shp correspondants s'affichent légèrement «décalés» les uns par rapport aux autres. Cela ne semble pas être un problème de projection, ils ne dessinent tout simplement pas exactement au même endroit.

Ces observations m'ont rendu curieux de savoir pourquoi ces différences d'affichage existent et pourquoi QGIS peut ouvrir et utiliser le shx de la même manière que le shp, alors qu'auparavant, je croyais que le shp est le fichier `` maître '' si vous voulez, mais nécessite .dbf et .shx pour fonctionner correctement comme une seule entité entière.

Maggie
la source

Réponses:

19

La référence définitive sur le format de fichier de formes est la description technique du fichier de formes ESRI .

Il est trompeur de décrire le shxcomme étant un "index". Il s'agit plutôt du fichier de décalage d'accès direct. Il n'y a pas de données dans le shx, seulement un clone des cent premiers octets et du numéro d'enregistrement et décalé vers l'octet de départ de cet enregistrement dans le shp. Le seul emplacement pour les attributs est le dbf(qui est autonome - malgré la «connaissance» contraire, le shxne lie pas le shpet dbf, seul le numéro d'enregistrement le fait).

Il est possible que les fichiers de formes contiennent des «lacunes» shpqui rendent l' shxindispensable, mais dans la pratique, les outils Esri réécrivent l'intégralité shpet de shxsorte que toute lacune créée par la modification des enregistrements soit supprimée. Dans la plupart des conditions, il est possible de récupérer le shxcontenu s'il disparaît; on ne peut pas en dire autant du shpou dbf.

La dénomination de shpet shxest un artefact du VFILEmodule d'accès direct à largeur variable du système d'exploitation PrImeOS, d'abord porté par Esri vers Unix, VAX / VMS, Data General et IBM, puis vers Microsoft Windows. La paire sbn/ sbxspatial index partage la même convention de dénomination (bien que celles-ci ne soient pas documentées dans la spécification du fichier de formes). Dans la VFILEbibliothèque FORTRAN d' origine , seul le fichier de base était nommé et le fichier de décalage avec un xcaractère terminal venait d'apparaître lors de la création du fichier.

Vince
la source
1
Et plus tard: The index file (.shx) contains a 100-byte header followed by 8-byte, fixed-length records. Figure 4 illustrates the index file organization.Logiquement, c'est analogue aux index de base de données a data structure that improves the speed of data retrieval operations.
user30184
2
Non, ce shxn'est absolument pas un indice spatial.
Vince
1
L' shxaccès série ralentit en fait (plus d'E / S), mais il rend possible l' accès direct , ce qui pourrait être considéré comme une amélioration.
Vince
1
"..., seulement un clone des cent premiers octets et du numéro d'enregistrement et ..." . "... le shx ne lie pas le shp et le dbf, seul le nombre record le fait" . D'abord, vous dites que le «numéro d'enregistrement» est dans .shx. Plus tard, vous dites que .shx ne lie pas .shp et .dbf, mais ce «numéro d'enregistrement» le fait. Si «numéro d'enregistrement» lie les deux formats cités et qu'il fait partie de .shx, alors pourquoi ne peut-il pas être dit .shx lie .shp et .dbf? Cela m'embrouille dans cette partie de votre réponse. Pouvez-vous clarifier? Tks.
Andre Silva
2
Le numéro d'enregistrement est présent dans les deux shpet shx. Il n'est pas présent dans le dbf, seul l'octet implicite décalé de la fin des enregistrements d'en-tête (40 octets pour la table, qui comprend un décompte de champs, et 40 octets supplémentaires pour chaque champ) fois la taille de l'enregistrement. J'ai écrit des lecteurs et des écrivains de fichiers de formes en 'C' et en Java, et c'est la variable de compteur de boucle du programme qui relie le shp/ shxau dbf. Le shxfournit une liaison du numéro d'enregistrement, par décalage avec une vérification d'intégrité Recno, au début de l' shpenregistrement, rien de plus.
Vince
12

Shx n'a certainement rien à afficher sur une carte seule, comme vous pouvez le lire dans la spécification https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf .

Vous avez en effet raison en ce qu'il est possible d'ouvrir le fichier de formes en sélectionnant la partie .shx avec QGIS 3.0.3 mais je ne vois aucune différence sur l'emplacement. Je crois que le fichier de formes est toujours ouvert par le même chemin et le résultat est le même. Si vous pouvez créer un scénario de test pour reproduire le problème de placement différent des géométries, veuillez créer un ticket QGIS sur le problème.

Si vous supprimez la partie .shp, vous verrez que QGIS n'ouvre pas seul .shx.

user30184
la source
Mon erreur, j'ai vérifié à nouveau les mêmes fichiers et c'était en effet une projection inadaptée. Lorsque je les ai réalignés, les versions shx et shp de la même couche s'alignaient et étaient identiques comme prévu. Fait intéressant, QGIS permet à la fois les fichiers .shx et .shp d'être téléchargés dans le même projet, et ils affichent leur propre chemin source respectif, mais comme souligné par d'autres, la sortie est exactement les mêmes géométries car ce sont en effet le même fichier.
Maggie
2

.shxest l'index d'un .shpfichier.

Vous avez besoin des deux pour pouvoir ouvrir le .shpfichier. Si vous ouvrez un .shxfichier dans QGIS, il ouvre le .shpfichier. S'ils sont éteints, il y a un problème de projection.

Un ShapeFile a besoin de trois composants:

  1. .shp - stocke la géométrie
  2. .shx - stocke l'index
  3. .dbf - stocke les attributs

Un .prjfichier est généralement recommandé, qui stocke les informations de projection. Il peut y avoir d'autres fichiers associés à un ShapeFile, mais ceux-ci ne sont pas absolument nécessaires.

HeikkiVesanto
la source