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()
--
----------
 
--------------------------------------------------
   

【284】◀▶ arcpy.da & arcpy 数据访问模块的更多相关文章

  1. ASP.NET Core模块化前后端分离快速开发框架介绍之3、数据访问模块介绍

    源码 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin 前 ...

  2. arcpy.UpdateCursor和arcpy.da.UpdateCursor计算面积时间的比较

    arcpy.UpdateCursor ####################### import arcpy from arcpy import env import os import sys f ...

  3. ArcGIS ArcPy Python处理数据

    1.使用搜索游标查看行中的字段值.import arcpy # Set the workspace arcpy.env.workspace = "c:/base/data.gdb" ...

  4. JAVAWEB基础模块开发顺序与数据访问对象实现类步骤

    一.模块的开发的顺序 1. 定义数据表 2. 新建模型类 3. 新建"add.jsp" 4. 实现AddServlet中的doGet()方法 5. 定义Dao.Service接口 ...

  5. 【273】利用ArcPy建立处理数据的脚本

    这个脚本可以直接运行处理程序,首先在 ArcPy 上面测试,成功后写入文件,下面的代码实现将指定文件夹内部的栅格数据进行 Calculate Statistics 操作,否则在进行专题图制作的时候会出 ...

  6. step by step 之餐饮管理系统六(数据库访问模块)

    距上次写的博客已经好几个月,一方面公司里面有很多的东西要学,平时的时候又要写代码,所以没有及时更新,不过现在还好,已经成型了,现在把之前的东西贴出来,先看一下现在做的几个界面吧.第一个界面是用颜色用区 ...

  7. Dojo Data Store——统一数据访问接口

    原文地址:http://www.infoq.com/cn/articles/wq-dojo-data-store 无论在传统的桌面应用还是在主流的互联网应用中,数据始终占据着软件应用中的核心地位.当下 ...

  8. SRF之数据访问

    数据访问组件实现实体类和数据表映射.SQL语句配置执行.动态sql语句等功能,ORM方式能实现简单的对象和表的映射(配置类似hibernate),但比较单一(不支持一对多.多对多的情况),下边不做介绍 ...

  9. 数据访问层DAL(数据库访问抽象类DataProvider)

    晒晒数据访问层DAL,看看你的项目数据访问层使用的是什么形式,数据访问性能比较 采用什么样的数据访问形式是软件编码很重要的一个环节,良好的数据访问形式不仅能够提搞代码的执行效率,协作能力,更重要的是对 ...

随机推荐

  1. c++指针初探

    业余时间准备重温一下c++,因为在阅读Android源码到native层的时候感觉有点吃力,只是在大学时候很不用心的学过c++,所以重温下以便打好一些编程基础知识,本篇就很简单的对c++的指针做初步的 ...

  2. Leetcode 999. Available Captures for Rook

    class Solution: def numRookCaptures(self, board: List[List[str]]) -> int: rook = [0, 0] ans = 0 f ...

  3. js实现城市二级联动列表

    这个是一个同事写的,我看着有用,就cv下来了. 程序功能主要逻辑是: 1.当一级标签市显示默认状态 '-请选择-'时,二级标签要隐藏 2.一级标签选中城市时,二级标签显示在页面,并列出响应市区 3.当 ...

  4. 【前端】CSS入门笔记

    教程 CSS 指层叠样式表 (Cascading Style Sheets) CSS 语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. 选择器通常是您需要改变样式的 HTML 元素 ...

  5. Google搜索被屏蔽,如何使用Google搜索

    我们在国内使用搜索引擎最多的是Google和Baidu啦,在引擎上找一些我们需要的知识,最近好像www.google.cn已经无法访问了,并且香港的链接www.google.com.hk也无法访问了, ...

  6. linux下创建与删除用户详细步骤 ***

    linux下用户的操作还是相对容易理解的,基本操作如下: 1.新增用户 只有root用户能创建新用户 #useradd user1 新建后将会在/home目录下生成一个与用户名相同的用户主目录.同时会 ...

  7. nginx学习资源

    在了解nginx的时候 看到的一些资源: https://www.cnblogs.com/EdwinChan/p/8350984.html http://tengine.taobao.org/book ...

  8. Quartz.net 2.x 学习笔记01

    Quartz.net 2.0 2012年4月9日发布了Released版本,到目前(2014-12-08)为止是2.3版 Quartz.net 项目地址:http://www.quartz-sched ...

  9. 分布式锁之二:zookeeper分布式锁2

    示例: package com.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.zoo ...

  10. PTA 畅通工程之最低成本建设问题(30 分)(最小生成树 krusal)

    畅通工程之最低成本建设问题(30 分) 某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出“畅通工程”的目标:使整个地区任何两个城镇间都可以实现快速交通(但不一定有直接的快速道路 ...