Я намагаюся обчислити площу багатокутника в рамках мого сценарію Python. Я створюю новий багатокутник з об'єднання двох разом, і я хотів би додати область отриманого многокутника до поля у вихідному файлі. Полігон зберігається у звичайному форматному файлі та проектується. Площа переважно в одиницях карт.
Я вважав би це досить розповсюдженим і простим завданням, але, незважаючи на багато Googleing, я досі не зміг знайти робочі рішення.
Я планував використовувати arcpy.updateCursor
для вставки значення, коли воно обчислюється (на цьому етапі є лише одна особливість у ФК), тому найпростіше, якщо його можна повернути як змінну. Будь-яке альтернативне рішення, яке виконує те саме завдання (отримання значення області у правильне поле), також буде працювати.
Я також спробував калькулятор поля від Python. Змінено на довідкових сторінках, я думав, що наступне буде працювати, але поки що не пощастило.
arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE')
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
Запуск ArcGIS Basic 10.1 SP1 з Python 2.7 у Windows 7.
Відповідні частини мого поточного коду виглядають так:
#/.../
arcpy.Copy_management(inpgs, outpgs)
arcpy.AddField_management(outpgs, 'Shape_area', 'LONG')
fields = AM.FieldLst(outpgs)
#/.../
# Identify and search for shapes smaller than minimum area
where1 = '"' + 'Shape_Area' + '" < ' + str(msz)
polyrows = arcpy.SearchCursor(inpgs, where1)
for prow in polyrows:
grd1 = prow.GridID # GridID on the current polygon
grd2 = nDD.get(grd1) # GridID on the polygon downstream
# Update features
if grd2
geometry1 = prow.Shape
geometry2 = geometryDictionary[grd2]
# Update temporary features
arcpy.Merge_management([geometry1, geometry2], tempMerged)
arcpy.Dissolve_management(tempMerged, tempPgs)
fds = AM.FieldLst(tempPgs)
for field in fields[2:]:
arcpy.AddField_management(tempPgs, field, 'DOUBLE')
for fd in fds[2:]:
arcpy.DeleteField_management(tempPgs, fd)
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
# Append them to output FC
try:
arcpy.Append_management(tempPgs, outpgs, "TEST")
except arcgisscripting.ExecuteError:
arcpy.Append_management(tempPgs, outpgs, "NO_TEST")
elif ...
else ...
SHAPE@AREA
як частину курсору для читання області; але структура коду залежить від того, чи знаходиться ваша область в тих же одиницях, що і те, що ви хочете виписати.