Löschen Sie die Ebene mit Python aus ArcMap

9

Problem:

  • Ich versuche, alle meine Ebenen zu durchlaufen, um nach einer benannten Ebene zu suchen "CADAnnotation".
  • Wenn die Ebene vorhanden ist, entfernen Sie die Ebene aus dem mxd

Anmerkungen:

  • Ausführen aus einem eigenständigen Skript (dh NICHT in Arcmap)
  • "CADAnnotation" Der Datentyp ist eine CAD-Anmerkungs-Feature-Class
  • "CADAnnotation" befindet sich NICHT in einer Geodatabase, sondern wird aus einer AutoCAD .dwg erstellt
  • "CADAnnotation" befindet sich innerhalb einer Gruppenebene mit dem Namen "ACAD"
  • Wenn die Gruppenebene "ACAD"gelöscht werden kann, die auch entfernt wird "CADAnnotation", wäre das großartig.

Code bisher:

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

Hinweise zum Code:

  • Ich kann die Schicht kein Problem finden
  • Die Leitung arcpy.Delete_management("CADAnnotation")funktioniert nicht. Es wird ein Fehler ausgegeben.

Frage:

  • Wie entferne "CADAnnotation"und / oder "ACAD"gruppiere ich die Ebene?
Tristan vorwärts
quelle

Antworten:

17

Möchten Sie die Ebene tatsächlich aus der Geodatabase löschen oder aus der mxd entfernen?

Wenn Sie nur die Ebene von Ihrem mxd entfernen möchten, ersetzen Sie sie arcpy.Delete_management("CADAnnotation")durcharcpy.mapping.RemoveLayer(df, lyr)

Wenn Sie die Datenquelle löschen möchten, können Sie dies tun.

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
quelle