3

ポリゴンを含むシェープファイルがあります。Eastingそれぞれの重心を見つけて、それらの xy 座標をフィールドとフィールドの下の属性テーブルに入れたいと思いますNorthingeastingandを見つけることができましたが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"
4

1 に答える 1

3

CalculateFieldを使用して重心値を新しいフィールドに割り当てる1 つの実装を次に示します。

# 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
于 2013-07-12T03:08:28.257 に答える