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. SICP:求值和环境模型(Python实现)

    绪论 我们在第一章引进复合过程时,采用了求值的代换模型定义了将过程应用于实参(arguments)的意义: 将一个复合过程应用于一些实参,也就意味着用实参替换过程体里对应的形参(formal para ...

  2. 传参base64时的+号变空格问题

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明. 问题发生 上上周,看到一位老哥找我们组同事联调接口,不知道是什么问题,两人坐一起搞了快1个小时,看起来好像有点复 ...

  3. 用python的pylab画wave波形之sampwidth问题

    问题 网上找了好多地方,核心代码都是一样的,比如这句. wavedata=np.fromstring(bindata,dtype=np.short) 效果也还行. 可一次随机加载了一个Office里的 ...

  4. Python 中 is 和 == 的区别

    is 和 == 的区别 相信学过 Python 小伙伴们都知道 is 和 == 都是用来比较 Python 对象的,但是区别就是 is 比较需要对象的值和内存地址都相等 == 比较只需要对象的值相等就 ...

  5. 2023年这个星球共同话题chatgpt,火爆全球的chatgpt到底是啥?会抢谁的饭碗?如何避免沦为ChatGPT时代的废物

    2023年初到现在这个星球人人谈chatgpt,火爆全球的#chatgpt 到底是啥?会抢谁的饭碗?如何避免沦为ChatGPT时代的废物 ChatGPT的横空出世迅速点燃了外界的关注.推出仅两个月后, ...

  6. VUE插值语法

    目录 基本使用 基本使用 在body中创建一个标签,一般使用div,定义好id后,在script中进行定义,在前台使用{{变量}}的形式进行调用,语法如下: <!DOCTYPE html> ...

  7. 二进制安装Kubernetes(k8s) v1.26.1 IPv4/IPv6双栈 可脱离互联网

    二进制安装Kubernetes(k8s) v1.26.1 IPv4/IPv6双栈 可脱离互联网 https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star ...

  8. python内在模块之winreg --- Windows 注册表访问

    winreg --- Windows 注册表访问¶ 这些函数将 Windows 注册表 API 暴露给 Python.为了确保即便程序员忽略了显式关闭句柄,该句柄依然能够正确关闭,它使用了一个 han ...

  9. [灾备]独立磁盘阵列(RAID)技术

    本文是对3个月前临时出差前往客户现场,安装交付我司大数据产品时使用的一项硬件级的灾备技术的简要复盘. 1 独立磁盘阵列--RAID:概述 1.1 定义 RAID := Redundant Arrays ...

  10. [大数据]Hadoop简述

    1 Hadoop:发展沿革 摘要:1个人(Doug Cutting).2个公司(Google.Cloudera) 1.1 渊源 Hadoop项目 最初开发者/创始者: Doug Cutting(道格· ...