热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ArcGIS批量栅格重采样(ArcPy方法)

遥感数据处理系列一些项目及科研中遇到的小需求,一方面记录自己的学习历程,另一方面帮助大家学习。本系列文章的开发环境为:ArcGIS10.2.2+Python2.7、ENVI5.3+
遥感数据处理系列

一些项目及科研中遇到的小需求,一方面记录自己的学习历程,另一方面帮助大家学习。本系列文章的开发环境为:ArcGIS 10.2.2 + Python 2.7、ENVI 5.3 + IDL 8.5

ArcGIS批量计算栅格数据平均值(ArcPy方法)
GLDAS数据下载及处理(NC转TIF)
ArcGIS批量裁剪栅格数据
ArcGIS批量栅格重采样(ArcPy方法)

文章目录

  • 遥感数据处理系列
  • 前言
  • 一、栅格数据重采样
    • 1. 原理简介
    • 2. 代码
  • 二、多文件夹场景
  • 总结
      • 后记
前言

多源遥感数据的使用如何快速计算?处理为相同维度的栅格数据,那么,一个NB的批处理脚本派上了用场!祭出ArcPy

一、栅格数据重采样

1. 原理简介

栅格数据重采样主要使用ArcPy的Resample_management函数。

函数使用:

Resample_management (in_raster, out_raster, { cell_size}, { resampling_type})

常用参数简介:

in_raster:想要更改空间分辨率的栅格数据集
out_raster:要创建的数据集的名称、位置和格式
cell_size:使用现有栅格数据集的新栅格的像元大小或指定其宽度 (x) 和高度 (y)
resampling_type:根据待处理数据类型选择相应的重采样方式
NEAREST — 适用于离散数据,例如土地覆被 | 处理速度最快,对像素值的更改最小(常用)
BILINEAR — 适用于连续数据 | 平均化(距离权重)周围 4 个像素的值
CUBIC — 适用于连续数据 | 拟合周围16个像素的平滑曲线
MAJORITY — 适用离散数据 | 赋值像元 3 x 3 窗口中的最高频值

注意:重采样时应根据不同的需求进行插值方式选取,尽量避免对像素值的改变,从而避免对地物光谱信息或分类属性的错解。

2. 代码

输入: 一个含有若干栅格数据的文件夹(本例为“.tif”格式)

输出: 在输出路径文件夹下生成若干tif格式数据

参考像元: 本例为MYD09A1的500m分辨率大小

代码实例:

# -*- coding: UTF-8 -*-
import glob
import os
import arcpy
# 输入路径 应该注意,中文路径,会导致读不出文件
inws = r"F:\Mekong\TIF-8day\2017"
# 参考文件路径 使用栅格数据集(从其导入方形像元大小)的路径
inf = r"H:\MYD09A1\b1\MYD09A1_A2008001.MekongRiver_basin.sur_refl_b01.tif"
cellsize = "{0} {1}".format(arcpy.Describe(inf).meanCellWidth,arcpy.Describe(inf).meanCellHeight)
# 输出路径
outws = r"F:\TIF-8day-re\2017"
# 利用glob包,将inws下的所有tif文件读存放到rasters中
rasters = glob.glob(os.path.join(inws, "*.tif"))
# 循环rasters中的所有影像,进行按掩模提取操作
for raster in rasters:
print str(raster)
nameT = os.path.basename(raster).split(".")[0] + "_re.tif" # 自定义文件名
outname = os.path.join(outws, nameT) # 合并输出文件名+输出路径
arcpy.Resample_management(raster, outname, cellsize, "NEAREST")
print("OK!")

上例可实现对输入路径文件夹下的所有栅格数据的重采样,但多年的数据都需要重采样怎么办?
修改逻辑为进入二级目录、三级目录…然后调用核心函数即可。

二、多文件夹场景

栅格重采样费时、费事、费心思?想挂机处理?Perfect,继续来!

代码如下:

# -*- coding: UTF-8 -*-
import arcpy
import glob
import os
# 输入路径 应该注意,中文路径,会导致读不出文件
inws = r"E:\TIF-8day-glt"
# 参考文件路径 使用栅格数据集(从其导入方形像元大小)的路径
inf = r"J:\MYD09A1\b1\MYD09A1_A2008001.MekongRiver_basin.sur_refl_b01.tif"
cellsize = "{0} {1}".format(arcpy.Describe(inf).meanCellWidth,arcpy.Describe(inf).meanCellHeight)
# 输出路径 需做到输入文件夹组织形式 与 输出文件夹组织形式相同(可进一步自动化,懒)
outws = r"E:\TIF-8day-glt-re"
# 以下逻辑为:
# 获得子目录全路径,并进入子目录
# 执行文件夹批量重采样操作
path_list = os.listdir(inws) # 如果这里是存了三年的数据,那里面有三个文件夹,每个文件夹直接放了每年的数据
target_path_list = os.listdir(outws) # 输出路径,也是里面有三个年份的文件夹
for i in range(len(path_list)):
path = inws + "\\" + path_list[i] # 文件夹列表 # 那这里就得到了年份的路径
target_path = outws + "\\" + target_path_list[i] # 这里,应该是进入了年份的路径,是处理后的数据存放的地方
# 利用glob包,将inws下的所有tif文件读存放到rasters中
rasters = glob.glob(os.path.join(path, "*.tif"))
# 循环rasters中的所有影像,进行重采样操作
for raster in rasters:
print str(raster)
nameT = os.path.basename(raster) + "_re.tif" # 构造 输出文件名
outname = os.path.join(target_path, nameT) # 合并输出文件名+输出路径 = 输出文件全路径
arcpy.Resample_management(raster, outname, cellsize, "NEAREST") # 执行操作
print(path_list[i] + " --- OK!")
print(" --- All project is OK! --- ")
总结

ArcPy牛皮!毕业万岁!中期快乐!
定量遥感中的重采样、按掩膜提取等操作均会对像元值产生一定改变,应注意。尤其是在重采样时,要考虑不同插值方式对结果的影响。

后记

写博客的初衷是分享我的一些经验,同时也方便自己在其他电脑上进行数据处理。帮了很多人,但评论区小伙伴也有遇到问题的,那么:知识付费,我的时间和经验正好可以解决你的问题。
《ArcGIS批量栅格重采样(ArcPy方法)》


推荐阅读
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 从批量eml文件中提取附件的Python代码实现方法
    本文介绍了使用Python代码从批量eml文件中提取附件的实现方法,包括获取eml附件信息、递归文件夹下所有文件、创建目的文件夹等步骤。通过该方法可以方便地提取eml文件中的附件,并保存到指定的文件夹中。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
author-avatar
心上锁退
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有