Use python para agregar capas a TOC

13

He estado luchando con agregar capas a la tabla de contenido durante algún tiempo. He logrado agregar capas individuales, pero necesito recorrer una carpeta y agregar todas las capas. Shapefiles que no puedo agregar en absoluto. Solo 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 al TOC, luego la eliminará exasperantemente y agregará la siguiente. Cuando termina todo el script, no queda nada en la tabla de contenido. Intenté 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 para mostrar" marcado. También he verificado las opciones de geoprocesamiento para asegurarme de que la casilla para agregar a la pantalla esté marcada. Estoy ejecutando Arc 10 (sin paquetes de servicio). ¿Alguien puede ayudar?

Oliver Burdekin
fuente

Respuestas:

11

Debe crear los objetos MapDocument y DataFrame fuera del bucle que atraviesa sus capas. De lo contrario, comenzará con el mapa original cada vez.

entonces 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 recorrer una lista de archivos mxd en la misma carpeta de la secuencia de comandos, puede hacerlo así:

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]
geogeek
fuente
2
Estaba buscando los comentarios de @ geogeek pero parecen estar ausentes. En cualquier caso, como muestra su código corregido, debe crear los objetos MapDocument y DataFrame fuera del bucle que atraviesa sus capas. De lo contrario, comenzará con el mapa original cada vez.
PolyGeo
1
Gracias por la aclaración PolyGeo. He implementado los cambios. Sin embargo, ahora solo el último archivo de la lista permanece en la tabla de contenido. Todos los demás aparecen y luego desaparecen. Desconcertado. :)
Oliver Burdekin
1
Lo tengo funcionando! Todo en la sangría ¿verdad? Los nombres de las capas que salen todavía son un mees, pero eso es solo estética. Muchas gracias por su ayuda píos!
Oliver Burdekin
1
Geogeek, ¿cómo hacerlo por varios mxd's?
newGIS
1
He respondido en mi edición
geogeek