9 votos

Arcpy ' s replaceDataSource Error

He comprobado las otras respuestas aquí y ninguna de las respuestas trabajó para mí...

Se trata de un "simple" cuestión de encontrar una capa por su nombre en un mapa y cambiar el origen de datos.

Aquí está mi script:

    #-- New Source
    newSource = os.path.join(currDir, lyrZones + "_Dep" + dirNum + ".shp")

    #-- Validation
    if arcpy.Exists(newSource):
        print "The new source exists!"
    else:
        print "Not found!"

    #-- Find the layer and change its source            
    for lyr in arcpy.mapping.ListLayers(mxd):
        if lyr.name == lyrZones:
            print "Layer found!"
            print layers.dataSource
            print "  Replacing source..."
            lyr.replaceDataSource(currDir, "SHAPEFILE_WORKSPACE", newSource)
            print lyr.dataSource

Puedo ejecutar desde una secuencia de comandos de python fuera de ArcGIS.

enter image description here

Se puede ver que el origen existe, la capa que se encuentra, puedo acceder es origen de datos mediante su impresión, pero el lyr.replaceDataSource provoca un error (error Inesperado... no ayuda mucho...)

He estado trabajando en ello durante 4-5 horas y ahora estoy corto de las soluciones. Alguna idea de lo que puede causar la caída?

Gracias!!

4voto

Oddthinking Puntos 233

Sé que esto es bastante viejo, pero acabo de encontrar este mismo tema y fue sorprendido por la falta de soluciones por ahí. La solución es tan simple, pero tienes ninguna manera de saber basado en la ayuda de prácticamente inexistente de ESRI:

No incluye la extensión de shapefile. ... Eso es todo.

newSource = os.path.join(currDir, lyrZones + "_Dep" + dirNum + ".shp")

Debe leer:

newSource = os.path.join(currDir, lyrZones + "_Dep" + dirNum)

2voto

mcherm Puntos 117

No sé si esto le ayuda o no pero me he encontrado este error tratando de cambiar a fuentes de datos SDE para una capa. Lo que encontré es que cuando ejecuto desde PyScripter, se bobina un proceso de 64 bits python.exe. Me gustaría conseguir el ValueError. Si obliga el script a ejecutar usando el python.exe 32 bits por símbolo, no sale el error. No sé si eso ayudaría a su problema o no pero vale la pena un tiro!

2voto

Neo Puntos 419

Más info sobre esto aquí. Pero para solucionar esto me fui a la ventana de python dentro de ArcCatalog para comprobar el ESRI definiciones de cada parámetro en el .replaceDataSource función.

.replaceDataSource(espacio de trabajo, workspace_type, dataset_name)

área = área de trabajo de nuevo origen de datos

workspace_type = el área de trabajo real tipo que aparece en la reemplace el origen de datos de la sección de la ayuda.

dataset_name = nombre del archivo sin el tipo de archivo (es decir: .shp), no el nombre de conjunto de datos en la tabla de contenido. No hay necesidad de que el directorio en frente de ella.

1voto

Mintx Puntos 2627

¡Diversión con depuración! Prueba esto:

for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.name == lyrZones:
        if lyr.supports("DATASOURCE"):
            print lyr.dataSource
            print currDir
            print newSource
            lyr.replaceDataSource(currDir, "SHAPEFILE_WORKSPACE", newSource, TRUE)
            print "Did we crash yet?"
            print lyr.dataSource
        else:
            print "Layer isn't supported!"

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