使用ArcPy脚本删除要素图层?


13

我有一个基于ArcPy的脚本,在该脚本中,我试图将两层相交,其中一层必须在另一层中具有其质心。

由于我需要知道一层(下面的feature_layer)包括另一层的质心,因此我使用了arcpy.SelectLayerByLocation_management()工具。

我没有打开地图文档(* .mxd),因此要执行此操作,必须使用“生成要素图层”将其输入。

文档指出,功能层将在程序退出时消失,但是我需要尽快将其消失,因为我将其置于类似于下面的循环中

for feature_class in large_list_of_feature_classes:
    some_function(feature_class)

def some_function():
    feature = "{path to feature class}"
    feature_layer = "feature_layer"
    HUCs_layer = "all_HUCs" #HUCs being Hydrologic Unit Codes

    arcpy.MakeFeatureLayer_management(feature, feature_layer)
    arcpy.MakeFeatureLayer_management(feature, HUCs_layer)      
    arcpy.SelectLayerByLocation_management(HUCs_layer, "HAVE_THEIR_CENTER_IN", feature_layer, selection_type="NEW_SELECTION")

    arcpy.CopyFeatures_management(HUCs_layer, selection_name)

我正在寻找一种功能来删除要素图层,但我一直找不到。

我意识到我可以在其中添加某种计数,或者在程序范围内添加一些使每个数字唯一的方法,但这不是理想的方法,除非无法删除要素图层。

Answers:


21

删除工具应接受要素图层的名称,以将其从目录中删除。

从磁盘上永久删除数据。可以删除ArcGIS支持的所有类型的地理数据以及工具箱和工作区(文件夹,地理数据库)。如果指定的项目是工作空间,则所有包含的项目也会被删除。

并在“语法”部分下列出了可以删除为的数据类型:

数据元素;图形; ; 表格检视


我不知道为什么我应该两次使用删除工具来确保要素图层被删除,有时即使该要素图层并未真正删除,此功能也会出现gimme错误,当我尝试删除和创建要素图层时会发生此错误同名
geogeek 2012年

2
这并没有真正的关系,但这是地理处理的方式-它期望每个图层都有一个唯一的名称,因为这就是引用它们的方式。
杰森·谢勒

1
也许可以使用resource.arcgis.com/en/help/main/10.1/index.html#//…更好地记录使用Delete工具从TOC中删除图层的信息 -它表示Layer是一种可以删除层,但是没有其他参考层,并且其开头句“从磁盘上永久删除数据”会使许多用户害怕尝试删除以删除层。
PolyGeo

7

您可以调用arcpy.mapping.RemoveLayer从TOC中删除图层。

提供删除地图文档(.mxd)数据框中的图层的功能。


感谢您的建议-我没有弄清楚我在寻找映射上下文之外的东西来做-这只是一个分析脚本,我没有(或者至少不知道)明确的TOC。杰森(Jason)的建议在下面起作用。谢谢!以后对我来说它将仍然是有用的功能。
nicksan

3

这就是我用来删除图层的方法。

arcpy.mapping.RemoveLayer(“ DataFrame”,“图层名称”)

或循环:

mxd = arcpy.mapping.MapDocument("CURRENT")
for df in arcpy.mapping.ListDataFrames(mxd):
    for lyr in arcpy.mapping.ListLayers(mxd, "", df):
        arcpy.mapping.RemoveLayer(df, lyr)

3

使用mxd.save()如果您使用的是地图文档不是CURRENT以确保该层停留了。另外,在脚本中添加一条打印语句:

mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]

for i in arcpy.mapping.ListLayers(mxd , "TerraColor_SanFrancisco_US_15m.tif"):
    print "Deleting layer", i
    arcpy.mapping.RemoveLayer(df , i)

arcpy.RefreshActiveView()

只是为了确保找到要删除的图层。


-1

尝试这个:

import arcpy
from arcpy import env
env.workspace = r"F:\Projects\ohad\derech_atankim\gis"   
for mxdname in arcpy.ListFiles("*.mxd"):
    print mxdname 
    mxd = arcpy.mapping.MapDocument(r"F:\Projects\ohad\derech_atankim\gis\\" + mxdname)
    df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
    for lyr in arcpy.mapping.ListLayers(mxd, "", df):
        if lyr.dataSource == r"F:\Projects\ohad\derech_atankim\gis\layers\roads.lyr":
            arcpy.mapping.RemoveLayer(df, lyr)
    mxd.save()
del mxd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.