Usa Python per aggiungere livelli al sommario


13

Sto combattendo con l'aggiunta di livelli al sommario da qualche tempo. Sono riuscito a aggiungere singoli livelli ma devo scorrere in una cartella e aggiungere tutti i livelli. Shapefile che non riesco ad aggiungere affatto. Solo file di livello. Di seguito è riportato il codice di dove mi trovo:

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

Il codice sopra aggiungerà ogni livello al sommario, quindi lo rimuoverà in modo esasperante e aggiungerà quello successivo. Al termine dell'intero script non è rimasto nulla nel sommario. Ho provato ad aggiungere questo script a un modello e creare un parametro di output derivato che viene quindi aggiunto come parametro del modello con "aggiungi al display" selezionato. Ho anche controllato le opzioni di geoprocessing per assicurarmi che la casella da aggiungere alla visualizzazione sia selezionata. Sto eseguendo Arc 10 (nessun service pack). Qualcuno può aiutare?

Risposte:


11

Devi creare gli oggetti MapDocument e DataFrame al di fuori del ciclo che attraversa i tuoi livelli. Altrimenti stai iniziando con la mappa originale ogni volta.

quindi correggerò in questo codice:

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

Per eseguire il loop di un elenco di file mxd nella stessa cartella dello script, è possibile farlo in questo modo:

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]

2
Stavo cercando le osservazioni di @ geogeek, ma sembrano assenti. In ogni caso, come mostra il suo codice corretto, è necessario creare gli oggetti MapDocument e DataFrame al di fuori del ciclo che attraversa i livelli. Altrimenti stai iniziando con la mappa originale ogni volta.
PolyGeo

1
Grazie per il chiarimento PolyGeo. Ho implementato le modifiche. Tuttavia, ora solo l'ultimo file nell'elenco rimane nel sommario. Tutti gli altri appaiono quindi scompaiono. Flummoxed. :)
Oliver Burdekin,

1
Ha funzionato! Tutto nel rientro giusto? I nomi dei layer che escono sono ancora mees ma questa è solo estetica. Grazie mille per il tuo aiuto fa capolino!
Oliver Burdekin,

1
geogeek, come si fa per diversi mxd?
GIS l'

1
ho dato una risposta nella mia modifica
geogeek,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.