Pythonを使用してArcMapからレイヤーを削除する


9

問題:

  • という名前のレイヤーを探してすべてのレイヤーをループしようとしています"CADAnnotation"
  • レイヤーが存在する場合、mxdからレイヤーを削除します

ノート:

  • スタンドアロンスクリプトから実行(つまり、Arcmap内ではない)
  • "CADAnnotation" データタイプはCADアノテーションフィーチャクラスです
  • "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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.