【问题标题】:I cannot append my data to a list我无法将我的数据附加到列表中
【发布时间】:2016-05-26 17:50:41
【问题描述】:

我正在尝试将总面积附加到属性表中,并且它在没有任何错误消息的情况下运行。我不确定我做错了什么:

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,这可能是问题,因为答案是小数吗?

【问题讨论】:

  • 您遇到的具体问题是什么?请包括您尝试附加的列表、任何相关输出以及您迄今为止为解决问题所做的尝试
  • 好吧,我的猜测是 arcpy.SearchCursor 正在返回一个空列表,或者返回一些你不期望的东西。你能打印出来并告诉我们它返回了什么吗?此外,您应该转义 folderpath 中的反斜杠,或者像 input_shpequal_shape 那样将其作为原始字符串提供

标签: python arcpy cursors


【解决方案1】:

首先:您在添加该字段列表时遇到了数据类型问题。

这段代码只是添加了一个名为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"

或者只是在搜索光标时求和:

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"

【讨论】:

  • 感谢您的帮助,我尝试使用第一个和总和,但每个多边形的值都是 0、1 或 2。该区域虽然是 0.300735193692 有没有办法将十进制值附加到属性表?
  • 只要TOTAREA 字段的类型为浮点型,您应该可以附加小数。
  • 感谢您的帮助,我确保它是一个浮点数,并且它始终使用相同的值 817.129 填充字段。任何反馈将不胜感激
  • 你到底想在那个领域放置什么区域?
  • 我试图将"SHAPE@AREA" 放入该字段
猜你喜欢
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
  • 2019-02-08
  • 2015-01-17
  • 2021-12-01
  • 1970-01-01
  • 2021-10-25
  • 2021-10-24
相关资源
最近更新 更多