Excluir camada do ArcMap usando Python

9

Problema:

  • Estou tentando percorrer todas as minhas camadas procurando uma camada com o nome "CADAnnotation".
  • Se a camada existir, remova-a do mxd

Notas:

  • Executando a partir do script independente (ou seja, NÃO no Arcmap)
  • "CADAnnotation" Tipo de dados é uma classe de recurso de anotação CAD
  • "CADAnnotation" NÃO está em um geodatabase, é criado a partir de um AutoCAD .dwg
  • "CADAnnotation" está dentro de uma camada de grupo chamada "ACAD"
  • Se a camada de grupo "ACAD"puder ser excluída, isso também removerá "CADAnnotation"isso seria ótimo.

Código até agora:

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

Notas sobre o código:

  • Eu posso encontrar a camada não há problema
  • a linha arcpy.Delete_management("CADAnnotation")não funciona gera um erro.

Questão:

  • Como remover "CADAnnotation"e / ou "ACAD"agrupar camada?
Tristan Avançado
fonte

Respostas:

17

Deseja realmente excluir a camada do geodatabase ou removê-la do mxd?

Se você quiser apenas remover a camada do seu mxd, substitua arcpy.Delete_management("CADAnnotation")porarcpy.mapping.RemoveLayer(df, lyr)

Se você deseja excluir a fonte de dados, você pode fazer isso.

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
fonte