【284】◀▶ arcpy.da & arcpy 数据访问模块
参考:
01 | da.SearchCursor | 只读查看表或要素类数据。 | |
02 | da.InsertCursor | 向表或要素类插入行。 | |
03 | da.UpdateCursor | 编辑或删除表和要素类行。 | |
04 | SearchCursor | 用于在要素类或表上建立只读游标。 | |
05 | InsertCursor | 向要素类、shapefile 或表中插入行。 | |
06 | UpdateCursor | 创建一个用于更新或删除指定要素类、shapefile 和表中的行的游标。 |
序号 | 函数名称 |
功能说明 |
语法 & 举例 | ||
以下是 arcpy.da.SearchCursor、arcpy.da.InsertCursor、arcpy.da.UpdateCursor |
|||||
01 | da.SearchCursor |
SearchCursor 用于建立从要素类或表中返回的记录的只读访问权限。 ====<<<< Syntax >>>>==== da.SearchCursor (in_table, field_names, {where_clause}, {spatial_reference}, {explode_to_points}, {sql_clause}) ====<<<< Parameters >>>>==== ◈ in_table:要素类、图层、表或表视图。 ====<<<< Properties >>>>==== ◈ fields:返回一个使用这个游标的字段名称的元组,与上面的参数对应。 ====<<<< Methods >>>>==== ◈ next ():将下一行作为元组返回。字段将按照创建光标时所指定的顺序返回。 |
# 用来查询 "Fre = 0" 的全部记录(遇到字符串使用单引号,"Name = 'alex'") cursor = arcpy.da.SearchCursor("union", "Fre", "Fre = 0") # 获取查询列的所有值,并赋值为列表(values) >>> cursor = arcpy.da.SearchCursor("CNTRY92", "NAME") >>> values = [row[0] for row in cursor] # 获取经纬度坐标 >>> cursor = arcpy.da.SearchCursor("CNTRY92", "SHAPE@XY") >>> xy = [row[0] for row in cursor] >>> xy[0] (6.299706626866719, 49.77865316900599) # 获取 polygon 面积 >>> cursor = arcpy.da.SearchCursor("CNTRY92", "SHAPE@AREA") >>> area = [row[0] for row in cursor] >>> area[0] 0.33773702035614406 # 获取 polygon 周长 >>> cursor = arcpy.da.SearchCursor("CNTRY92", "SHAPE@LENGTH") >>> length = [row[0] for row in cursor] >>> length[0] 2.58749040209765 # 获取 polygon 并输出 >>> cursor = arcpy.da.SearchCursor("CNTRY92", "SHAPE@") >>> shape = [row[0] for row in cursor] >>> shape[0] <Polygon object at 0x2acfa110[0x2acf8b40]> >>> arcpy.CopyFeatures_management(shape[0], "shape_00.shp") <Result 'D:\\McDelfino\\Documents\\ArcGIS\\shape_00.shp'> 在 Python 中,构建由三重引号括起的表达式 cursor = arcpy.da.SearchCursor(fc, ["roadclass", "name"], """"roadclass" = 2""") for row in cursor: print(row[1]) 1. 注意操作的时候不要选择数据,否则只会查询选择范围内的信息; 2. 如果想要选择全部 table 内容,则不需要添加 SQL 语句; 3. 注意 SQL 语法等。
|
||
02 | da.InsertCursor |
|
InsertCursor 可在要素类或表上建立写入游标。可以使用 InsertCursor 来添加新行。 ====<<<< Syntax >>>>==== da.InsertCursor (in_table, field_names) ====<<<< Parameters >>>>==== ◈ in_table:要素类、图层、表或表视图。 ◈ fields:返回一个使用这个游标的字段名称的元组,与上面的参数对应。 ====<<<< Methods >>>>==== |
|
|
03 |
UpdateCursor 用于建立对从要素类或表返回的记录的读写访问权限。 ====<<<< Syntax >>>>==== da.UpdateCursor (in_table, field_names, {where_clause}, {spatial_reference}, {explode_to_points}, {sql_clause}) ====<<<< Parameters >>>>==== ◈ in_table:要素类、图层、表或表视图。 ◈ fields:返回一个使用这个游标的字段名称的元组,与上面的参数对应。 ====<<<< Methods >>>>==== ◈ next ():将下一行作为元组返回。字段将按照创建光标时所指定的顺序返回。 ◈ reset ():将光标重置回第一行。 ◈ updateRow (row):更新表中的当前行。 |
|
|||
以下是 arcpy.SearchCursor、arcpy.InsertCursor、arcpy.UpdateCursor |
|||||
04 |
SearchCursor 函数用于在要素类或表上建立只读游标。SearchCursor 可用于遍历行对象并提取字段值。可以使用 where 子句或字段限制搜索,并对结果排序。 以迭代方式搜索游标的方式有两种:for 循环或者 while 循环(通过游标的 next 方法返回下一行)。如果要使用游标的 next 方法来检索行数为 N 的表中的所有行,则脚本必须调用 next N 次。在检索完结果集的最后一行后调用 next 将返回 None,它是一种 Python 数据类型,此处用作占位符。 返回值为 Cursor 类,具体属性与方法参见 Cursor 类。 ====<<<< Syntax >>>>==== SearchCursor (dataset, {where_clause}, {spatial_reference}, {fields}, {sort_fields}) ====<<<< Parameters >>>>==== ◈ dataset:The feature class, shapefile, or table containing the rows to be searched. |
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]
lyrs = arcpy.mapping.ListLayers(mxd)
lyr = lyrs[0]
# 内容需要用单引号引起来,只查询辽宁省的部分
# for 循环
cursor = arcpy.SearchCursor(lyr, "NAME='辽宁省'")
for row in cursor:
print row.getValue("ID")
# while 循环,需要得到 row,然后判断 row 是否存在
cursor = arcpy.SearchCursor(lyr, "NAME='辽宁省'")
row = cursor.next()
while row:
print row.getValue("ID")
row = cursor.next()
|
|||
05 |
向要素类、shapefile 或表中插入行。InsertCursor 返回一个分发行对象的枚举对象。 可使用 newRow 方法从插入行的枚举对象获取新的行对象。每次调用光标上 insertRow 都会在表中创建新行,该行的初始值设置为输入行中的值。 返回值为 Cursor 类,具体属性与方法参见 Cursor 类。 ====<<<< Syntax >>>>==== InsertCursor (dataset, {spatial_reference}) ====<<<< Parameters >>>>==== ◈ dataset:The feature class, shapefile, or table containing the rows to be searched. |
cursor = arcpy.InsertCursor(lyr)
for i in range(1, 10):
row = cursor.newRow()
row.setValue("NAME", "阿拉斯加")
row.setValue("ID", i)
cursor.insertRow(row)
# 将其删除
del cursor, row
|
|||
06 |
UpdateCursor 函数创建一个用于更新或删除指定要素类、shapefile 和表中的行的游标。该游标将数据锁定保留至脚本完成或更新游标对象被删除时。 以迭代方式更新游标的方式有两种:for 循环或者 while 循环(通过游标的 next 方法返回下一行)。如果要使用游标的 next 方法来检索行数为 N 的表中的所有行,脚本必须调用 next N 次。在检索完结果集的最后一行后调用 next 将返回 None,它是一种 Python 数据类型,此处用作占位符。 返回值为 Cursor 类,具体属性与方法参见 Cursor 类。 ====<<<< Syntax >>>>==== UpdateCursor (dataset, {where_clause}, {spatial_reference}, {fields}, {sort_fields}) ====<<<< Parameters >>>>==== ◈ dataset:The feature class, shapefile, or table containing the rows to be searched. |
# 将一列的数据赋值到另一列
# for 循环
cursor = arcpy.UpdateCursor(lyr)
field1 = "BOU2_4M_"
field2 = "BOU2_4M_ID"
for row in cursor:
row.setValue(field1, row.getValue(field2)*2)
cursor.updateRow(row)
# while 循环,最后的时候 row 返回为 0
cursor = arcpy.UpdateCursor(lyr)
row = cursor.next()
while row:
row.setValue(field1, row.getValue(field2)/2)
cursor.updateRow(row)
row = cursor.next()
|
|||
-- |
---------- |
-------------------------------------------------- |
posted on 2018-01-02 22:37 McDelfino 阅读(2113) 评论(1) 编辑 收藏 举报