前言

我在之前的博客园博客里,阐述了如何编写Arcpy脚本,如何利用Windows bat批处理脚本同时打开多个cmd窗口,以实现并行处理,提高数据处理效率。但是上述博客仍然存在着:1、需要编写多个Arcpy脚本;2、参数修改麻烦。最近做了一些修改,解决了上述问题。现进行分享。

Arcpy脚本

借鉴知乎批处理教程,脚本分为运行参数准备函数定义、Arcpy掩膜提取函数定义、循环实现三大部分。

导入库

import arcpy
from arcpy.sa import *
import time, os, glob, sys

函数定义

首先定义运行参数准备函数,将所有输入输出参数存储到一个嵌套列表中,方便掩膜提取函数调用。然后定义掩膜提取函数。

# 函数用于准备掩膜提取工具运行参数
def pre_parameter(inpath, outpath, mask):
parameters = []
infiles = glob.glob("*.tif") for infile in infiles:
inRaster = infile
inMaskData = mask
outRaster = os.path.join(outpath, infile)
parameter = [inRaster, inMaskData, outRaster]
parameters.append(parameter)
return parameters # Arcpy函数掩膜提取
def Extract_by_Mask(Parameter):
# Set local variables
inRaster = Parameter[0]
inMaskData = Parameter[1]
outRaster = Parameter[2]
# Execute ExtractByMask
outExtractByMask = ExtractByMask(inRaster, inMaskData)
# Save the output
outExtractByMask.save(outRaster)
print(outRaster, 'has finshed')

循环实现

利用sys.argv语句获取命令行输入的参数,调用pre_parameter函数生成掩膜提取函数运行参数列表。然后利用for循环,根据start与end处理特定文件数。通过多个cmd窗口打开多个脚本分别运行,便可以同时处理多个文件,提高效率。本例中,若只运行一个脚本需要70多个小时,同时运行7个脚本只需要10个小时左右。

inpath = os.path.abspath(sys.argv[1])
outpath = os.path.abspath(sys.argv[2])
inf = os.path.abspath(sys.argv[3]) # 掩膜文件,可以是shp或者raster
# 这里根据处理的文件数量改动,可以分几部分打开多个shell运行多个脚本提高速度
start = int(sys.argv[4])
end = int(sys.argv[5]) os.chdir(inpath) # Set the current workspace
arcpy.env.workspace = (inpath)
# Set the snapRaster
arcpy.env.snapRaster = (inf)
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial") para = pre_parameter(inpath, outpath, inf) StartTime = time.time()
print('start Mask from %d to %d'%(start, end)) for i in range(start, end):
time1 = time.time()
Extract_by_Mask(para[i])
time2 = time.time()
print(i, 'has finished! costed ' + str(time2 - time1) + ' Seconds...',) EndTime = time.time()
print('Elapsed: ' + str(EndTime - StartTime) + ' Seconds...')

批处理(.bat)脚本

第一句要设置为你的Arcpy python.exe所在完整路径。要完全按照顺序依次输入: inpath(输入路径), outpath(输出路径), inf(掩膜文件), start(第一个处理文件的编号), end(最后一个处理文件的编号)

命令的具体含义请参考参考这篇博客

:: change your work folder to the path of arcpy
cd/d D:\Python27\ArcGIS10.4
:: open some cmd and run the script
start cmd /k python.exe C:\Users\xxx\Desktop\Mask\Extract_by_Mask.py "C:/Users/xxx/Desktop/NW" "C:/Users/xxx/Desktop/NW/test" "C:/Users/xxx/Desktop/NW/mask.shp" 0 5
:: time delay
choice /t 5 /d y
start cmd /k python.exe C:\Users\xxx\Desktop\Mask\Extract_by_Mask.py "C:/Users/xxx/Desktop/NW" "C:/Users/xxx/Desktop/NW/test" "C:/Users/xxx/Desktop/NW/mask.shp" 5 10
choice /t 5 /d y
start cmd /k python.exe C:\Users\xxx\Desktop\Mask\Extract_by_Mask.py "C:/Users/xxx/Desktop/NW" "C:/Users/xxx/Desktop/NW/test" "C:/Users/xxx/Desktop/NW/mask.shp" 10 16

以上思路或许还有更加优秀的解决办法,欢迎牛人大佬朋友下方留言交流。

最新文章

  1. Git 进阶指南
  2. TCPDF 6.0.036 发布,PHP 的 PDF 操作包
  3. 通过mongodb客户端samus代码研究解决查询慢问题
  4. ggplot绘图学习笔记
  5. hihoCoder挑战赛14 -1223
  6. eWebeditor编辑器上传图片的设置程序
  7. Oracle ->> 随机函数
  8. 使用GDB生成coredump文件【转载】
  9. 记reinforcement learning double DQNS
  10. java结合testng,利用mysql数据库做数据源的数据驱动实例
  11. PKUWC2019垫底记
  12. JavaScript实现全屏显示
  13. DER、CRT、CER、PEM格式的证书及转换
  14. Linux 命令之mv
  15. debezium sql server 集成
  16. mysql之pymsql的使用
  17. 主席树初步学习笔记(可持久化数组?静态区间第k大?)
  18. sql 中延时操作
  19. Zabbix监控PostgreSQL
  20. Expression表达式树 案例

热门文章

  1. 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPushConsumer的实现原理及源码分析
  2. Jetpack架构组件学习(2)——ViewModel和Livedata使用
  3. [CF707 Div2, A ~ D]
  4. JOI 2020 Final 题解
  5. 【基因组组装】HiC挂载Juicebox纠错补充
  6. Linux Alpine安装 Nginx
  7. R语言与医学统计图形-【30】流行病学数据可视化
  8. SQL-join(inner join)、left join、right join、full join
  9. Redis源码解析(1)
  10. 亿级Web系统搭建:单机到分布式集群