Python - 向字段添加值

时间:2013-07-12 02:31:31

标签: python list arcgis

我有一个包含多边形的shapefile。我想找到每个的质心,并将它们的x y坐标放在字段EastingNorthing下的属性表中。我能够找到eastingnorthing,但我无法将其放入属性表(它表示null)。

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 个答案:

答案 0 :(得分:2)

以下是一个使用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