Как я могу удалить объект в классе пространственных объектов с наибольшей площадью, используя курсор и arcpy? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь удалить объект внутри многоугольного шейп-файла, который имеет наибольшую площадь. У меня есть столбец в таблице атрибутов с областями, и я могу создать переменную с максимальной площадью. Но я не могу передать эту переменную в цикл, чтобы удалить объект с помощью курсора.

Когда я вставляю фактическое число (а не переменную) в скрипт, оно работает нормально. Но я не могу заставить цикл распознавать переменную "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

Я ожидаю, что этот код удалит один объект в шейп-файле с самой большой областью, но похоже, что переменная не передается в цикл.

1 Ответ

0 голосов
/ 24 апреля 2019

Вам нужно использовать отдельный курсор, чтобы получить ваш макс.См. Образец ниже.

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

Имейте в виду, что код, написанный в любом случае, удалит ВСЕ функции с максимальным значением, а не только первое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...