我正在尝试在我的Python脚本中计算多边形的面积。我通过将两个多边形合并在一起来创建一个新的多边形,我想将所得多边形的区域添加到输出文件中的字段中。多边形存储在常规shapefile中并进行投影。面积最好以地图为单位。
我本来以为这是一个非常普通和简单的任务,但是尽管谷歌搜索很多,但到目前为止我仍然找不到有效的解决方案。
我打算在arcpy.updateCursor
计算完值后立即使用它插入值(此阶段FC中只有一个功能),所以最简单的方法是将其作为变量返回。任何完成相同任务(将面积值输入正确的字段)的替代解决方案也将起作用。
我也尝试过Python的Field计算器。从帮助页面修改后,我认为以下方法会起作用,但到目前为止还算不上什么。
arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE')
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
在Windows 7上使用Python 2.7运行ArcGIS Basic 10.1 SP1。
我当前代码的相关部分如下所示:
#/.../
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
游标的一部分来读取区域来实现所需的功能。但是代码的结构取决于您所在的区域是否与要写入的区域相同。