Используйте python для добавления слоев в оглавление

13

Я уже давно борюсь с добавлением слоев в оглавление. Мне удалось добавить отдельные слои, но мне нужно перебрать папку и добавить все слои. Шейп-файлы я не могу добавить вообще. Только файлы слоев. Ниже приведен код моего местонахождения:

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

Приведенный выше код добавит каждый слой в оглавление, а затем удалит его и добавит следующий. Когда весь сценарий заканчивается, в оглавлении ничего не остается. Я попытался добавить этот скрипт в модель и создать производный выходной параметр, который затем добавляется в качестве параметра модели с проверкой «добавить в отображение». Я также проверил параметры геообработки, чтобы убедиться, что флажок, который нужно добавить для отображения, установлен. Я использую 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]
geogeek
источник
2
Я искал замечания @ geogeek, но они, похоже, отсутствуют. В любом случае, как показывает его исправленный код, вам нужно создать объекты MapDocument и DataFrame вне цикла, который проходит через ваши слои. В противном случае вы начинаете с оригинальной карты каждый раз.
PolyGeo
1
Спасибо за разъяснения PolyGeo. Я реализовал изменения. Однако теперь только последний файл в списке остается в оглавлении. Все остальные появляются и исчезают. Смущенный. :)
Оливер Бурдекин
1
Работай! Все в абзаце верно? Названия слоев, которые выходят из игры, по-прежнему остаются минами, но это только эстетика. Большое спасибо за вашу помощь выглядывает!
Оливер Бурдекин
1
geogeek, как это сделать для нескольких MXD?
newGIS
1
я сделал ответ в моей правке
geogeek