Удалить слой из ArcMap, используя Python

9

Проблема:

  • Я пытаюсь перебрать все мои слои в поисках названного слоя "CADAnnotation".
  • Если слой существует, удалите его из mxd

Ноты:

  • Запуск из автономного скрипта (т.е. НЕ в Arcmap)
  • "CADAnnotation" Тип данных - это класс объектов аннотаций САПР
  • "CADAnnotation" НЕ находится в базе геоданных, он создан из AutoCAD .dwg
  • "CADAnnotation" находится внутри слоя группы с именем "ACAD"
  • Если групповой слой "ACAD"можно удалить, это также удаляет, "CADAnnotation"что было бы здорово.

Код до сих пор:

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

Примечания к коду:

  • Я не могу найти слой без проблем
  • строка arcpy.Delete_management("CADAnnotation")не работает выдает ошибку.

Вопрос:

  • Как мне удалить "CADAnnotation"и / или "ACAD"групповой слой?
Тристан Форвард
источник

Ответы:

17

Вы действительно хотите удалить слой из базы геоданных или удалить его из mxd?

Если вы просто хотите удалить слой из mxd, замените его arcpy.Delete_management("CADAnnotation")наarcpy.mapping.RemoveLayer(df, lyr)

Если вы хотите удалить источник данных, вы можете сделать это.

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
TurboGus
источник