Más

Actualizar una capa de grupo usando arcpy

Actualizar una capa de grupo usando arcpy


Trabajo con varios MXD'S e intento actualizar una capa de grupo llamada "allHa" que contiene varias capas con este código:

import arcpy, os, sys, string import arcpy.mapping de arcpy import env env.workspace = r "D:  PROJECTS  road_20  gis" sourceLayer = arcpy.mapping.Layer (r "D:  PROJECTS  road_20  gis  layer  16_12_15  allHa.lyr ") para mxdname en arcpy.ListFiles (" *. mxd "): print mxdname mxd = arcpy.mapping.MapDocument (r" D:  PROJECTS  road_20  gis  "+ mxdname) df = arcpy.mapping.ListDataFrames (mxd, "Capas") [0] updateLayer = arcpy.mapping.ListLayers (mxd, "allHa", df) [0] dfList = arcpy.mapping.ListDataFrames (mxd, "*") para df en dfList: para lyr en arcpy.mapping.ListLayers (mxd, "", df): if lyr.name == u "allHa": arcpy.mapping.UpdateLayer (df, lyr, sourceLayer, True) imprimir 'UpdateLayer' mxd.save () del mxd

pero me sale un error:

>>> antigüedades__55-30__403.mxd Traceback (última llamada más reciente): Archivo "C:  Archivos de programa  CCleaner  yaron  shonot  software  --- gis ---  tools  YARON_SCRIPTS  UpdateLayer 1 df.py" , línea 16, en  arcpy.mapping.UpdateLayer (df, updateLayer, sourceLayer, True) Archivo "C:  Archivos de programa (x86)  ArcGIS  Desktop10.3  ArcPy  arcpy  utils.py", línea 182, en fn_ return fn (* args , ** kw) Archivo "C:  Archivos de programa (x86)  ArcGIS  Desktop10.3  ArcPy  arcpy  mapping.py", línea 1897, en UpdateLayer tl._update (rl, symbology_only) ValueError: LayerObject: Error inesperado >>>

Obtendrá este error exacto si intenta ejecutar UpdateLayer con una capa de origen y actualizar la capa con diferentes tipos de geometría o si una de las capas es una capa de grupo sin ninguna simbología propia.

Lo que probablemente está sucediendo es que su archivo allHa.lyr en realidad contiene una capa de grupo con la capa desde la que desea actualizar como niño a esa capa.

ejecuta este código y dime lo que obtienes.

sourceLayer = arcpy.mapping.Layer (r "D:  PROJECTS  road_20  gis  layer  16_12_15  allHa.lyr") imprimir sourceLayer.isGroupLayer

si su capa de origen, capa de actualización o ambas son una capa de grupo, UpdateLayer generará un error.

EDITAR: evite y protéjase contra esto de esta manera:

# si nuestro archivo de capa contiene una capa de grupo como capa raíz, entonces tenemos que # encontrar una capa que no sea de grupo para usar como fuente. Este código asume que hay # cualquier nivel de anidación de capas de grupo y solo una capa con simbología. # se puede evitar si tiene control sobre el archivo .lyr y simplemente puede guardar el nodo hoja (nodo de capa que no es de grupo) como su propio archivo .lyr def findLeafLayer (groupLayer): if groupLayer.isGroupLayer: for layer in arcpy.mapping .ListLayers (groupLayer): si no es layer. df en dfList: lyr = findLeafLayer (arcpy.mapping.ListLayers (mxd, "allHa", df) [0]) arcpy.mapping.UpdateLayer (df, lyr, sourceLayer, True) print 'Updatedlayer'

Creo que Ryan tiene razón. No se puede actualizar una capa de grupo. En su lugar, actualice las capas del grupo. Entonces necesitas expandir tu bucle for-each.

if lyr.name == u "allHa": para <> en <>: <>'

Solo edita el<<… >>