arcpy 中的剪辑分析

clip analysis in arcpy

我有一个覆盖整个城市的 shapefile,以及一个 shapefile 列表,这些 shapefile 是城市不同地方的缓冲区。我想用每个缓冲区剪辑城市。我尝试在 Python 中使用 ArcPy,但代码无法正常工作。我做错了什么?

import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "U:\Park and Residential Area\Test\SBA park_res_buffer_5\SBA.gdb"
infeature= "U:\Park and Residential Area\Test\park_res_merge.shp"
clipfeatture = arcpy.ListFeatureClasses("*", "polygon")
for i in clipfeatture:
    outclipfeatture = arcpy.Clip_analysis(infeature,i)
    outclipfeatture.save("U:\Park and Residential Area\Test\SBA park_res_buffer_5/"*i)

这是合适的语法 for using Clip in ArcPy:

arcpy.Clip_analysis(in_features, clip_features, out_feature_class)

所以你的 for 循环应该是这样的:

for i in clipfeatture:
    outfeature = "U:\Foo\Bar\" + i
    arcpy.Clip_analysis(infeature, i, outfeature)

我还会 print() 每个文件路径字符串,以便您可以检查其语法是否被正确使用。反斜杠是 Python 中的转义字符,当其后跟关键字母时可以具有特殊属性。

我总是在任何包含文件路径的字符串前放置一个 r,例如r"\srvr\drv\proj\gdb.gdb\fc";这告诉 Python 它是一个原始字符串并忽略转义函数。

有关处理文件名中的反斜杠的有趣类比,请参阅下面的 link。

https://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-backslashes-in-windows-filenames/

如果每个地方都是独一无二的,您还可以从模型构建器中导出迭代特征选择工具。

http://desktop.arcgis.com/en/arcmap/10.3/tools/modelbuilder-toolbox/iterate-feature-selection.htm

# Import arcpy module
import arcpy

# Load required toolboxes
arcpy.ImportToolbox("Model Functions")


 # Local variables:
Selected_Features = ""
Value = "1"

# Process: Iterate Feature Selection
arcpy.IterateFeatureSelection_mb("inputfeature", "fields", "false")

要使用多个剪辑功能进行多个剪辑,您必须首先创建所有剪辑功能的列表并迭代它们。

import arcpy
arcpy.env.workspace = file_path
fcList = arcpy.ListFeatureClasses()
for fc in fcList:
    arcpy.Clip_analysis(input_feature, fc, output_feature)

请务必为您的多个输出使用不同的名称。您可以使用 arcpy.CreateUniqueName() 创建不同的名称,例如 Buffer.shp、Buffer_1.shp、Buffer_2.shp ...

import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "U:\Park and Residential Area\Test\SBA park_res_buffer_5\SBA.gdb"
infeature= "U:\Park and Residential Area\Test\park_res_merge.shp"
clipfeatture = arcpy.ListFeatureClasses("*", "polygon")
for i in clipfeatture:
    outfeature = "U:\Foo\Bar\" + i
    arcpy.Clip_analysis(infeature, i, outfeature)

使用 arcpy 在 ArcMap 中裁剪多个图层:

import os
import arcpy as arc
if __name__ == '__main__':
    input_layers = arc.GetParameterAsText(0) #list of layers for clipping
    clip_layer = arc.GetParameterAsText(1) # contour clip layer
    xy_tolerance = arc.GetParameterAsText(2)
    output_db = arc.GetParameterAsText(3) # database with saved layers
    for lay_for_clipping in input_layers.split(";"):
        arc.AddMessage("Clip for " + lay_for_clipping)
        layer_path, layer_name = os.path.split(lay_for_clipping)
        output_layer = os.path.join(output_db, layer_name)
        arc.Clip_analysis(lay_for_clipping, clip_layer, output_layer, xy_tolerance)