使用python向TOC添加层


13

我一直在努力在TOC中添加图层。我设法添加了单层,但需要遍历文件夹并添加所有层。我根本无法添加Shapefile。仅图层文件。以下是我所在位置的代码:

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(无Service Pack)。有人可以帮忙吗?

Answers:


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的澄清。我已经实施了更改。但是,现在列表中的最后一个文件仍保留在目录中。所有其他出现然后消失。Flummoxed。:)
奥利弗·伯德金

1
得到它的工作!缩进全部正确吗?出现的层名称仍然是一个难题,但这仅仅是美学。非常感谢您的帮助!
奥利弗·伯德金

1
geogeek,如何处理几个mxd?
newGIS 2015年

1
我在编辑中已经给出了答案
geogeek 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.