更新shapefile使用的是arcpy.da.UpdateCursor函数,UpdateCursor 能够对游标所访问的数据进行读写,其定义如下:

    1. UpdateCursor(in_table, field_names, {where_clause}, {spatial_reference}, {explode_to_points}, {sql_clause})

    参数的意义与arcpy.da.SearchCursor相同。

    UpdateCursor具有四个方法: deleteRow():删除当前要素 next():用于迭代时获取下一行数据 reset():将游标重置到第一行 updateRow(row):更新当前行数据

    接下来来看一段代码:

    1. shp_file_path = ur'../data/ReadData/Point.shp'
    2. fields_array = ['SHAPE@', 'Id']
    3. # 定义WGS84坐标系
    4. spatial_reference = arcpy.SpatialReference(4326)
    5. with arcpy.da.UpdateCursor(shp_file_path, fields_array, spatial_reference=spatial_reference) as cursor:
    6. row_index = 0
    7. for row in cursor:
    8. if row_index == 0:
    9. new_id = random.randint(1, 100)
    10. row[1] = new_id
    11. else:
    12. new_y = random.randint(-90, 90)
    13. old_pt = row[0].firstPoint
    14. row[0] = arcpy.Point(old_pt.X, new_y)
    15. row_index += 1
    16. cursor.updateRow(row)

    这段代码是更新了一个“Point.shp”文件。开始,我们定义了需要搜索的字段为[‘SHAPE@’, ‘Id’],当row_index == 0时,更改了属性中的第2个字段——Id——为一个随机整数;当row_index == 1时,更改了属性中的第1个字段——几何信息,此处为点——的y坐标为一个在[-90,90]之间的随机整数。