Wie kann ich mit Python eine Liste aller Feature-Classes in einer File-Geodatabase (* .gdb) erstellen, auch innerhalb von Feature-Datasets? Im Standardbeispiel werden nur Feature-Classes auf der obersten Ebene der Geodatabase aufgelistet:
import arcgisscripting, os
gp = arcgisscripting.create(9.3)
gp.workspace = 'd:\scratch.gdb'
fcs = gp.ListFeatureClasses()
for fc in fcs:
print fc
Bitte geben Sie an, auf welche ArcGIS Desktop-Version Ihre Antwort zutrifft (ich suche nach 9.3, wir können jedoch auch alle Versionen an einem Ort sammeln).
arcpy
arcgis-9.3
Matt Wilkie
quelle
quelle
arcpy.da.Walk
) lautet: Wie erstelle ich ein GIS-Inventar?Antworten:
Diese Routine für arcgis10 gibt alle fcs (Standalone-OR in einem Feature-Dataset) in einer GDB zurück. Legen Sie einfach Ihren arcpy.env.workspace fest und führen Sie dann eine for-Schleife aus
quelle
Am Ende habe ich die Antwort von gotchula verwendet , aber ohne Rendite, da
ich die erstellten FC-Handles im Allgemeinen wieder verwende und die Rendite-Handles einmal verwendet und dann verworfen habe.Es ist für mich einfacher zu lesen und zu verstehen, was getanfcs.append()
wird, alsfcs = yield(...)
.Ergebnisse:
Dies ist jetzt in einem Modul, das ich arcplus * nenne . Platzieren Sie mit Ihrem anderen Code oder PYTHONPATH und dann:
Arcplus fügt außerdem eine Platzhalterfilterung hinzu. nur Feature-Classes verarbeiten, die mit "HD_" beginnen, in Feature-Datasets, die "Hydro" enthalten
. * jetzt auf Github, aktualisiert auf 10.x. Arcgis 9.3 finden Sie hier .
quelle
yield
hier zu vermeiden . Zum einen sind die "Handles", auf die Sie sich beziehen, überhaupt keine Handles, sondern nur Zeichenfolgen. Wenn Sie die Liste der Feature-Classes für mehrere Iterationen beibehalten möchten, können Sie sie dennoch als Generatorfunktion beibehalten und nur "auflisten":my_list = list(generator_function(args))
Dadurch wird der Generator ausgewertet und das Ergebnis in einer Listenvariablen gespeichert .fcs = fcs.append(...)
viel schneller geht alsfcs = list(yield(...))
.Mir ist klar, dass diese Frage mit 9.3 markiert ist, aber wer ab 10.1 nach der gleichen Antwort sucht, ist mit arcpy.da.Walk besser aufgehoben . Es ist schneller und genauer als ListDatasets / FeatureClasses / Raster / etc.
Die Walk-Funktion funktioniert genauso wie der Python- Walk . Es durchläuft die Verzeichnisse im angegebenen Pfad und bei jeder Iteration stellt root den vollständigen Pfad des Verzeichnisses dar und Verzeichnisse und Datasets sind Listen der darin enthaltenen Unterverzeichnisse und Dateien.
Beim Durchlaufen einer Geodatabase werden Feature-Datasets wie Verzeichnisse behandelt. Wenn Sie nur die Datasets und Feature-Datasets im Stammordner auflisten und die Feature-Datasets nicht öffnen möchten, um den Inhalt anzuzeigen, haben Sie folgende Möglichkeiten:
quelle
Die
ListDatasets
Methode ist genau das, wonach Sie suchen. Diese FGDB enthält eine FD namens "Wells" und 3 FCs. Für 9.3.1:quelle