Xóa lớp khỏi ArcMap bằng Python


9

Vấn đề:

  • Tôi đang cố gắng lặp qua tất cả các lớp của tôi để tìm lớp có tên "CADAnnotation".
  • Nếu lớp tồn tại thì loại bỏ lớp khỏi mxd

Ghi chú:

  • Chạy từ tập lệnh Stand-Alone (nghĩa là KHÔNG trong Arcmap)
  • "CADAnnotation" Kiểu dữ liệu là lớp tính năng chú thích CAD
  • "CADAnnotation" KHÔNG có trong cơ sở dữ liệu địa lý, nó được tạo từ AutoCAD .dwg
  • "CADAnnotation" nằm trong Lớp nhóm có tên "ACAD"
  • Nếu lớp nhóm "ACAD"có thể bị xóa cũng sẽ loại bỏ "CADAnnotation"nó sẽ là tuyệt vời.

Mã cho đến nay:

for item in mxds:
    print (item)
    mxd = arcpy.mapping.MapDocument(item)
    df=arcpy.mapping.ListDataFrames(mxd,"Project Area")[0]
    for lyr in arcpy.mapping.ListLayers(mxd, "*",df):
        if lyr.name == "CADAnnotation":
            print(lyr.dataSource)
            arcpy.Delete_management("CADAnnotation")
            print("Layer Deleted")
        else:
            pass

Ghi chú về Mã:

  • Tôi có thể tìm thấy lớp không có vấn đề
  • dòng arcpy.Delete_management("CADAnnotation")không hoạt động ném một lỗi.

Câu hỏi:

  • Làm cách nào để xóa "CADAnnotation"và / hoặc "ACAD"lớp nhóm?

Câu trả lời:


17

Bạn có muốn thực sự xóa lớp khỏi cơ sở dữ liệu địa lý hoặc xóa nó khỏi mxd không?

Nếu bạn chỉ muốn xóa lớp khỏi mxd của mình, hãy thay thế arcpy.Delete_management("CADAnnotation")bằngarcpy.mapping.RemoveLayer(df, lyr)

Nếu bạn muốn xóa nguồn dữ liệu, bạn có thể làm điều này.

for item in mxds:
   print (item)
   mxd = arcpy.mapping.MapDocument(item)
   df=arcpy.mapping.ListDataFrames(mxd,"Project Area")[0]
   for lyr in arcpy.mapping.ListLayers(mxd, "*",df):
      if lyr.name == "CADAnnotation":
         arcpy.mapping.RemoveLayer(df, lyr)
         print(lyr.dataSource)
         arcpy.Delete_management(lyr.dataSource)
         print("Layer Deleted")
      else:
         pass
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.