GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。

        Python的GDAL库作为栅格数据的处理转换库,其支持几百种栅格数据格式,如常见的TIFF、ENVI、HFA、HDF4等。因为遥感影像大部分都是栅格数据,所以GDAL库非常适合处理遥感影像、如光谱指数计算、波段合成、批量下载等。

        栅格重采样是一种将栅格数据从一个分辨率变换为另一个分辨率的处理方法。它通常用于将高分辨率数据转换为低分辨率数据,或者将低分辨率数据转换为高分辨率数据。重采样的目的是改变栅格数据的像素大小,使之与目标分辨率相匹配,以便更好地适应不同的分析需求。常见的重采样方法包括最邻近插值、双线性插值、双三次插值等。

1.导入GDAL库

from osgeo import gdal

2.获取参考影像的基本空间信息(宽高、投影信息、仿射地理参数、波段数等)

ds_refer = gdal.Open(path_refer, gdal.GA_ReadOnly)  # 打开数据集dataset
proj_refer = ds_refer.GetProjection() # 获取投影信息
trans_refer = ds_refer.GetGeoTransform() # 获取仿射地理变换参数
band_refer = ds_refer.GetRasterBand(1) # 获取波段
width_refer = ds_refer.RasterXSize # 获取数据宽度
height_refer = ds_refer.RasterYSize # 获取数据高度
bands_refer = ds_refer.RasterCount # 获取波段数

3.打开需要重采样的影像数据,获取其投影信息

ds_resample = gdal.Open(path_resample, gdal.GA_ReadOnly)  # 打开数据集dataset
proj_resample = ds_resample.GetProjection() # 获取输入影像的投影信息

4.注册数据驱动,将参考影像的宽、高、波段数等空间参数写入驱动中,并将仿射地理变换参数和投影信息写入驱动。

driver = gdal.GetDriverByName('GTiff')  # 定义输出的数据资源
ds_output = driver.Create(out_path_resample, width_refer, height_refer, bands_refer, band_refer.DataType) # 创建重采样影像
ds_output.SetGeoTransform(trans_refer) # 设置重采样影像的仿射地理变换
ds_output.SetProjection(proj_refer) # 设置重采样影像的投影信息

5.执行重采样函数,将需要重采样的影像数据按照参考影像的空间参数写入新的栅格数据中。

        在gdal.ReprojectImage函数中输入需要重采样的栅格数据集、输出路径、原始投影信息、目标投影信息、重采样方式、回调函数即可。

gdal.ReprojectImage(ds_resample, ds_output, proj_resample, proj_refer, gdal.GRA_Bilinear, 0.0, 0.0,)
# 输入数据集、输出数据集、输入投影、参考投影、重采样方法(最邻近内插\双线性内插\三次卷积等)、回调函数

6.完整代码:

        所需输入的变量已经在代码中表明,可以自己修改相关路径

def resample_images(path_refer, path_resample, out_path_resample):  # 影像重采样
print("正在进行栅格重采样。。。")
"""
:param path_refer: 重采样参考文件路径
:param path_resample: 需要重采样的文件路径
:param out_path_resample: 重采样后的输出路径
"""
ds_refer = gdal.Open(path_refer, gdal.GA_ReadOnly) # 打开数据集dataset
proj_refer = ds_refer.GetProjection() # 获取投影信息
trans_refer = ds_refer.GetGeoTransform() # 获取仿射地理变换参数
band_refer = ds_refer.GetRasterBand(1) # 获取波段
width_refer = ds_refer.RasterXSize # 获取数据宽度
height_refer = ds_refer.RasterYSize # 获取数据高度
bands_refer = ds_refer.RasterCount # 获取波段数
ds_resample = gdal.Open(path_resample, gdal.GA_ReadOnly) # 打开数据集dataset
proj_resample = ds_resample.GetProjection() # 获取输入影像的投影信息
driver = gdal.GetDriverByName('GTiff') # 定义输出的数据资源
ds_output = driver.Create(out_path_resample, width_refer, height_refer, bands_refer, band_refer.DataType) # 创建重采样影像
ds_output.SetGeoTransform(trans_refer) # 设置重采样影像的仿射地理变换
ds_output.SetProjection(proj_refer) # 设置重采样影像的投影信息
gdal.ReprojectImage(ds_resample, ds_output, proj_resample, proj_refer, gdal.GRA_Bilinear, 0.0, 0.0,)
# 输入数据集、输出数据集、输入投影、参考投影、重采样方法(最邻近内插\双线性内插\三次卷积等)、回调函数

        这里的重采样原理是将需要重采样的数据依据已有数据的格式类型写入新的栅格中,可以解决两个栅格空间位置对不齐,无法进行数组计算的问题。但是否能将栅格数据从高分辨率降低到低分辨率,或是低分辨率到高分辨率,博主无从得知。如果有小伙伴用上诉方法实现了这种操作,可以留言告诉我。

         如果大家在学习Python或者RS时有什么问题,可以随时留言交流!如果大家对批量处理有兴趣同样可以留言给博主,博主会分享相关代码以供学习!

