ArcPyでフィーチャにフィールドを追加する

Pythonコード

import arcpy

# 入力パラメータを確認
arcpy.AddMessage("GetArgumentCount() = {0}".format(arcpy.GetArgumentCount()))
for i in range(arcpy.GetArgumentCount()):  
    arcpy.AddMessage("type(GetParameter({0})) = {1}".format(i, type(arcpy.GetParameter(i))))
    arcpy.AddMessage("GetParameterAsText({0}) = {1}".format(i, arcpy.GetParameterAsText(i)))

inFeatureLayer = arcpy.GetParameter(0)
outFeatureClass = arcpy.GetParameter(1)

# フィーチャレイヤーをコピー
arcpy.CopyFeatures_management(inFeatureLayer, outFeatureClass)

# フィールドを追加
arcpy.AddField_management(outFeatureClass, "field1", "DOUBLE", field_alias = "フィールド1")
arcpy.AddField_management(outFeatureClass, "field2", "DOUBLE", field_alias = "フィールド2")

fields = ["OID@", "SHAPE@X", "SHAPE@Y", "field1", "field2"]

# フィールドに値を入力
with arcpy.da.UpdateCursor(outFeatureClass, fields) as cursor:
    arcpy.AddMessage("入力前のフィールド")
    for row in cursor:
        arcpy.AddMessage(row)
        row[3] = row[1]
        row[4] = row[2]
        cursor.updateRow(row)
del cursor

# 入力後の状態を確認
with arcpy.da.SearchCursor(outFeatureClass, fields) as cursor:
    arcpy.AddMessage("入力後のフィールド")
    for row in cursor:
        arcpy.AddMessage(row)
del cursor

実行結果

ポリゴンが2つ含まれているフィーチャレイヤーを入力として実行した場合。

2020-01-12-20-40-12.png
GetArgumentCount() = 2
type(GetParameter(0)) = <class 'arcpy._mp.Layer'>
GetParameterAsText(0) = テストポリゴン
type(GetParameter(1)) = <class 'geoprocessing value object'>
GetParameterAsText(1) = D:\GIS\ArcGIS_Project\GeometryTest\GeometryTest.gdb\テストポリゴン_AddField
入力前のフィールド
[1, 134.32332180386206, 30.338120870687362, None, None]
[2, 144.42135929631993, 39.08930527833865, None, None]
入力後のフィールド
[1, 134.32332180386206, 30.338120870687362, 134.32332180386206, 30.338120870687362]
[2, 144.42135929631993, 39.08930527833865, 144.42135929631993, 39.08930527833865]
2020-01-12-20-40-50.png

リファレンス

コメントを残す