【Python&RS】GDAL对栅格数据重采样/对齐栅格
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对栅格数据重采样/对齐栅格的更多相关文章
- Python中使用面状矢量裁剪栅格影像,并依据Value值更改矢量属性
本文整体思路:在Python中使用Geopandas库,依次读取shp文件的每一个面状要素,获取其空间边界信息并裁剪对应的栅格影像,计算所裁剪影像Value值的众数,将其设置为对应面状要素的NewTY ...
- ArcEngine和GDAL读写栅格数据机制对比(一)
最近应用AE开发插值和栅格转等值线的程序,涉及到栅格读写的有关内容.联想到ArcGIS利用了GDAL的某些东西,从AE的OMD中也发现RasterDataset和RasterBand这些命名和GDAL ...
- Python ArcPy批量掩膜、重采样大量遥感影像
本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件进行批量掩膜与批量重采样的操作. 首先,我们来明确一下本文的具体需求.现有一个存储有大量.tif格式遥感影像的文件夹:且其中除了 ...
- Unbuntu 18.04 LTS 环境下Python安装GDAL组件
Unbuntu 18.04 LTS 环境下Python安装GDAL组件 // 非必要 sudo add-apt-repository ppa:ubuntugis/ppa sudo apt-get up ...
- python gdal 读取栅格数据
1.gdal包简介 gdal是空间数据处理的开源包,其支持超过100种栅格数据类型,涵盖所有主流GIS与RS数据格式,包括Arc/Info ASCII Grid(asc),GeoTiff (tiff) ...
- GDAL重投影重采样像元配准对齐
研究通常会涉及到多源数据,需要进行基于像元的运算,在此之前需要对数据进行地理配准.空间配准.重采样等操作.那么当不同来源,不同分辨率的数据重采样为同一空间分辨率之后,各个像元不一一对应,有偏移该怎么办 ...
- Python GDAL读取栅格数据并基于质量评估波段QA对指定数据加以筛选掩膜
本文介绍基于Python语言中gdal模块,对遥感影像数据进行栅格读取与计算,同时基于QA波段对像元加以筛选.掩膜的操作. 本文所要实现的需求具体为:现有自行计算的全球叶面积指数(LAI).t ...
- ArcEngine和GDAL读写栅格数据机制对比(二)—— IPixelBlock读写栅格
以下是设定一个矩形框,用IPixelBlock将256*256瓦片tile拼接成一个整块影像的代码,row1, col1, row2, col2是一个矩形框行列号范围.level是瓦片的金字塔等级.这 ...
- Python 利用GDAL对图像进行几何校正
原文链接:https://blog.csdn.net/qq_27045589/article/details/81062586 一.几何校正方法 图像校正本质是建立一种从原始图像行列号到某种投影的数学 ...
- Centos7.3 编译安装GDAL以及Python的GDAL包
参考: https://cryolite.iteye.com/blog/176382 https://blog.csdn.net/a13326021319/article/details/782505 ...
随机推荐
- springboot格式化timestamp时间
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
- Solr 入门配置
大多数搜索引擎应用都必须具有某种搜索功能,问题是搜索功能往往是巨大的资源消耗,并且它们由于沉重的数据库加载而拖垮你的应用的性能.这就是为什么转移负载到一个外部的搜索服务器是一个不错的注意,Apache ...
- Java面试——写一个生产者与消费者
更多内容,前往个人博客 一.通过synchronize 中的 wait 和 notify 实现 [1]我们可以将生产者和消费者需要的方法写在公共类中 1 package com.yintong.con ...
- 全面了解 Redis 高级特性,实现高性能、高可靠的数据存储和处理
目录 高性能.高可用.高可扩展性的原理 持久化 RDB持久化 AOF持久化 持久化的配置 RDB配置 AOF配置 持久化的恢复 RDB的恢复 AOF的恢复 RDB和AOF的选择 持久化对性能的影响 数 ...
- 记一次 .NET 某传感器采集系统 线程爆高分析
一:背景 1. 讲故事 前段时间有位朋友微信找到我,说他的程序使用 hsl 库之后,采集 plc 时内存溢出,让我帮忙看一下怎么回事,哈哈,貌似是分析之旅中的第二次和 hsl 打交道,既然找到我,那就 ...
- odoo 开发入门教程系列-约束(Constraints)
约束(Constraints) 上一章介绍了向模型中添加一些业务逻辑的能力.我们现在可以将按钮链接到业务代码,但如何防止用户输入错误的数据?例如,在我们的房地产模块中,没有什么可以阻止用户设置负预期价 ...
- servlet 没有实例化可以直接调用非静态方法??
今天练习servlet时,居然发现没有实例化可以直接调用非静态方法.看了好长时间发现:省去了this关键字.记录一下. public class Servlet2 extends GenericSer ...
- day110:MoFang:重新构造用户关系状态&添加好友&处理好友申请&获取申请好友历史记录&好友列表显示
目录: 1.用户关系状态:重新构造 2.添加好友 3.处理好友申请 4.获取申请好友历史记录 5.好友列表 day109+day110所学内容流程图 1.用户关系状态:重新构造 在day109博客的前 ...
- Java中方法的定义和使用
方法的定义和使用 注意事项: 1.方法与方法之间是 平级关系 不可以嵌套定义 2.方法的位置 可以在类{}中任意位置 3.方法定义之后 之后被调用 才能被执行 4.return 关键字的作用 返回关 ...
- Job for nginx.service failed because the control process exited with error code.
1. nginx启动报错: Job for nginx.service failed because the control process exited with error code. See & ...