【Python&RS】GDAL对栅格数据重采样/对齐栅格的更多相关文章

  1. Python中使用面状矢量裁剪栅格影像,并依据Value值更改矢量属性

    本文整体思路:在Python中使用Geopandas库,依次读取shp文件的每一个面状要素,获取其空间边界信息并裁剪对应的栅格影像,计算所裁剪影像Value值的众数,将其设置为对应面状要素的NewTY ...

  2. ArcEngine和GDAL读写栅格数据机制对比(一)

    最近应用AE开发插值和栅格转等值线的程序,涉及到栅格读写的有关内容.联想到ArcGIS利用了GDAL的某些东西,从AE的OMD中也发现RasterDataset和RasterBand这些命名和GDAL ...

  3. Python ArcPy批量掩膜、重采样大量遥感影像

      本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件进行批量掩膜与批量重采样的操作.   首先,我们来明确一下本文的具体需求.现有一个存储有大量.tif格式遥感影像的文件夹:且其中除了 ...

  4. Unbuntu 18.04 LTS 环境下Python安装GDAL组件

    Unbuntu 18.04 LTS 环境下Python安装GDAL组件 // 非必要 sudo add-apt-repository ppa:ubuntugis/ppa sudo apt-get up ...

  5. python gdal 读取栅格数据

    1.gdal包简介 gdal是空间数据处理的开源包,其支持超过100种栅格数据类型,涵盖所有主流GIS与RS数据格式,包括Arc/Info ASCII Grid(asc),GeoTiff (tiff) ...

  6. GDAL重投影重采样像元配准对齐

    研究通常会涉及到多源数据,需要进行基于像元的运算,在此之前需要对数据进行地理配准.空间配准.重采样等操作.那么当不同来源,不同分辨率的数据重采样为同一空间分辨率之后,各个像元不一一对应,有偏移该怎么办 ...

  7. Python GDAL读取栅格数据并基于质量评估波段QA对指定数据加以筛选掩膜

      本文介绍基于Python语言中gdal模块,对遥感影像数据进行栅格读取与计算,同时基于QA波段对像元加以筛选.掩膜的操作.   本文所要实现的需求具体为:现有自行计算的全球叶面积指数(LAI).t ...

  8. ArcEngine和GDAL读写栅格数据机制对比(二)—— IPixelBlock读写栅格

    以下是设定一个矩形框,用IPixelBlock将256*256瓦片tile拼接成一个整块影像的代码,row1, col1, row2, col2是一个矩形框行列号范围.level是瓦片的金字塔等级.这 ...

  9. Python 利用GDAL对图像进行几何校正

    原文链接:https://blog.csdn.net/qq_27045589/article/details/81062586 一.几何校正方法 图像校正本质是建立一种从原始图像行列号到某种投影的数学 ...

  10. Centos7.3 编译安装GDAL以及Python的GDAL包

    参考: https://cryolite.iteye.com/blog/176382 https://blog.csdn.net/a13326021319/article/details/782505 ...

随机推荐

  1. salesforce零基础学习(一百一十四)Dynamic related list

    本篇参考: https://help.salesforce.com/s/articleView?id=release-notes.rn_forcecom_lab_dynamic_related_lis ...

  2. Out Of Memory 案例

    案例一:老年代内存泄漏 某晚八点收到报警邮件,一看是OOM: ​ 打开 hickwall查看指标:JVM各项指标中 老年代在持续增长(从上次发布10月30号到11月10号的 12天 一直在增长,存在内 ...

  3. Mybatis模糊查询的两种方式

    第一种 使用 || 字符: ** ** 第二种 使用 CONCAT 函数: ** ** 温馨提醒: 当然你也可以使用 $符 ,但是这种方式会导致不安全,让非法分子有机可寻,轻则数据库瘫痪,重则数据泄露 ...

  4. 修改Win+E映射

    !!!!!!此过程需要修改注册表,请谨慎操作 作用 修改后可以实现Win+E快捷打开任意程序 从原始资源管理器到其它应用 注册表路径: HKEY_CLASSES_ROOT\Folder\shell\o ...

  5. requests发送post请求

    post请求 语法结构 requests.post(url,data = None,json = None) 参数说明 url:需要爬取的网站的网址 data:请求数据 json:json格式的数据 ...

  6. 万字血书Vue—Vuex

    Vuex概述 组件之间共享数据的方式(小范围) 全局事件总线 Vuex是什么? 专门在Vue中实现集中式状态(数据)管理的一个Vue插件,可以方便的实现组件之间的数据共享. 使用Vuex统一管理状态的 ...

  7. ChatGPT3.5使用体验

    优点 1.ChatGPT 能颠覆现有的搜索引擎(百度.谷歌). 2.ChatGPT 的交互体验非常好,满足"智能助手"这种工具. 3.如何使用好ChatCPT? 回到一个经典的问题 ...

  8. CANN训练:模型推理时数据预处理方法及归一化参数计算

    摘要:在做基于Ascend CL模型推理时,通常使用的有OpenCV.AIPP.DVPP这三种方式,或者是它们的混合方式,本文比较了这三种方式的特点,并以Resnet50的pytorch模型为例,结合 ...

  9. python之多线程操作

    线程模块 Python3 通过两个标准库 _thread 和 threading 提供对线程的支持. _thread 提供了低级别的.原始的线程以及一个简单的锁,它相比于 threading 模块的功 ...

  10. Docker介绍下载安装、制作镜像及容器、做目录映射、做端口映射

    在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以 ...