Python - 向字段添加值

3

我有一个包含多边形的shapefile。我想要找到每个多边形的重心,并将它们的x和y坐标放入属性表中的字段EastingNorthing中。我已经能够找到eastingnorthing,但是无法将它们放入属性表中(它显示为空值)。

import arcpy
arcpy.env.workspace = folderpath
arcpy.env.overwriteOutput = True

inputRoofs = "Roof"

print "working"


table = inputRoofs

arcpy.AddField_management(inputRoofs, 'Easting', 'DOUBLE')

arcpy.AddField_management(inputRoofs, 'Northing', 'DOUBLE')


print "fields added"

roofList_x = []

roofList_y = []

roof_cursor = arcpy.UpdateCursor("Roof")
for roof in roof_cursor:
    roof_geom = roof.Shape
    roofList_x.append(roof_geom.centroid.X)
    roofList_y.append(roof_geom.centroid.Y)

print roofList_x
print roofList_y
print "done"

1
你真的想用Python来做这个吗?在属性表中,对东坐标和北坐标字段名称进行右键单击,即可进入计算几何。 - PolyGeo
1个回答

3
这里有一个实现方法,它使用CalculateField将质心值分配给新字段。
# Name: CalculateField_Centroids.py
# Description: Use CalculateField to assign centroid values to new fields


# Import system modules
import arcpy
from arcpy import env

try: 
    # Set environment settings
    env.workspace = "C:/data/airport.gdb"

    # Set local variables
    inFeatures = "parcels"
    fieldName1 = "xCentroid"
    fieldName2 = "yCentroid"
    fieldPrecision = 18
    fieldScale = 11
    # Expressions are calculated using the Shape Field's geometry property
    expression1 = "float(!SHAPE.CENTROID!.split()[0])"
    expression2 = "float(!SHAPE.CENTROID!.split()[1])"

    # Execute AddField
    arcpy.AddField_management(inFeatures, fieldName1, "DOUBLE", 
                              fieldPrecision, fieldScale)
    arcpy.AddField_management(inFeatures, fieldName2, "DOUBLE", 
                              fieldPrecision, fieldScale)

    # Execute CalculateField 
    arcpy.CalculateField_management(inFeatures, fieldName1, expression1,
                                    "PYTHON")
    arcpy.CalculateField_management(inFeatures, fieldName2, expression2,
                                    "PYTHON")
except Exception, e:
    # If an error occurred, print line number and error message
    import traceback, sys
    tb = sys.exc_info()[2]
    print "Line %i" % tb.tb_lineno
    print e.message

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接