Використовуйте python для додавання шарів у TOC


13

Я вже давно боюсь із додаванням шарів до TOC. Мені вдалося додати окремі шари, але потрібно прокрутити папку та додати всі шари. Shapefiles я не можу взагалі додати. Лише файли шарів. Нижче наведено код, де я перебуваю:

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

Вищевказаний код додасть кожен шар до TOC, потім ненадійно видаляє його та додає наступний. Коли весь сценарій закінчується, у TOC нічого не залишається. Я спробував додати цей скрипт до моделі та створити похідний вихідний параметр, який потім додається як параметр моделі з позначкою "додати до відображення". Я також перевірив параметри геообробки, щоб переконатися, що встановлено прапорець, який потрібно додати до відображення. Я запускаю Arc 10 (відсутні сервісні пакети). Хтось може допомогти?

Відповіді:


11

Вам потрібно створити об’єкти MapDocument і DataFrame поза циклом, який проходить через ваші шари. Інакше ви починаєте з оригінальної карти кожен раз.

тому я виправлю в цьому коді:

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

Щоб зациклитися на списку файлів mxd у тій же папці сценарію, ви можете це зробити так:

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, але вони, мабуть, відсутні. У будь-якому випадку, як показує його виправлений код, вам потрібно створити об’єкти MapDocument і DataFrame поза циклом, який проходить через ваші шари. Інакше ви починаєте з оригінальної карти кожен раз.
PolyGeo

1
Дякуємо за уточнення PolyGeo. Я впровадив зміни. Однак зараз лише останній файл у списку залишається в TOC. Усі інші з'являються потім зникають. Флюмокс. :)
Олівер Бурдекін

1
Розібрався! Все в відступі правильно? Назви шарів, які виходять, - це все-таки суперечка, але це лише естетика. Велике спасибі за вашу допомогу визирає!
Олівер Бурдекін

1
geogeek, як це зробити для декількох mxd?
новийГІС

1
Я зробив відповідь у своїй
редакції
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.