wordpress国外主题加速官方正版清理优化工具
注:图片来源于公众号,公众号也是我自己的。
ArcMap中的python编辑器是很多本科生使用ArcMap时容易忽略的一个工具,本人最近正在读一本书《ArcGIS Python 编程基础与应用》,在此和大家分享、交流一些相关的知识。
这篇文章主要分享一下以按掩膜提取为例的栅格数据的批量处理。当数据量比较少的时候,栅格数据的裁剪可以通过 ArcToolbox -- 提取分析 -- 按掩膜提取的功能进行。如下图:
但是如果需要处理的数据很多,也就是批量处理栅格数据,再手动处理就显得比较低效了。这个时候就需要用到 Python编辑器,利用程序批量处理。下面我将简单介绍一下实现代码以及相关原理:
1.代码内容
>>> import arcpy
... from arcpy import env
... from arcpy.sa import *
...
>>> arcpy.CheckOutExtension("Spatial")
# 系统会输出:u'CheckedOut'
>>>
>>> env.workspace = 'D:/competition data/2001-2023 China_MOD17A3H(NPP) data'
>>> rs = arcpy.ListRasters("*", "TIF")
>>> for r in rs:
... outExtractByMask = ExtractByMask(r, "重庆市范围.shp")
... outExtractByMask.save('D:/competition data/tmpcode' + r + "_mask.tif")
2.分步讲解
1.导入Arcpy库和对应的模块
>>> import arcpy
... from arcpy import env
... from arcpy.sa import *
ArcGIS中很多操作对应的函数都在Arcpy库中,所以使用Python写代码时基本上都要导入Arcpy库。而ExtractByMask函数是 ArcGIS Spatial Analyst 扩展的一部分,所以需要单独带入模块。
2.检查并启用Spatial Analyst扩展
>>> arcpy.CheckOutExtension("Spatial")
# 点击回车键之后会输出:u'CheckedOut'
3.设置工作空间
# 设置工作空间
env.workspace = r'D:\competition data\2001-2023 China_MOD17A3H(NPP) data'
设置工作空间相当于打开需要操作的批量文件的文件夹,这里我有2001~2023年中国NPP的栅格数据,放在 competition data 文件夹下。同时我也把输出栅格数据或要素掩膜数据(重庆的范围)放在了同一个文件夹下。
4.列出工作空间所有TIF格式的栅格数据(如果是其他类型就改成其他的数据类型)以及使用循环批量处理栅格数据。
rs = arcpy.ListRasters("*", "TIF")# 循环遍历栅格数据,并进行按掩膜提取操作
for r in rs:# 使用ExtractByMask函数进行掩膜提取# 确保"重庆市范围.shp"文件位于工作空间目录下,或者提供完整的路径outExtractByMask = ExtractByMask(r, r'D:\competition data\2001-2023 China_MOD17A3H(NPP) data\重庆市范围.shp')# 保存提取后的栅格数据# 确保输出路径存在,或者使用arcpy环境变量指定输出路径output_path = r'D:\competition data\tmpcode'arcpy.env.overwriteOutput = True # 允许覆盖同名文件outExtractByMask.save('D:/competition data/tmpcode' + "\\" + r + "_mask.tif")
3.操作截图
1.Python操作台
2.输入数据
3.输出数据
在看这本书的时候我还在思考ArcGIS内置Python的作用以及学习的方法,这本书更像是工具,里面复杂的函数及参数等不可能每一个都记住,所以本人认为将这本书作为工具,加上人工智能的辅助,只要有Python的基础就可以利用编程完成较为复杂的任务。
我也会继续分享学习经历,欢迎各位GISer交流、指导。