gpt4 book ai didi

python - ArcGIS 脚本每次循环都会缓冲所有要素 - 为什么?

转载 作者:行者123 更新时间:2023-11-30 23:02:50 25 4
gpt4 key购买 nike

我有一个包含多条记录的多边形形状文件。我需要单独缓冲每一个,并为每个创建一个新的缓冲多边形形状文件。

我在 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", "")

最佳答案

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

您需要包含 select by attribute ,或make your feature layer使用 SQL 查询,在缓冲之前限制要素图层中的内容。

无论哪种情况,您的查询都遵循'"FIELDNAME"=\'POLYGONNAME\'',或者使用变量:

  • '"{}"=\'{}\''.format(fc_In1_FieldName, var_PolygonName)
  • '"' + fc_In1_FieldName + '"=\'' + var_PolygonName + '\''

(我喜欢 the format method 以提高连接时的可读性,尤其是在使用这么多单/双引号时。)

# Using MAKE FEATURE LAYER with SQL QUERY
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", '"{}" = \'{}\''.format(fc_In1_FieldName, var_PolygonName))
arcpy.Buffer_analysis("Poly_lyr", var_PolygonName+'_Buff.shp', var_Buffer, "FULL", "ROUND", "ALL", "")

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", "")

关于python - ArcGIS 脚本每次循环都会缓冲所有要素 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34310200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com