如何使用光标和arcpy删除面积最大的要素类中的要素?

时间:2019-04-21 23:49:21

标签: python-2.7 for-loop arcpy

我正在尝试删除面积最大的多边形shapefile中的特征。我在属性表中具有面积的列,并且可以生成具有最大面积的变量。但是我无法将此变量传递到循环中以使用光标删除功能。

当我在脚本中插入实际数字(而不是变量)时,它可以正常工作。但是,我无法通过循环识别下面的变量“ y”。

import arcpy
fc = "test.shp"
cursor = arcpy.da.UpdateCursor(fc, ["TEST"])
x = max(cursor)
y = int(x[0])
for row in cursor:
   if row[0]==y: 
        cursor.deleteRow()
del row
del cursor

我希望这段代码可以删除shapefile中面积最大的一个功能,但是似乎变量没有传递到循环中。

1 个答案:

答案 0 :(得分:0)

您需要使用一个单独的光标来获取最大值。请参见下面的示例。

import arcpy
fc = "test.shp"
with arcpy.da.SearchCursor(fc, ['Test']) as cursor:
    x = max(cursor) 
y = int(x[0]) 

with arcpy.da.UpdateCursor(fc, ['Test']) as cursor:
    for row in cursor: 
       if row[0]==y:  
            cursor.deleteRow()

在可能的情况下,我将避免完全使用游标。拥有最大权限后,您可以像这样删除功能:

criteria =  "Test = " + str(y)  
arcpy.MakeFeatureLayer_management  (fc, "DeleteRows",criteria)   
arcpy.DeleteRows_management ("DeleteRows")  

请注意,以任何一种方式编写的代码都将删除具有最大值的所有功能,而不仅仅是第一个。