在Arcgis中利用Python编写脚本批量化处理数据实例

来源:ArcGIS地理信息系统空间分析实验教程(第2版)
工具 :ArcGIS10.2
空间数据的处理常常是复杂而费时的,而且其过程具有很强的重复性,基于窗口的应用程序极大程度上限制了处理数据的能力,有必要进行自动化的处理。任何可以支持COM的脚本语言都可以执行ArcGIS的地理处理工具,如Python、Jscript 和VBSeript等。这些脚本语言都是公开的,而且易学易用,脚本可以将大批量的处理,通过流程化的方式,动态的传人传出参数,达到批量、自动处理数据的目的。

ArcGIS地理信息系统空间分析实验教程(第2版)_汤国安著_随书光盘下载链接
链接:https://pan.baidu.com/s/1L7yMJPXtIBlkFUw7Q2OsUQ
提取码:p5vt

利用Python创建脚本文件
1单数据处理
所谓单数据处理,是指处理过程中只涉及到单个数据集的处理,数据可以是Geo-database中的要素类、栅格数据集、ArcView 的shapefile,也可以是Arc/Info的cov-erage等。下面以从DEM中自动提取坡度小于15°的栅格为例。

(1)编写脚本:

#导入arcpy模块
import arcpy
#查看任何必要的许可证
arcpy.CheckOutExtension("spatial")
#脚本参数
InPutData = arcpy.GetParameterAsText(0)
OutPutData = arcpy.GetParameterAsText(1)
if OutPutData == '#' or not OutPutData:
    OutPutData = "C:\\Users\\yws31415926\\Documents\\ArcGIS\\Default.gdb\\LessTha_Slop1" 
#此处加载的模型因安装ESRI系统的磁盘位置不同而不同
#Local variables: 定义变量
InputDataOrConst = "15"
#Slope 坡
OutSlope = "D:\\1\\Chp12\\tutor2\\result\\Slope15"
# Process:计算坡度
arcpy.gp.Slope_sa(InPutData, OutSlope, "DEGREE", "1")
#Process:坡度小于15度
arcpy.gp.LessThan_sa(OutSlope, InputDataOrConst, OutPutData)

注意:路径中不要有中文,
(2)添加script
右击【工具箱】中的【我的工具箱】新建【工具箱】
右键 新建的【工具箱】添加 【脚本】。得到如下图。
新建工具箱
双击【脚本】 设置名称,下一步
脚本

选择脚本文件,下一步。
在这里插入图片描述
输入要素,完成。

在这里插入图片描述
在这里插入图片描述
双击【脚本】
在这里插入图片描述
设置路径,确定。
在这里插入图片描述
执行脚本得到结果如下。
在这里插入图片描述
得到结果如下图。其中绿松色为坡度大于15°的区域,紫色为坡度小于15°的

在这里插入图片描述
原数据图。
在这里插入图片描述

2.批处理
所谓批处理就是成批处理文件或操作,是一次操作多个相同格式数据的过程。脚本提供了一种便捷的方式用于批处理,只要在脚本中加入循环语句即可.下面以两幅DEM提取坡度为例说明在Python中的实现过程。其中DEM数据存储在随书光盘… \ Chp12 \ tutor3 \ DEM\中,分别为dem50和dem100。结果存储在… .\ Chp12 \ tutor3 \ result\目录中,脚本文件为… \ Chpl2\ tutor3 \ batch1.py.。
代码如下:

# 导入arcpy模型
import arcpy
# 加载变量
# 数据文件所在的路径
Raster1= "D:\\1\\Chp12\\tutor3\\DEM\\"
# 数据输出所在的路径
OutPutData="D:\\1\\Chp12\\tutor3\\result"
# 数据文件名称
names=['DEM50','DEM100']
for k in names:
    # 源文件名称
    InputData= Raster1+k
    # 输出文件名称
OutputData= OutPutData+"slope"
# 执行处理过程
arcpy.gp.Slope_sa(InputData,OutputData, "DEGREE", "1")	

右键单击[工具箱],选择[添加]下的[脚本]命令。右键单击[脚本],选择[属性]命令,在弹出的对话框中输人名字、标签、描述、风格等信息,单击[下一步]按钮;浏览到所要选择运行的脚本,单击[吓一步]按钮。由于是批处理不需要设置参数,单击[确定]。双击[脚本]图标号,运行程序。

3.Python脚本应用实例

通过使用Python的逻辑控制语句,可以实现基于ArcPy的自动处理应用,用户通过ArcGIS自带的程序IDE,打开对应的.py文件,直接按F5即可运行该脚本。下面以实现批量Raster栅格到ASCII文本的脚本文件为例,演示Python的应用,读者可以将其存储为convert. py后运行。本实验的数据存放在… \ Chp12 \ tutor3 \ DEM\中,分别为dem50和dem100.结果存储在… \ Chp12 \ tutor4\ result\目录中,脚本文为… \ Chp12 \ tutor4 \ convert.py.

# 导入系统模型
import arcpy
# 加载所需的工具箱
arcpy.gp.AddToolbox("D:/program安装/arcgis/Desktop10.2/ArcToolbox/Toolboxes/Conversion Tools.tbx")
 # 模型随着系统安装ArcGIS的位置不同而不同
# 输出的数据文件所在路径
OutPutData="D:\\1\\Chp12\\tutor4\\result"
# 数据文件名称
names=['DEM50','DEM100']
for k in names:
 # 源文件名称
 Raster1 = "D:\\1\\Chp12\\tutor3\\DEM"
 # 输出文件名称
 Raster1_txt= OutPutData+k+".txt"
 # 执行处理过程
arcpy.gp.ASCIIToRaster_conversion(Raster1_txt, names, "FLOAT")

执行如2个一样

遇到问题:
问题1:
ExecuteError:执行失败。参数无效。
ERR0R 000878: 输出栅格: 【路径】 中格网基本名称的长度超过了13。
执行(Slope)失败。
原因:
在这里插入图片描述
解决方式:将输出文件名改短一些

有关ArcPy参考文档地址:
https://desktop.arcgis.com/zh-cn/arcmap/latest/analyze/arcpy/what-is-arcpy-.htm

  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值