zoukankan      html  css  js  c++  java
  • 【284】◀▶ arcpy.da & arcpy 数据访问模块

    1. 使用游标访问数据
    2. 数据访问模块 (arcpy.da)

     参考:


    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  

    ====<<<< Description >>>>====

    SearchCursor 用于建立从要素类或表中返回的记录的只读访问权限。
    返回一组迭代的元组。元组中值的顺序与 field_names 参数指定的字段顺序相符。使用 For 循环可迭代搜索游标。
    ----------------------------------------------------------------------------------

    ====<<<< Syntax >>>>====

    da.SearchCursor (in_table, field_names, {where_clause}, {spatial_reference}, {explode_to_points}, {sql_clause})
    ----------------------------------------------------------------------------------

    ====<<<< Parameters >>>>====

    ◈  in_table:要素类、图层、表或表视图。
    ◈  field_names、[field_names,...]:字段名称列表(或组)。对于单个字段,可以使用一个字符串,而不使用字符串列表。如果要访问输入表中的所有字段(栅格和 BLOB 字段除外),可以使用星号 (*) 代替字段列表。以令牌(如 OID@)取代字段名称可访问更多的信息:
        SHAPE@XY —一组要素的质心 x,y 坐标。
        SHAPE@TRUECENTROID —一组要素的真正质心 x,y 坐标。
        SHAPE@X —要素的双精度 x 坐标。
        SHAPE@Y —要素的双精度 y 坐标。
        SHAPE@Z —要素的双精度 z 坐标。
        SHAPE@M —要素的双精度 m 值。
        SHAPE@JSON — 表示几何的 esri JSON 字符串。
        SHAPE@WKB —OGC 几何的熟知二进制 (WKB) 制图表达。该存储类型将几何值表示为不间断的字节流形式。
        SHAPE@WKT —OGC 几何的熟知文本 (WKT) 制图表达。其将几何值表示为文本字符串。
        SHAPE@ —要素的几何对象。(Point、Polyline、Polygon)
        SHAPE@AREA —要素的双精度面积。
        SHAPE@LENGTH —要素的双精度长度。
        OID@ —ObjectID 字段的值。

    ◈  where_clause:用于限制所返回的记录的可选表达式。有关 WHERE 子句和 SQL 语句的详细信息,请参阅构建查询表达式。
    (默认值为 None)
    ----------------------------------------------------------------------------------

    ====<<<< Properties >>>>====

    ◈  fields:返回一个使用这个游标的字段名称的元组,与上面的参数对应。
    ----------------------------------------------------------------------------------

    ====<<<< Methods >>>>====

    ◈   next ():将下一行作为元组返回。字段将按照创建光标时所指定的顺序返回。
    ◈   reset ():将光标重置回第一行。

     
    # 用来查询 "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

     

     

    ====<<<< Description >>>>====

    InsertCursor 可在要素类或表上建立写入游标。可以使用 InsertCursor 来添加新行。
    ----------------------------------------------------------------------------------

    ====<<<< Syntax >>>>====

    da.InsertCursor (in_table, field_names)
    ----------------------------------------------------------------------------------

    ====<<<< Parameters >>>>====

    ◈  in_table:要素类、图层、表或表视图。
    ◈  field_names、[field_names,...]:字段名称列表(或组)。对于单个字段,可以使用一个字符串,而不使用字符串列表。如果要访问输入表中的所有字段(栅格和 BLOB 字段除外),可以使用星号 (*) 代替字段列表。
    ----------------------------------------------------------------------------------
    ====<<<< Properties >>>>====

    ◈  fields:返回一个使用这个游标的字段名称的元组,与上面的参数对应。
    ----------------------------------------------------------------------------------

    ====<<<< Methods >>>>====

    ◈   insertRow (row):向表中插入一行。
     

     

     03

    da.UpdateCursor

     

    ====<<<< Description >>>>====

    UpdateCursor 用于建立对从要素类或表返回的记录的读写访问权限。
    返回一组迭代列表。列表中值的顺序与 field_names 参数指定的字段顺序相符。
    ----------------------------------------------------------------------------------

    ====<<<< Syntax >>>>====

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

    ====<<<< Parameters >>>>====

    ◈  in_table:要素类、图层、表或表视图。
    ◈  field_names、[field_names,...]:字段名称列表(或组)。对于单个字段,可以使用一个字符串,而不使用字符串列表。如果要访问输入表中的所有字段(栅格和 BLOB 字段除外),可以使用星号 (*) 代替字段列表。
    ----------------------------------------------------------------------------------
    ====<<<< Properties >>>>====

    ◈  fields:返回一个使用这个游标的字段名称的元组,与上面的参数对应。
    ----------------------------------------------------------------------------------

    ====<<<< Methods >>>>====

    ◈  deleteRow ():删除当前行。
    ◈  next ():将下一行作为元组返回。字段将按照创建光标时所指定的顺序返回。
    ◈  reset ():将光标重置回第一行。
    ◈  updateRow (row):更新表中的当前行。
     

     

     

     

     

    以下是 arcpy.SearchCursor、arcpy.InsertCursor、arcpy.UpdateCursor

    04

    SearchCursor

     

    ====<<<< Description >>>>====

    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.
    ◈  where_clause:SQL 语句,用来限定查询注意内容用单引号

     
    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

    InsertCursor

       

    ====<<<< Description >>>>====

    向要素类、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

       

    ====<<<< Description >>>>====

    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.
    ◈  where_clause:SQL 语句,用来限定查询注意内容用单引号

     
    # 将一列的数据赋值到另一列
    # 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()
    
    --
    ----------
     
    --------------------------------------------------
       
  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/alex-bn-lee/p/8179678.html
Copyright © 2011-2022 走看看