基于Python的ArcGIS空间数据处理与分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Python的ArcGIS空间数据处理和分析易智瑞(中国)信息技术有限公司
张舵
目录
1 Python介绍
2 在ArcGIS中使用Python
3 应用示例
4 扩展内容
1、Python介绍Python 基本知识
Python是什么?
•Python是一种面向对象、直译式的计算机
2018年5月TIOBE排名程序设计语言,也是一种功能强大而完善
的通用型语言,创始人为Guido van
Rossm (吉多·范罗苏姆)。

为什么使用Python :Python的优点
●易于学习,非常适合初学者,也特别适合专家使用●可伸缩程度高,适于大型项目或小型的一次性程序●可移植,跨平台
●免费开源
●可嵌入(使ArcGIS 可脚本化)
●与ArcGIS深度集成
●稳定成熟
●用户社区规模大●胶水语言
●丰富的库面向
对象
脚本
特性
解释
执行
Python
的站点包eyed3jupyter
pip OpenCV matplotlib
pandas numpy jinja2Web.py
pyreadline ArcPy
Python的缺点
强制缩进慢
Python开发常用IDE
•学习使用Python,选择一款好用的IDE十分重要。

Python的版本
•Python自己版本之间的比较,满分5颗星
2、在ArcGIS中使用Python
●Python 在ArcGIS 9.0 版本中被引入到ArcGIS 产品
●Esri已将Python 完全纳入ArcGIS 中,与ArcGIS深度集成●已成为ArcGIS推荐使用的脚本语言
ArcGIS 中的
Python ArcPy ArcGIS API
for Python
Python
Addin
1.字段计算器
2.制作GP工具
3.模型构建器
4.Python Add-in
5.Python Window
6.ArcGIS Pro部分工具可加入Python代码
7.在ArcGIS Server中使用Python
8.在Portal/Online中使用Python
ArcPy 介绍•ArcPy ——为用户提供了使用Python 语言操作所有地理处理工具(包括扩展模块)的入口,并提供了多种有用的函数和类,以用于处理和访问GIS 数据。

使用Python 和ArcPy ,可以开发出大量的用于处理地理数据的实用程序。

可访问Network Analyst Toolbox 的所有工具(增删图层、获取属性)结合Arcpy.Describe 使用
执行空间分析、空间运算操作.mxd 和.lyr 扩展了数据驱动页面功能,自动导出、打印地图可发布为服务在Web 端使用数据的编辑会话
表、要素类与Numpy 结构化数组互转
版本、属性域和子类工作流
•Python窗口
‐在ArcMap/ArcGIS Pro中执行简单脚本的地方
•独立脚本
‐单独的py文件
‐在IDE执行
from arcpy import*
#参数部分
location = r'D:\workspace\ArcGIS\FeatureClass.gdb'
name = 'testFC'
工具参数直接赋值
gType= 'POLYGON'
sr= SpatialReference(4326)
#调用GP工具
CreateFeatureclass_management(location,name, gType,spatial_reference=sr)
•从独立脚本到脚本工具
‐单独的py文件
‐配置参数
from arcpy import*
参数映射#参数部分
location = GetParameterAsText(0) name = GetParameterAsText(1)
gType= GetParameterAsText(2)
sr= GetParameterAsText(3)
#以下是算法逻辑
列出数据
数据存储
游标
描述数据
环境和设置
几何
栅格
常规
日志历史
工作空间
许可授权和安

消息和错误处

获取设置参数
地理数据库管

发布
字段
ArcGIS Online/Port
al
•ArcPy 提供了非常丰富的函数,按类型包括:环境设置、列出数据、工作空间、地理数据库管理等。

Cursor(游标)函数
•-SearchCursor(查询游标)
•-InsertCursor(插入游标)
•-UpdateCursor(更新游标)
注意:
在ArcGIS 10.1 中引入了arcpy.da游标(arcpy.da.SearchCursor、arcpy.da.UpdateCursor和arcpy.da.InsertCursor),与先前已存在的游标功能(arcpy.SearchCursor、arcpy.UpdateCursor和arcpy.InsertCursor)组相比性能要快得多。

