我正在尝试将总区域追加到属性表中,它会在没有任何错误消息的情况下运行。我不确定我做错了什么:
import os
import arcpy
import math
folderpath = 'C:\Users\Michaelf\Desktop\GEOG 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'
projection = arcpy.SpatialReference('USA Contiguous Albers Equal Area Conic USGS')
arcpy.Project_management(input_shp, equal_shape, projection)
print 'step 1'
arcpy.CopyFeatures_management (input_shp, equal_shape)
tot_area = []
print "step 2"
fields = [
("totarea", "FLOAT"),
]
for field in fields:
arcpy.AddField_management(equal_shape, "totarea")
print "step 3"
with arcpy.da.SearchCursor(equal_shape, ("OID@", "SHAPE@AREA")) as cursor:
for row in cursor:
print("Feature {0} has an area of {1}".format(row[0], row[1]))
print "step 4"
a_cursor = arcpy.SearchCursor(equal_shape)
for area in a_cursor:
tot_area.append(area.totarea,)
print "step 5"
更新: wnnmaw当我运行它运行的代码并打印一个功能/多边形区域的列表但是当我打开.shp文件时,新列就在那里,并且没有数据附加到列表中。 ZWiki当我打印列表时,它返回一个巨大的0列表,就像属性表中列出的那样。在代码中我将它归类为FLOAT但是在arcmap属性表属性中它仍然将其识别为LONG,这可能是问题,因为答案是小数?
答案 0 :(得分:0)
首先:当您添加该字段列表时,您遇到了数据类型问题。
此代码只是添加一个名为totarea
的字段,并且不会对fields
列表中的数据执行任何操作。
for field in fields:
arcpy.AddField_management(equal_shape, "totarea")
相反:
fields = [("totarea", "FLOAT")]
for field in fields:
arcpy.AddField_management(equal_shape, field[0], field[1])
其次:Use an UpdateCursor。搜索游标无法更改表格的数据。
如果你想坚持使用那个区域列表:
tot_area = []
with arcpy.da.SearchCursor(equal_shape, ("OID@", "SHAPE@AREA")) as cursor:
for row in cursor:
print("Feature {0} has an area of {1}".format(row[0], row[1]))
tot_area.append(row[1])
print "step 4"
sum_area = sum(tot_area)
with arcpy.da.UpdateCursor(equal_shape, ["TOTAREA"]) as cursor:
for row in cursor:
row[0] = sum_area
cursor.updateRow(row)
print "step 5"
或者只是在浏览SearchCursor时总结:
tot_area = 0
with arcpy.da.SearchCursor(equal_shape, ("OID@", "SHAPE@AREA")) as cursor:
for row in cursor:
print("Feature {0} has an area of {1}".format(row[0], row[1]))
tot_area += row[1]
print "step 4"
with arcpy.da.UpdateCursor(equal_shape, ["TOTAREA"]) as cursor:
for row in cursor:
row[0] = tot_area
cursor.updateRow(row)
print "step 5"