先月の3/5 ~ 3/8 に米国で行われた「Esri Developer Summit 2019 」のテクニカル セッション 242本分の動画が、先々週から公開が始まっています( Esri 2019 Developer Summit Tech Sessions )。 その中の一部のものは、スライド やデモ で利用しているコードがGitHub 上で公開されており、開発する際のヒントになるかと思います。
今回の記事では、「Python Working with Feature Data」のタイトルで発表されていたセッションの内容を、スライドに沿う形で紹介していきます。ArcPy でのフィーチャ データ, テーブルの操作に関する内容がコンパクトにまとまっていますので、ArcPy でデータを操作したい方は必見の内容かと思います。
※この記事の見出しは、スライドのタイトルに対応しています。また、コードリーディングを重視して、原文のままにしているものもありますので、ご了承ください。
※スライドのセル色の説明
fields = ['field1', 'field2']
cursor = arcpy.da.InsertCursor(table, fields)
cursor.insertRow([1, 10])
cursor = arcpy.InsertCursor(table)
row = cursor.newRow()
row.setValue("field1", 1)
row.setValue("field2", 10)
cursor.insertRow(row)
with arcpy.da.SearchCursor(table, field) as cursor:
for row in cursor:
print row[0]
with arcpy.da.SearchCursor(table, fields) as cursor:
for row in cursor:
print(row[17]) #index 17 is RoadName field
def row_as_dict(cursor):
for row in cursor:
yield dict(zip(cursor.fields, row))
with arcpy.da.SearchCursor(table, fields) as cursor:
for row in row_as_dict(cursor):
print(row['RoadName'])
# tokens の例
'OID@'
'SHAPE@XY'
'SHAPE@TRUECENTROID'
'SHAPE@X'
'SHAPE@Y'
'SHAPE@Z'
'SHAPE@M'
'SHAPE@JSON'
'SHAPE@WKB'
'SHAPE@WKT'
'SHAPE@'
'SHAPE@AREA'
'SHAPE@LENGTH'
with arcpy.da.Editor(workspace) as edit:
# your edits
# Start an edit session
edit = arcpy.da.Editor(workspace)
# Edit session is started without an undo/redo stach
# for versioned data
edit.startEditing(False, True)
# Start an edit operation
edit.startOperation()
# Edits
# Stop the edit operation
edit.stopOperation()
# Stop the edit session and save changes
edit.stopEditing(True)
# Editor methods
startEditing ({with_undo}, {multiuser_mode})
stopEditing(save_changes)
startOperation()
stopOperation()
abortOperation()
undoOperation()
redoOperation()
cursor = arcpy.da.InsertCursor(fc, 'SHAPE@')
line = arcpy.Polyline(arcpy.Array([arcpy.Point( , ), arcpy.Point( , )]), arcpy.SpatialReference(3857))
cursor.insertRow([line])
cusor = arcpy.da.InsertCursor(fc, 'SHAPE@JSON')
json_line = {"paths": [[[ , ], [ , ]]], "spatialreference":{"wkid": 102100, "latestWkid":3857}}
cursor.insertRow([json.dumps(json_line)])
cursor = arcpy.da.InsertCursor(fc, 'SHAPE@')
coordinate_list = [( , ), ( , )]
cursor.insertRow([coordinate_list])
ListDomains
ListFieldConflictFilters
ListReplicas
ListSubtypes
ListVersions
walk = arcpy.da.Walk(workspace, datatype=datatypes)
for path, path_names, data_names in walk:
for data_name in data_names:
do_something()
FeuatureClassToNumPyArray
TableToNumPyArray
NumPyArrayToFeatureClass
NumPyArrayToTable
ExtendTable
import arcpy
import numpy
in_fc = "c:/data/usa.gdb/USA/counties"
field1 = "INCOME"
field2 = "EDUCATION"
array1 = arcpy.da.FeatureClassToNumPyArray(in_fc, [field1, field2])
# Print correlation coefficients for comparison of 2 fields
print numpy.corrcoef((array1[field1], array1[field2]))
point:
array1 = numpy.array([(1, ( , )), (2, ( , ))], numpy.dtype([('idfield', numpy.int32), ('XY', '<f8', 2)]))
sr = arcpy.SpatialReference(wkid)
arcpy.da.NumPyArrayToFeatureClass(array1, outFC, ['XY'], sr)
def features_to_pandas(in_features, fields):
in_arr = arcpy.da.FeatureClassToNumPyArray(in_features, fields)
return pandas,DataFrame(in_arr)
def pandas_to_features(dataframe, output, geometry_columns, wkid=None):
in_arr = dataframe.to_records()
spatial_ref = '' if not wkid else arcpy.SpatialReference(wkid)
return arcpy.da.NumPyArrayToFeatureClass(in_arr, output, geometry_columns, spatial_reference=spatial_ref)