Comment éviter de créer des Shapefiles corrompus lors de l'édition?

15

J'ai un de mes techniciens SIG qui numérise certaines lignes dans QGIS au format shapefile. Je ne sais pas comment il l'a fait (et lui non plus), mais le fichier de formes est devenu corrompu. Cela créait des lignes aléatoires ou certaines des lignes qu'il avait créées disparaîtraient simplement. Je suis entré dans ArcCatalogue pour voir à quoi cela ressemblait dans ArcGIS et voici ce que j'ai vu:

entrez la description de l'image ici

Remarquez l'icône de point d'interrogation où je devrais voir une icône de ligne de fichier de formes. Évidemment, ArcCatalogue ne peut pas lire ce fichier. En outre, un deuxième fichier dbf semblait avoir été créé avec le «_packed» attaché à la fin. Lorsque je regarde le fichier de formes à l'aide de l'explorateur Windows, je vois qu'il existe déjà un fichier .dbf pour le fichier de formes 'M3_PRE_SMU_lines_10Apr13_SMC.dbf', donc je ne sais pas d'où provient ce fichier de formes _packed et je n'arrive pas à trouver quoi que ce soit en ligne qui en parle.

J'ai essayé d'ajouter ce fichier dans ArcMap et j'ai reçu l'erreur suivante:

entrez la description de l'image ici

L'erreur est assez explicite ... le nombre de formes ne correspond pas au nombre d'enregistrements. Je ne sais tout simplement pas pourquoi cela se produit. Il ne semble pas y avoir quoi que ce soit en ligne qui explique comment cela se produit dans QGIS, mais je vois quelques outils de réparation. En fait, j'ai réparé cela moi-même en ouvrant simplement QGIS, en ajoutant la couche, puis en cliquant avec le bouton droit sur la couche et en 'enregistrant sous' un autre fichier de formes. J'ai donc trouvé un moyen de contourner le problème, mais j'espère trouver une solution qui empêchera cela de se produire en premier lieu. Merci, Mike

