Usa python para agregar capas a la tabla de contenido

13

He estado luchando con la adición de capas al TOC desde hace algún tiempo. Me las arreglé para agregar capas individuales pero necesito recorrer una carpeta y agregar todas las capas. Shapefiles que no puedo llegar a agregar en absoluto. Sólo archivos de capa. A continuación se muestra el código de donde estoy:

for layer in shp_List:
mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

outlayer = lyr
layerfile = os.path.join(base_Folder, lyr + ".lyr")

arcpy.MakeFeatureLayer_management(layer, outlayer)
arcpy.SaveToLayerFile_management(outlayer, layerfile, "ABSOLUTE")
addlayer = arcpy.mapping.Layer(layerfile)
arcpy.mapping.AddLayer(dataFrame, addlayer, "BOTTOM")



#addLayer = arcpy.mapping.Layer(layer)
#arcpy.mapping.AddLayer(dataFrame, addLayer, "BOTTOM")
#arcpy.RefreshTOC()
#arcpy.RefreshActiveView()
del addlayer, mxd

El código anterior agregará cada capa a la tabla de contenido, luego la eliminará de manera exasperante y agregará la siguiente. Cuando todo el script termina, no queda nada en la tabla de contenido. He intentado agregar este script a un modelo y crear un parámetro de salida derivado que luego se agrega como un parámetro de modelo con "agregar a la pantalla" marcado. También he comprobado las opciones de geoprocesamiento para asegurarme de que la casilla para agregar a mostrar esté marcada. Estoy ejecutando Arc 10 (sin paquetes de servicio). ¿Alguien puede ayudar?

    
pregunta Oliver Burdekin 13.10.2012 - 19:23

1 respuesta

11

Necesitas crear los objetos MapDocument y DataFrame fuera del bucle que corre a través de tus capas. De lo contrario, comenzarás con el mapa original cada vez.

por lo que corregiré en este código:

mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

for layer in shp_List:

    outlayer = layer + "_lyr" 
    layerfile = os.path.join(base_Folder, layer + ".lyr")

    arcpy.MakeFeatureLayer_management(layer, outlayer)
    arcpy.SaveToLayerFile_management(outlayer, layerfile, "ABSOLUTE")
    addlayer = arcpy.mapping.Layer(layerfile)
    arcpy.mapping.AddLayer(dataFrame, addlayer, "BOTTOM")



    #addLayer = arcpy.mapping.Layer(layer)
    #arcpy.mapping.AddLayer(dataFrame, addLayer, "BOTTOM")
arcpy.RefreshTOC()
arcpy.RefreshActiveView()
    #del addlayer, mxd

Para hacer un bucle en una lista de archivos mxd en la misma carpeta del script, puedes hacerlo de esta manera:

for mxd_name in mxd_names:
    mxd = arcpy.mapping.MapDocument(os.path.dirname(os.path.realpath(__file__))+"\"+mxd_name+".mxd")
   dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]
    
respondido por el geogeek 13.10.2012 - 22:07

Lea otras preguntas en las etiquetas