尝试使用SHAPE@AREA查找区域



我正在尝试获取 .shp 文件中每个多边形的面积,然后将其附加到属性表中的新列。

import os
import arcpy
import math
folderpath = 'C:UsersMichaelfDesktopGEOG M173'
arcpy.env.workspace = folderpath
arcpy.env.overwriteOutput = True
input_shp = folderpath + r'lower48_county_2012_election.shp'
equal_shape = folderpath + r'project_lower48.shp'
out_point = folderpath + r'lower_48_centroid.shp'
out_shp = folderpath + r'48_State_Centroids.shp'
totarea = []
arcpy.AddField_management(input_shp, "totarea")
geometryField = arcpy.Describe(totarea).shapeFieldName
cursor = arcpy.UpdateCursor(totarea)
for row in cursor:
    AreaValue = row.getValue(geometryField).area
    row.setValue("total_area",AreaValue)
    cursor.updateRow(row)
del row, cursor
print AreaValue    

以下是我收到的一个建议,但我不太明白

with arcpy.da.SearchCursor(input_shp, ("OID@", "SHAPE@AREA")) as cursor:
for row in cursor:
    print("Feature {0} has an area of {1}".format(row[0], row[1]))

这是我的错误消息:

Traceback (most recent call last):
File "C:/Users/Michaelf/Desktop/GEOG M173/test2.py", line 16, in <module>
geometryField = arcpy.Describe(totarea).shapeFieldName
File "C:Program Files (x86)ArcGISDesktop10.3ArcPyarcpy__init__.py", line 1246, in Describe
return gp.describe(value)
File "C:Program Files (x86)ArcGISDesktop10.3ArcPyarcpygeoprocessing_base.py", line 374, in describe
self._gp.Describe(*gp_fixargs(args, True)))
RuntimeError: Object: Describe input value is not valid type
由于它是一个

以几何为中心的数据库,Arc 会自动将多边形的总面积存储为属性。没有必要计算它,这就是为什么(我假设)向你建议代码片段的原因:

with arcpy.da.SearchCursor(input_shp, ("OID@", "SHAPE@AREA")) as cursor:
    for row in cursor:
        print("Feature {0} has an area of {1}".format(row[0], row[1]))

这将执行以下操作:

  1. 创建一个光标以浏览输入的形状文件input_shp,仅拉取两个属性(对象 ID 和总面积)。
  2. 一次循环浏览一行形状文件。
  3. 对于每一行,打印出row[0](对象 ID)和row[1](总面积)。

为了进一步阅读,我会看看这个关于 GIS.SE 的优秀答案。它详细探讨了访问和计算几何图形的一些选项。

(最后注意:shape@area属性将以数据投影的单位为单位。如果您收到意外的数字,请注意这一点。

最新更新