关于ArcPy中MakeFeatureLayer的原理与使用疑问
关于ArcPy中MakeFeatureLayer工具的疑问与解答
代码示例
import arcpy # 步骤1:导入要素类(FeatureClass) inPath = arcpy.GetParameterAsText(0) # inPath为面要素类(Polygons) # 步骤2:创建要素图层(MakeFeatureLayer,为选择操作所必需) arcpy.management.MakeFeatureLayer(inPath, inPath) # 步骤3:选择并融合数据 arcpy.management.SelectLayerByAttribute(inPath,"NEW_SELECTION","status = 'white'") arcpy.analysis.PairwiseDissolve(inPath,inPath + "_diss", dissolve_field="status", statistics_fields="", multi_part="SINGLE_PART") arcpy.management.SelectLayerByAttribute(inPath,"CLEAR_SELECTION") # 步骤4:选择并计算字段 arcpy.management.SelectLayerByAttribute(inPath,"NEW_SELECTION","status = 'white'") arcpy.management.CalculateField(inPath,"symbol", 1) arcpy.management.SelectLayerByAttribute(inPath,"CLEAR_SELECTION") # 步骤5:选择并删除要素 arcpy.management.SelectLayerByAttribute(inPath,"NEW_SELECTION","status = 'red'") arcpy.management.DeleteFeatures(inPath) arcpy.management.SelectLayerByAttribute(inPath,"CLEAR_SELECTION")
代码执行逻辑
- 加载面要素类;
- 通过MakeFeatureLayer创建与要素类同名的要素图层;
- 选择
status字段为'white'的要素,融合后输出至新要素类; - 选择
status为'white'的要素,将其symbol字段计算为1; - 选择
status为'red'的要素并删除。
疑问解答
1. 选择操作需先创建要素图层,是否允许/需要图层与要素类同名?若名称不同,后续传入正确名称是否无差异?
允许同名,但完全没必要。ArcPy里要素图层的名称只是脚本内的一个标识,只要后续操作传入的图层名和创建时指定的一致,不管叫什么都能正常工作。比如你可以把图层命名为"temp_layer",之后所有操作都用这个名字就行,和要素类路径同名不会有功能上的优势,反而容易混淆。
2. 要素图层与要素类是否存在隐式关联?对图层的数据修改是否自动同步至要素类?
是的,要素图层本质是要素类的视图,和源要素类实时关联。你通过图层做的修改(比如CalculateField、DeleteFeatures这类操作),会直接同步到源要素类里——因为图层本身不存储数据,只是指向源要素类的一个操作入口。
3. 临时图层在脚本中的有效时长是多久?能否反复通过图层编辑要素类?为何多次创建同名图层时中间图层会消失?
- 临时图层的有效期就是当前ArcPy会话的生命周期,也就是脚本运行的整个过程。只要脚本没结束,图层就一直有效,你可以反复用它编辑源要素类,就像示例里那样多次做选择、修改操作都没问题。
- 多次创建同名图层时,后创建的会直接覆盖之前的同名图层。ArcPy里不允许存在两个同名的临时图层,所以第二次调用
MakeFeatureLayer用同一个名称时,原来的图层会被替换掉,自然就“消失”了。
内容的提问来源于stack exchange,提问作者Clemens Borkenhagen
相关产品推荐
相关产品推荐

