Sử dụng python để thêm các lớp vào TOC


13

Tôi đã chiến đấu với việc thêm các lớp vào TOC một thời gian rồi. Tôi đã quản lý để thêm các lớp duy nhất nhưng cần phải lặp qua một thư mục và thêm tất cả các lớp. Shapefiles Tôi không thể thêm vào. Chỉ tập tin lớp. Dưới đây là mã nơi tôi đang ở:

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

Đoạn mã trên sẽ thêm từng lớp vào TOC, sau đó loại bỏ nó một cách tức giận và thêm lớp tiếp theo. Khi toàn bộ kịch bản kết thúc, không còn gì trong TOC. Tôi đã thử thêm tập lệnh này vào một mô hình và tạo một tham số đầu ra dẫn xuất, sau đó được thêm dưới dạng tham số mô hình với "thêm vào hiển thị" được chọn. Tôi cũng đã kiểm tra các tùy chọn xử lý địa lý để đảm bảo hộp cần thêm vào hiển thị được chọn. Tôi đang chạy Arc 10 (không có gói dịch vụ). Có ai giúp được không?

Câu trả lời:


11

Bạn cần tạo các đối tượng MapDocument và DataFrame bên ngoài vòng lặp chạy qua các lớp của bạn. Nếu không, bạn đang bắt đầu với bản đồ gốc mỗi lần.

Vì vậy, tôi sẽ sửa trong mã này:

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

Để lặp trong danh sách các tệp mxd trong cùng một thư mục của tập lệnh, bạn có thể làm như thế này:

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
Tôi đang tìm kiếm nhận xét của @ geogeek nhưng chúng dường như vắng mặt. Trong mọi trường hợp, như mã được sửa của anh ấy hiển thị, bạn cần tạo các đối tượng MapDocument và DataFrame bên ngoài vòng lặp chạy qua các lớp của bạn. Nếu không, bạn đang bắt đầu với bản đồ gốc mỗi lần.
PolyGeo

1
Cảm ơn đã làm rõ PolyGeo. Tôi đã thực hiện các thay đổi. Tuy nhiên, bây giờ chỉ là tệp cuối cùng trong danh sách vẫn nằm trong TOC. Tất cả những người khác xuất hiện sau đó biến mất. Lúng túng. :)
Oliver Burdekin

1
Nó đã hoạt động! Tất cả trong vết lõm phải không? Các tên lớp xuất hiện vẫn là một mees nhưng đó chỉ là tính thẩm mỹ. Cảm ơn rất nhiều vì sự giúp đỡ của bạn!
Oliver Burdekin

1
geogeek, làm thế nào cho một số mxd?
newGIS

1
Tôi đã có câu trả lời trong bản chỉnh sửa của mình
geogeek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.