Python ArcGIS脚本每次通过循环都会缓冲所有功能--为什么?

Python ArcGIS脚本每次通过循环都会缓冲所有功能--为什么?,python,loops,arcgis,arcpy,Python,Loops,Arcgis,Arcpy,我有一个多边形形状文件和几个记录。我需要分别缓冲这些图形,并为每个图形创建一个新的缓冲多边形形状文件 我已经用ArcPy编写了以下独立脚本。它做了一些我需要的事情,但是它没有为每个记录创建单独的缓冲多边形形状文件,而是创建了多个形状文件,每个文件都有一个包含应用于所有特征的缓冲区的多部分多边形。我想知道我怎样才能改变这一点 我使用的是ArcGIS 10.3.1 import arcpy from arcpy import env file_workspace = "C:\\Data\\Temp

我有一个多边形形状文件和几个记录。我需要分别缓冲这些图形,并为每个图形创建一个新的缓冲多边形形状文件

我已经用ArcPy编写了以下独立脚本。它做了一些我需要的事情,但是它没有为每个记录创建单独的缓冲多边形形状文件,而是创建了多个形状文件,每个文件都有一个包含应用于所有特征的缓冲区的多部分多边形。我想知道我怎样才能改变这一点

我使用的是ArcGIS 10.3.1

import arcpy
from arcpy import env

file_workspace = "C:\\Data\\Temp\\"
env.workspace = file_workspace
arcpy.env.overwriteOutput = True

fc_In1 = file_workspace + "fc_InPolygon.shp"
fc_In1_FieldName = "PLOTNAME"
var_Buffer = "50 Meters"
numCount = 1

# Iterate through the rows in the cursor and buffer each
with arcpy.da.SearchCursor(fc_In1, fc_In1_FieldName) as cursor:
    for row in cursor:
        var_PolygonName = row[0]
        print "Buffering polygon " + var_PolygonName
        arcpy.MakeFeatureLayer_management(fc_In1, "Poly_lyr")
        arcpy.Buffer_analysis("Poly_lyr", var_PolygonName+'_Buff.shp', var_Buffer, "FULL", "ROUND", "ALL", "")

您的脚本重复使用输入要素类中的所有要素创建一个图层,然后缓冲该图层(因此,多个输出shapefile都包含相同的内容)

在缓冲要素层之前,您需要包含或使用SQL查询来限制要素层中的内容

在任何一种情况下,您的查询都是沿着
“FIELDNAME”=\'POLYGONNAME\'
,或者使用变量:

  • “{}”=\'{}\'.format(fc\u In1\u FieldName,var\u PolygonName)
  • “+fc\u In1\u FieldName+”=\''+var\u PolygonName+\''
(我喜欢连接时的可读性,尤其是在使用那么多单引号/双引号时。)

SelectLayerByAttribute
的主要优点是,您不会在内存中创建几十/几百个要素图层,但对于一个小要素类来说,这可能不是一个问题

# Using SELECT BY ATTRIBUTE
arcpy.MakeFeatureLayer_management(fc_In1, "Poly_lyr")     # no need to make the layer each time through the cursor
with arcpy.da.SearchCursor(fc_In1, fc_In1_FieldName) as cursor:
    for row in cursor:
        var_PolygonName = row[0]
        print "Buffering polygon " + var_PolygonName
        arcpy.SelectLayerByAttribute_management("Poly_lyr", "NEW_SELECTION", '"{}" = \'{}\''.format(fc_In1_FieldName, var_PolygonName))
        arcpy.Buffer_analysis("Poly_lyr", var_PolygonName+'_Buff.shp', var_Buffer, "FULL", "ROUND", "ALL", "")

为了便于将来参考,您可以使用GIS.SE更快地获得针对特定主题的建议
# Using SELECT BY ATTRIBUTE
arcpy.MakeFeatureLayer_management(fc_In1, "Poly_lyr")     # no need to make the layer each time through the cursor
with arcpy.da.SearchCursor(fc_In1, fc_In1_FieldName) as cursor:
    for row in cursor:
        var_PolygonName = row[0]
        print "Buffering polygon " + var_PolygonName
        arcpy.SelectLayerByAttribute_management("Poly_lyr", "NEW_SELECTION", '"{}" = \'{}\''.format(fc_In1_FieldName, var_PolygonName))
        arcpy.Buffer_analysis("Poly_lyr", var_PolygonName+'_Buff.shp', var_Buffer, "FULL", "ROUND", "ALL", "")