Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

4 votos

Omisión de datos no espaciales en el bucle For

Estoy trabajando en ArcMap 10.3, y tengo un script que busca a través de toda la carpeta y los archivos en un directorio utilizando arcpy.da.Walk , coge cualquier archivo que contenga una palabra clave, y lo copia en un nuevo gdb basándose en si es un punto, una línea o un polígono.

En este caso, sólo estoy tomando archivos vectoriales, ya sea shapefiles o clases de características.

El problema es que se retrasa cuando encuentra archivos no espaciales, como un .jpg, porque estoy usando desc.shapeType en cada archivo. Lo que me gustaría saber es si hay alguna manera de determinar rápidamente si un archivo es espacial o no, además de añadir algunas declaraciones sobre su extensión (por ejemplo if fc.endswith(".jpg"): ?

6voto

Dan Puntos 99

Puedes usar el arcpy.ListFeatureClasses para lograr esto hay una opción de tipo. La documentación es la siguiente

http://resources.arcgis.com/en/help/main/10.1%20/index.html#//002z00000011000000

Supongo que tu pregunta es vaga por una razón y no está mal escrita. Va a tener que haber algunas suposiciones de mi parte y la respuesta sólo puede ser un código psuedo, porque usted no ha declarado lo que los tipos de archivo cumplen con sus criterios para la conversión, y si hay múltiples tipos de datos. Si los hay, tendrás que ampliar esta respuesta con if/else con el fin de realizar en última instancia Do something o proporcione su script en el OP. El da.walk es un híbrido de os.walk e incluye un tipo de datos.

Creo que esto puede ser un malentendido de lo que es un feature classes es. Se puede encontrar un debate más detallado sobre el tema aquí en otro hilo pero lo básico:

La definición de clase de rasgo es una "colección homogénea de rasgos comunes, cada uno de los cuales tiene la misma representación espacial, como puntos, líneas o polígonos, y un conjunto común de columnas de atributos, por ejemplo, una clase de rasgo de línea para representar las líneas centrales de las carreteras".

Las clases de características se almacenan en un contenedor, ya sea un shapefile, un DWG o una base de datos. Para un pensamiento de alto nivel, un shapefile puede ser considerado como una sola clase de característica, mientras que un gdb es muchas clases de características. Su script tendrá que dirigirse al contenedor que contiene el feature class (shapefile o algún otro contenedor, no importa) y realizar la acción sobre el contenido. Puede utilizar arcpy.da.Walk para dirigirse a los contenedores que cumplen un determinado datatype (siempre que sea un contenedor compatible con ESRI).

for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,
                                                  topdown=True,
                                                  datatype="featureclass"):
    for filename in filenames:
        arrcpy.whatever()

Otro ejemplo:

Según la Documentación de ESRI se puede consultar en base a dataypes y filetype

for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,
    datatype='FeatureClass', type=['Polygon', 'Polyline']):  

He aquí un ejemplo de usar da.walk en un árbol de datos

''' 
Created on Aug 25, 2014 
@author: PeterW 
'''  

# Import system modules  
import arcpy  
import os  

# Set current workspace  
workspace = r'E:\Projects\Projects14\H103342\test2.gdb'  
arcpy.env.workspace = workspace  

# Set environment settings  
arcpy.env.overwriteOutput = True  

# Create list of Feature Classes in each Feature Dataset  
fcs = []  

# Iterate through each Feature Dataset within the File Geodatabase  
for dirpath, dirnames, filenames in arcpy.da.Walk(workspace, datatype = "FeatureDataset"):  
    for filename in filenames:  
        print filename

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X