更新shapefile使用的是arcpy.da.UpdateCursor
函数,UpdateCursor 能够对游标所访问的数据进行读写,其定义如下:
UpdateCursor(in_table, field_names, {where_clause}, {spatial_reference}, {explode_to_points}, {sql_clause})
参数的意义与arcpy.da.SearchCursor
相同。
UpdateCursor
具有四个方法:deleteRow()
:删除当前要素next()
:用于迭代时获取下一行数据reset()
:将游标重置到第一行updateRow(row)
:更新当前行数据
接下来来看一段代码:
shp_file_path = ur'../data/ReadData/Point.shp'
fields_array = ['SHAPE@', 'Id']
# 定义WGS84坐标系
spatial_reference = arcpy.SpatialReference(4326)
with arcpy.da.UpdateCursor(shp_file_path, fields_array, spatial_reference=spatial_reference) as cursor:
row_index = 0
for row in cursor:
if row_index == 0:
new_id = random.randint(1, 100)
row[1] = new_id
else:
new_y = random.randint(-90, 90)
old_pt = row[0].firstPoint
row[0] = arcpy.Point(old_pt.X, new_y)
row_index += 1
cursor.updateRow(row)
这段代码是更新了一个“Point.shp”文件。开始,我们定义了需要搜索的字段为[‘SHAPE@’, ‘Id’],当row_index == 0
时,更改了属性中的第2个字段——Id——为一个随机整数;当row_index == 1
时,更改了属性中的第1个字段——几何信息,此处为点——的y坐标为一个在[-90,90]之间的随机整数。