目前两种游标都可以使用
SearchCursor 查询游标•定义:
cursor= arcpy.da.SearchCursor(要素, [字段1,字段2,字段n]) :•使用方式:
for row in cursor:
print(row[1],row[2],row[n])•da.SearchCursor用于建立从要素类或表中返回的记录的只读访问权限。

•返回一组迭代的元组。

元组中值的顺序与字段名列表参数指定的字段顺序相符。

官方建议使用:
with … as …
模式来使用
#导入arcpy包
import arcpy
#指定要访问的要素类
fc ='c:/data/base.gdb/well’
#指定要素类字段名
fields =['WELL_ID','WELL_TYPE','SHAPE@XY’]
#使用with...as..方式创建查询游标,依次打印井ID、井类型、井XY坐标
with arcpy.da.SearchCursor(fc,fields)as cursor:
for row in cursor:
print(u'{0}, {1}, {2}'.format(row[0],row[1],row[2]))示例
•SearchCursor查询游标:过滤查询
‐在语法里面称为:where_clause(条件分句、条件表达式)
‐使用的是SQL语句里面的where子句语法的子集。

‐一般形式:
<字段名> <运算符> <值或字符串>
或者:
<字段名> <运算符> <值或字符串>
<连接符>
<字段名> <运算符> <值或字符串> ...
示例
#导入arcpy包
import arcpy
#指定要访问的要素类
fc ='c:/data/base.gdb/well’
#指定要素类字段名
fields =['WELL_ID','SHAPE@XY’]
#查询井ID为007的井数据并打印
with arcpy.da.SearchCursor(fc,fields, "well_id='007'" )as cursor: for row in cursor:
print(u'{0}, {1}'.format(row[0],row[1]))
•定义:
cursor = arcpy.da . InsertCursor (要素类,[字段1,字段2…字段n ])•使用:
row = (字段1的新值1,字段2的新值2…字段n 的新值n )cursor.insertRow (row ) 采用元组的方式来定义一个新的要素记录
把新值插入到表中
#导入arcpy 包import arcpy
#构建要插入的要素记录
row_values =[('Anderson',(1409934.4442000017,1076766.8192000017)),('Andrews',(752000.2489000037,1128929.8114))]#创建插入游标
cursor =arcpy .da .InsertCursor ('C:/data/texas.gdb/counties',['NAME','SHAPE@XY’])
#插入要素记录
for row in row_values :
cursor .insertRow (row )
#删除游标del cursor
示例
•da.InsertCursor 可在要素类或表上建立写入游标。

•可以使用InsertCursor 来添加新行
InsertCursor 插入游标函数
import arcpy
fc ='c:/data/base.gdb /well’#指定要访问的字段名
fields =['WELL_YIELD','WELL_CLASS’]#创建更新游标
with arcpy .da .UpdateCursor (fc ,fields )as cursor :#使用for 循环依次修改WELL_CLASS 字段值
for row in cursor :
if (row [0]>=0and row [0]<=10):
row [1]=1
elif (row [0]>10and row [0]<=20):
row [1]=2
#更新数据
cursor .updateRow (row )
UpdateCursor 更新游标函数•定义:
cursor = arcpy.da . UpdateCursor (要素类,[字段1,字段2…字段n ])•使用:
row = (字段1的新值1,字段2的新值2…字段n 的新值n )cursor.updateRow(row)采用元组的方式来定义一个新的要素记录
把新值更新到表中
示例
•UpdateCursor 用于建立对从要素类或表返回的记录的读写访问权限。

•返回一组迭代列表。

列表中值的顺序与field_names 参数指定的字段顺序相符。

•arcpy. Describe() 描述函数
返回Tables, Feature Classes, Geodatabases, Rasters, Coverage,Layer Files, Relationship Classes, Workspaces,Datasets, FeatureLayers ,TableViews等要
素的相关属性,包括数据类型、空间参考、字段名称等等。

示例
# 读取lyr文件,并输出lyr文件属性信息
import arcpy
#lyr文件路径
layerString='C:/data/some.lyr’
desc =arcpy.Describe(layerString)
# 打印lyr属性信息
print("Name: {}".format())
if hasattr(desc,"layer"):
print("Layer name: {}".format())
print("Layer data source: {}".format(yer.catalogPath))
print(".lyr file: {}".format(desc.catalogPath)) else:
print("Layer name: {}".format())
print("Layer data source: {}".format(desc.catalogPath))
•arcpy.ListXXX函数
遍历要素类、表格、栅格等数据
-返回结果是一个集合
示例:使用ListFeatureClasses进行批量裁剪
ArcPy 访问GP工具
•导入arcpy包
•按照以下语法调用:
-arcpy.toolname_toolboxalias(arguments)
或者
arcpy.toolboxalias.toolname(arguments)
-需同时包括输入和输出参数
示例
#导入arcpy包
import arcpy
#指定输入参数
roads ="c:/base/data.gdb/roads"
#指定输出参数
output ="c:/base/data.gdb/roads_Buffer"
#传入参数调用GP工具
arcpy.Buffer_analysis(roads,output,"distance","FULL","ROUND","NONE")
ArcPy类
Cursor 游标
Exceptions异常
FeatureSets/
RecordSets要素和记录
ArcPy类
Fields字段信息
General通用类,如数组、env等
Geometry图形类,如点、线、面
Parameter参数类,参数读取和设置
在ArcGIS 中使用NumPy •NumPy-Python中的科学计算包
什么情况下需要使用Python
1.现有工具实现不了,可以用python
2.流程化需要时,可以使用python
3.需求灵活,需要快速试错
优点:便捷、轻量级
3、应用示例
单击此处添加副标题单击此处添加副标题
•示例:
✓矢量数据
✓栅格数据
矢量数据处理都做什么?
统计
过滤
转换变更增删改查
(CRUD)
分析
(A)
派生
•统计每个县不同地块类型的面积
•Python代码•统计结果
•空间数据随即抽取
•坐标串转面
•记录地块权属人变更的要素(字段计算器)
栅格数据处理做什么?
•ArcMap中的Hillshade
•Swiss-Style Hillshade:让高海拔的地方显得更亮,低海拔的地方显得更暗,从而更符合人们的视觉认知。

(1)使用hillshade工具得到默认阴影图,然后使用Focal Statistics工具对默认阴影图进行4*4的邻域统计,取MEDIAN;
(2)将原始DEM的值除以5,再加上默认阴影图的灰度值,从而模拟正射图像的性质,得到更为真实的地形起伏效果;
(3)将结果1叠加在结果2上,设置透明度为35%。

•使用Python生成
ArcMap的HillShade效果新的算法效果
4、扩展内容GDAL 、学习资料
GDAL
●GDAL:GDAL(Geospatial Data Abstraction Library)是一个在X/MIT 许可协议下的开源空间数据转换库●利用抽象数据模型表达所支持的各种文件格式
●提供有一系列命令行工具来进行数据转换和处理
●支持142种栅格数据格式:GeoTIFF,Erdas Imagine,ECW,MrSID,JPEG2000,DTED,NITF,GeoPackage...
●支持84种矢量数据格式:ESRI Shapefile, ESRI ArcSDE, ESRI FileGDB, MapInfo (tab and mid/mif), GML, KML…
●提供了多个语言版本的API,如Python、JAVA、C#等
Python学习资料
●在线学习资料
✓Python:https:///
✓GDAL:/
✓ArcPy(ArcMap):/zh-cn/arcmap/latest/analyze/arcpy/what-is-arcpy-.htm ✓ArcPy(ArcGIS Pro): /zh-cn/pro-app/arcpy/get-started/what-is-arcpy-.htm
✓ArcGIS API for Python:https:///python/
✓ArcGIS 知乎:/
●ArcPy学习书籍:
✓《面向ArcGIS的Python脚本编程》
✓《Programming ArcGIS with Python Cookbook》
✓《ArcPy and ArcGIS –Geospatial Analysis with Python》。

相关文档
最新文档