J'ai une poignée d'environ 1000 fichiers de formes corrompus (voir le message d'erreur ci-joint). Les fichiers de formes ont été générés à partir d'eCognition Developer 8. Il existe un outil de script qui semble réparer le fichier de formes une fois qu'il est identifié comme corrompu.
Éditer:
Je veux créer un script rapide pour parcourir tous mes fichiers de formes et vérifier si le nombre de formes correspond aux enregistrements de la table. Je peux compter les enregistrements de table en utilisant les éléments suivants:
# Name: fcCount.py
# Purpose: calculate the number of features in a featureclass
# Import system modules
import arcpy
from arcpy import env
env.workspace = "C:/data"
Sample = "MyShp.shp"
result_dbf = int(arcpy.GetCount_management(Sample).getOutput(0))
print result_dbf
Je voudrais finalement créer une sorte de vérification logique telle que:
if result_dbf = result_shp:
pass
else:
print "There is a problem with" + str(Sample)
Comment puis-je compter les formes directement sans accéder au fichier .dbf? Ou, en d'autres termes, quelle est la meilleure façon de vérifier par programme si le nombre de formes correspond au nombre d'enregistrements de table?
Réponses:
Qu'en est-il de l'utilisation de pyshp ? Je l'ai installé avec pip et ce que j'ai essayé ci-dessous est à peu près tout droit sorti du README :
Malheureusement (ou peut-être heureusement?) Je n'ai pas de fichiers de formes à tester pour voir si non. des formes peuvent! = non. des enregistrements.
Attendez une minute, j'ai maintenant un fichier de forme grimpé grâce à l'idée de Kirk dans les commentaires ci-dessous. J'ai sauvegardé le dbf, fait une copie de tout le fichier de formes, supprimé certaines fonctionnalités, puis renommé le dbf sauvegardé à l'original, et voilà, le nombre de formes <nombre d'enregistrements:
la source
D'après le son de votre question, il semble que tout ce que vous voulez vraiment faire est de déterminer si un fichier de formes a des problèmes (dans ce cas, des enregistrements incompatibles). Si vous avez juste besoin d'identifier ceux qui ont des problèmes, vous n'avez pas réellement besoin de compter les enregistrements dans le DBF et le Shapefile pour déterminer s'il s'agit d'une erreur. Voici pourquoi:
Si vous essayez d'exécuter la fonction GetCount sur un fichier de formes ayant différents nombres d'enregistrements, il échouera avec l'erreur:
Étant donné que la fonction GetCount échoue dans ce scénario et que tout ce que vous voulez faire est d'identifier les fichiers de formes par erreur, vous pouvez intercepter cela avec une clause try / except dans votre code, au lieu du if / else que vous tentiez précédemment d'utiliser.
J'ai pris la liberté d'ajouter le code et la boucle "List FeatureClasses" afin que vous puissiez tester tous les FC de votre espace de travail sans avoir à les tester manuellement chacun.
la source
Le format du fichier de formes est documenté. Je suppose que le nombre d'enregistrements dans le fichier shp ne correspond pas au nombre d'enregistrements dans le fichier dbf.
Le format de fichier shp est documenté ici . Vous pouvez donc écrire un programme pour compter le nombre de formes. Le format dbf est documenté à de nombreux endroits et vous devriez pouvoir trouver des exemples pour compter les lignes, par exemple ici .
la source
Le script attaché parcourt un répertoire et vérifie si le nombre de formes correspond au nombre d'enregistrements pour chaque fichier de formes.
la source
L'utilisation de la géométrie de vérification devrait vous permettre de franchir la première étape.
Onus
Repair Geometry vous permettra de sélectionner l'ordre et la priorité du problème que vous souhaitez réparer.
voici quelques autres liens de versions plus anciennes . Lorsque vous exécutez le vérificateur de fichiers de formes, vous terminez avec la reconstruction de dbf?
C'est l'étape qui crée les enregistrements à faire correspondre. Une des deux choses s'est produite pour provoquer l'erreur.
Plusieurs choses peuvent provoquer cela.
Le shx est en fait l'indice entre les deux.
Compter les formes sans compter les enregistrements dbf n'est que la moitié de la solution.
la source
En regardant l' article wikipedia sur les fichiers de formes , le fichier .shx doit contenir un index sur le fichier .shp, pas sur le fichier .dbf. Il pourrait donc être nécessaire de vérifier si .shx et .shp s'emboîtent.
Il est possible d'ouvrir un fichier de formes sans .dbf (ce qui signifie que vous n'avez pas de table attributaire), mais un index cassé générera un message d'erreur.
la source