Mike
la source
1
J'utilise QGIS depuis des années et je n'ai jamais vu ce problème auparavant. L'apparence "magique" d'un autre .dbf suggère que le Shapefile a été falsifié en dehors de QGIS. Si vous pouvez reproduire le bogue uniquement à l'aide de QGIS, veuillez déposer un rapport de bogue. Ce serait très important!
underdark
J'ai essayé de reproduire le problème sans succès. Une chose que j'ai remarquée est que, contrairement à ArcGIS, je ne reçois pas de message de verrouillage de schéma lors de la modification dans QGIS (c'est-à-dire si quelqu'un a un verrouillage de schéma sur le fichier de formes et que vous commencez à le modifier, ArcGIS générera une erreur lors de l'enregistrement QGIS ne le fait pas) Je pense que cela sauve bizarre lorsque vous enregistrez un fichier de formes qui est verrouillé par le schéma. Je ne suis pas sûr à 100% que c'est la cause, mais quelque chose qui mérite d'être noté.
Mike
J'ai également rencontré cette erreur lors de la modification des fichiers de formes. Mon travail consistait simplement à faire mon édition dans ArcMap. Évidemment, ce n'est pas une vraie solution - mais - vous n'êtes pas seul à rencontrer ce genre d'erreur.
Kevin
Avez-vous essayé de renommer le fichier ..._ SMC.dbf en ..._ SMC.dbf.backup et le ..._ SMC_packed.dbf en ..._ SMC.dbf?
Matthias Kuhn
2
salut même problème avec Dufur. Fichiers créés dans l'environnement q gis uniquement. Cela se produit lorsque je modifie la forme et que je vais enfin enregistrer, puis arrêter de modifier, de sorte que les lignes disparaissent et que le tableau des attributs semble ne contenir aucune donnée. si vous essayez de charger à nouveau la forme sur le qgis, elle semble vide. Dans le dossier, le fichier es. mario.shx était devenu un mario_packed.shp. J'ai trouvé qu'en supprimant le mot emballé du nom (il est de retour mario.shx), la forme est maintenant chargée et semble fonctionner. Combien de temps? ne sais pas que je deviens fou avec ça
user27144

Réponses:

16

Explication

OGR (partie de GDAL) est la bibliothèque utilisée par QGIS pour accéder aux fichiers de formes. Lorsque OGR supprime des fonctionnalités, il ne les supprime pas immédiatement, mais marque simplement les fonctionnalités comme supprimées. De temps en temps, une commande appelée repack est exécutée, ce qui crée un nouveau fichier avec le suffixe _repack et copie toutes les fonctionnalités qui ne sont pas marquées comme supprimées dans ce nouveau fichier. Une fois terminé, le .dbf d'origine est remplacé par le _repack.dbf. Il fait ensuite la même chose pour le fichier de formes: en créer une nouvelle (_packed.shp), copier toutes les fonctionnalités non supprimées et éventuellement remplacer le .shp d'origine.

Il semble quelque part dans ce processus, quelque chose a échoué (peut-être un crash?).

Dans ce processus, les identifiants des fonctionnalités changent, donc je suppose que le shp (géométrie) que vous avez et le dbf (table d'attributs) utilisent des identifiants de fonctionnalités différents pour les mêmes fonctionnalités, ce qui conduit au comportement étrange que vous rencontrez. Il semble que l'un des deux fichiers contienne (une partie de) les fonctionnalités supprimées alors que l'autre n'en contient pas.

Comment y faire face

Mise à jour, novembre 2016: GDAL 2.2 est livré avec une fonctionnalité intégrée pour appeler automatiquement le reconditionnement chaque fois que le fichier est écrit sur le disque. Donc, avant de faire quoi que ce soit d'autre: vérifiez la version GDAL dans la boîte de dialogue QGIS à propos et mettez à jour votre version GDAL (souvent livrée avec QGIS) vers une version récente.

Il n'y a probablement pas grand-chose à faire à part faire des sauvegardes régulières afin de ne pas perdre plus de données que vous ne pouvez en gérer (vous le faites quand même, n'est-ce pas? Right). Et si vous trouvez un moyen de reproduire cela (mieux avec un exemple de jeu de données), créez un rapport de bogue .

Si vous rencontrez à nouveau ce problème, vous pouvez également essayer de créer un index spatial sur le fichier de formes. Dans ce processus, QGIS appellera à nouveau repack sur le fichier de formes et pourrait "réparer" le shp / dbf. Mais ce n'est qu'une supposition non vérifiée.

Comme mentionné par @rhm et dans les commentaires, il peut également être utile de renommer le fichier {xyz} _packed. {Ext} en {xyz}. {Ext} . Si le fichier compressé a déjà été complètement écrit et que ce n'est que le changement de nom qui a échoué, il est absolument valide de faire cette étape manuellement. Cependant, si le fichier _packed n'a pas été complètement écrit, il se peut que des informations manquent dans certaines parties de vos fonctionnalités. Donc, avant d'essayer, faites des copies de sauvegarde de tous les fichiers impliqués.

Informations générales sur l'appel du reconditionnement

Entre QGIS 2.0 et 2.8, le reconditionnement a été appelé chaque fois que la couche était déchargée (quitter QGIS, charger un projet différent ...). Si une entité a été supprimée ou une géométrie modifiée, des fichiers .shp et .dbf avec des enregistrements marqués comme supprimés étaient présents.

À partir de QGIS 2.10, le reconditionnement est appelé chaque fois que la couche est enregistrée après une opération qui a le potentiel d'ajouter l'indicateur supprimé aux enregistrements. Par conséquent, les fichiers doivent désormais toujours être dans un état sain pour être traités par d'autres applications.

Matthias Kuhn
la source
1

Cela m'est arrivé dans QGIS. J'ai réussi à résoudre le problème en supprimant simplement '_packed' du nom de fichier, comme quelqu'un l'a suggéré dans la section des commentaires ci-dessus.

rhm
la source
1

C'est peut-être un autre problème d'un fichier d'index .shx cassé. Le type de géométrie doit être stocké dans l'en-tête .shp et .shx. S'ils ne correspondent pas, le logiciel générera une erreur.

Il semble que QGIS ne soit pas très strict sur les fichiers d'index cassés, et peut le recréer avec Save As..., tandis qu'ARCGIS insiste sur un fichier d'index correct et crée un dbf (table d'attributs) compressé pour les fonctionnalités qui pourraient être trouvées via les parties correctes de la fichier d'index, ou peut-être sans utiliser l'index.

AndreJ
la source
1

La réapparition des entités supprimées et / ou le comportement étrange des fichiers de formes dont les entités ont été supprimées dans QGIS est un bogue connu, consultez ce rapport de bogue 11007 et cette question connexe - Les polygones supprimés semblent revenir aux anciennes versions . En plus d'ArcGIS rencontrant des problèmes avec de tels fichiers de formes, lorsqu'ils sont enregistrés dans QGIS en tant que fichiers MapInfo TAB, ils provoquent ensuite le blocage du plug-in MapInfo RouteFinder, sauf si les tables sont d'abord compressées dans MapInfo avant de charger RouteFinder. Échec de l'exécution de Universal Translator pour convertir ces fichiers de formes corrompus dans MapInfo.

Comme vous l'avez trouvé, le problème peut être résolu en effectuant une «sauvegarde sous» dans QGIS.

SpatialSuccess
la source