我有一个包含多边形的shapefile。我想找到每个的质心,并将它们的x y坐标放在字段Easting
和Northing
下的属性表中。我能够找到easting
和northing
,但我无法将其放入属性表(它表示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"
答案 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