À partir de python, comment puis-je créer une liste de toutes les classes d'entités dans une géodatabase fichier (* .gdb), y compris à l'intérieur des jeux de données d'entités? L' exemple standard répertorie uniquement les classes d'entités au niveau supérieur de la géodatabase:
import arcgisscripting, os
gp = arcgisscripting.create(9.3)
gp.workspace = 'd:\scratch.gdb'
fcs = gp.ListFeatureClasses()
for fc in fcs:
print fc
Veuillez indiquer à quelle version d'ArcGIS Desktop votre réponse s'applique (je recherche 9.3 mais nous pourrions aussi bien rassembler toutes les versions en un seul endroit).
arcpy
arcgis-9.3
Matt Wilkie
la source
la source
arcpy.da.Walk
) est Comment faire un inventaire SIG?Réponses:
Cette routine pour arcgis10 renvoie tous les fcs (OU autonomes dans un jeu de données d'entité) à l'intérieur d'une gdb. Définissez simplement votre arcpy.env.workspace puis faites une boucle for
la source
J'ai fini par utiliser la réponse de gotchula , mais sans rendement car
je réutilise généralement les poignées FC créées et les rendements sont utilisés une fois puis jetés,il est plus facile pour moi de lire et de comprendre ce quifcs.append()
se passe quefcs = yield(...)
.Résultats:
C'est maintenant dans un module que j'appelle arcplus *. Placez avec votre autre code ou PYTHONPATH puis:
Arcplus ajoute également un filtrage générique; pour traiter uniquement les classes d'entités commençant par "HD_" dans les jeux de données d'entité contenant "Hydro"
. * maintenant sur Github, mis à niveau pour 10.x. Pour arcgis 9.3, voir ici .
la source
yield
ici. D'une part, les «poignées» auxquelles vous faites référence ne sont pas du tout des poignées, ce ne sont que des chaînes. Et si votre intention est de conserver la liste des classes d'entités pour plusieurs itérations, vous pouvez toujours la conserver en tant que fonction de générateur et simplement la «lister»:my_list = list(generator_function(args))
cela évalue le générateur et stocke le résultat dans une variable de liste.fcs = fcs.append(...)
beaucoup plus rapidement quefcs = list(yield(...))
.Je me rends compte que cette question est étiquetée 9.3, mais quiconque cherche la même réponse à partir de 10.1 est préférable d'utiliser arcpy.da.Walk . Il est plus rapide et plus précis que ListDatasets / FeatureClasses / Rasters / etc.
La fonction de marche fonctionne de la même manière que la marche de python . Il parcourt les répertoires dans le chemin donné et à chaque itération, root représente le chemin complet du répertoire, et les répertoires et les jeux de données sont des listes des sous-répertoires et des fichiers qu'il contient.
Lorsque vous parcourez une géodatabase, les jeux de données d'entité sont traités de la même manière que les répertoires. Si vous souhaitez uniquement répertorier les jeux de données et les jeux de données d'entité dans le dossier racine et ne pas ouvrir les jeux de données d'entité pour voir le contenu, vous pouvez faire:
la source
La
ListDatasets
méthode est ce que je pense que vous recherchez. Ce FGDB contient un FD appelé "Wells" et il contient 3 FC. Pour 9.3.1:la source