No python, como posso criar uma lista de todas as classes de recursos em um geodatabase de arquivo (* .gdb), incluindo conjuntos de dados internos de recursos? O exemplo padrão lista apenas as classes de recursos no nível superior do geodatabase:
import arcgisscripting, os
gp = arcgisscripting.create(9.3)
gp.workspace = 'd:\scratch.gdb'
fcs = gp.ListFeatureClasses()
for fc in fcs:
print fc
Indique a qual versão do ArcGIS Desktop sua resposta se aplica (estou procurando a versão 9.3, mas podemos coletar todas as versões em um só lugar).
arcpy
arcgis-9.3
Matt Wilson
fonte
fonte
arcpy.da.Walk
) é Como fazer um inventário GIS?Respostas:
Essa rotina do arcgis10 retorna todos os fcs (OR autônomo dentro de um conjunto de dados de recursos) dentro de um gdb. Apenas configure seu arcpy.env.workspace e faça um loop for
fonte
Acabei usando a resposta de gotchula , mas sem rendimento, porque
geralmente reutilizo os manipuladores FC criados e os rendimentos são usados uma vez descartados.É mais fácil para mim ler e entender o quefcs.append()
está fazendo do quefcs = yield(...)
.Resultados:
Isso agora está em um módulo que chamo de arcplus *. Coloque com seu outro código ou PYTHONPATH e depois:
O Arcplus também adiciona filtragem de caracteres curinga; processar apenas classes de recursos que começam com "HD_" em conjuntos de dados de recursos que contêm "Hydro"
. * agora no Github, atualizado para 10.x. Para o arcgis 9.3, veja aqui .
fonte
yield
daqui. Por um lado, as "alças" às quais você se refere não são alças, são apenas strings. E se sua intenção é manter a lista de classes de recursos por várias iterações, você ainda pode mantê-la como uma função de gerador e apenas "listificá-la":my_list = list(generator_function(args))
isso avalia o gerador e armazena o resultado em uma variável de lista.fcs = fcs.append(...)
está fazendo muito mais rapidamente do quefcs = list(yield(...))
.Sei que esta pergunta está com a tag 9.3, mas quem procura a mesma resposta a partir da 10.1 é melhor usar o arcpy.da.Walk . É mais rápido e preciso que o ListDatasets / FeatureClasses / Rasters / etc.
A função walk funciona da mesma maneira que a função python. walk . Ele itera pelos diretórios no caminho especificado e, a cada iteração, root representa o caminho completo do diretório, e dirs e conjuntos de dados são listas dos subdiretórios e arquivos contidos nele.
Ao percorrer um geodatabase, os conjuntos de dados dos recursos são tratados da mesma maneira que os diretórios. Se você deseja listar apenas os conjuntos de dados e os conjuntos de dados do recurso na pasta raiz e não abrir os conjuntos de dados do recurso para ver o conteúdo, é possível:
fonte
O
ListDatasets
método é o que eu acho que você está procurando. Este FGDB possui um DF chamado "Wells" e possui 3 FCs. Para 9.3.1:fonte