İçindekiler'e katman eklemek için python kullanma


13

Bir süredir TOC'ye katman ekleyerek mücadele ediyorum. Tek katmanlar ekledim ancak bir klasörde döngü yapmalı ve tüm katmanları eklemeliyim. Shapefiles hiç ekleyemiyorum. Yalnızca katman dosyaları. Aşağıda bulunduğum yerin kodu:

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

Yukarıdaki kod, her bir katmanı TOK'ya ekler, daha sonra çileden çıkarır ve bir sonrakini ekler. Komut dosyasının tamamı bittiğinde, İçindekiler bölümünde hiçbir şey kalmaz. Bir model için bu komut dosyası ekleme ve sonra "ekrana eklemek" işaretli bir model parametre olarak eklenen türetilmiş bir çıkış parametresi oluşturmayı denedim. Ayrıca, ekrana eklenecek kutunun işaretli olduğundan emin olmak için coğrafi işlem seçeneklerini de kontrol ettim. Arc 10 kullanıyorum (servis paketi yok). Biri yardım edebilir mi?

Yanıtlar:


11

MapDocument ve DataFrame nesnelerini katmanlarınızın içinden geçen döngü dışında oluşturmanız gerekir. Aksi takdirde her seferinde orijinal haritadan başlıyorsunuz.

bu yüzden bu kodda düzeltir:

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

Komut dosyasının aynı klasöründeki mxd dosyalarının bir listesini döngüye almak için bunu şu şekilde yapabilirsiniz:

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
@ Geogeek'in sözlerini arıyordum ama yok gibi görünüyorlar. Her halükarda, düzeltilmiş kodunun gösterdiği gibi, katmanlarınızın üzerinden geçen döngü dışında MapDocument ve DataFrame nesnelerini oluşturmanız gerekir. Aksi takdirde her seferinde orijinal haritadan başlıyorsunuz.
PolyGeo

1
Açıklama için teşekkürler PolyGeo. Değişiklikleri uyguladım. Ancak, şimdi listedeki son dosya TOC'de kalıyor. Diğerleri görünür ve sonra kaybolur. Afallamış. :)
Oliver Burdekin

1
Çalıştı! Hepsi girintide değil mi? Çıkan katman isimleri hala bir mees ama bu sadece estetik. Yardımlarınız için çok teşekkürler!
Oliver Burdekin

1
geogeek, birkaç mxd için nasıl?
newGIS

1
Düzenlememde bir cevap verdim
geogeek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.