大数跨境
0
0

使用Python和GDAL处理遥感影像数据超详细教程

使用Python和GDAL处理遥感影像数据超详细教程 Ai尚研修
2025-09-20
177
导读:关注Ai尚研修公众号加星标🌟,不错过每一次学术干货!
课程安排
9月27日-28日

破“卷”立新-国自然/省级基金项目撰写技巧全流程实战

9月25日-26日

AI赋能·SCI论文从实验设计到发表全流程实践训练营

10月24日-25日、
31日-11月1日
高水平学术论文写作的“破局”之道暨AI支持下的高分SCl论文前期准备、写作、高质量图表制作、投稿技巧一站式提升高级培训班

9月20日-21日、

26日-27日

一图胜千言-顶刊级科研绘图工坊暨AI支持下Nature级数据可视化高级培训班

10月17日-18日、

24日-25日

全链路自主构建智慧科研写作系统——融合LLM语义理解、多智能体任务协同与n8n自动化工作流构建培训班

10月17日-18日、24日-25日

AI智慧高光谱遥感实战精修班暨手撕99个案例项目、全覆盖技术链与应用场景一站式提升方案

本文介绍使用 Python 和地理空间数据抽象库 GDAL 自动处理栅格数据的基本技术。栅格文件广泛用于存储地形模型、遥感数据及其衍生产品(如植被指数等),通常数据量大且以分块形式存储,因此高效处理依赖自动化流程。内容涵盖如何通过 Python 的 GDAL/OGR API 及命令行工具实现栅格数据的读写与批量处理。

一、使用 GDAL 在 Python 中打开栅格文件

GDAL 支持多种栅格格式(如 GeoTIFF、ASCII Grid、Erdas Imagine 等)的读写操作。导入 osgeo.gdal 后,系统自动注册所有支持的驱动程序。

Landsat 8 数据中的各波段以独立 GeoTIFF 文件存储,每个波段对应不同电磁波谱范围的地表反射率信息。

from osgeo import gdal
filepath = r"LandsatData/LC81910182016153LGN00_sr_band4.tif"
# 打开文件
raster = gdal.Open(filepath)
type(raster)

1. 读取栅格文件属性

GDAL 数据集对象包含投影、尺寸、波段数和元数据等关键信息:

# 投影信息
raster.GetProjection()
# 图像维度
raster.RasterXSize, raster.RasterYSize
# 波段数量
raster.RasterCount
# 元数据
raster.GetMetadata()

2. 获取栅格波段

通过 GetRasterBand() 方法获取指定波段对象:

# 读取第一个波段
band = raster.GetRasterBand(1)
type(band)
# 获取数据类型
gdal.GetDataTypeName(band.DataType)

当多个波段集成在一个文件中时,RasterCount 大于 1;若为单文件单波段(如 Landsat 8 原始包),则需分别加载。

3. 波段统计信息

计算并输出波段的最小值、最大值及 NoData 值:

# 若未计算统计值,则执行计算
if band.GetMinimum() is None or band.GetMaximum() is None:
    band.ComputeStatistics(0)
    print("Statistics computed.")
print("[ NO DATA VALUE ] = ", band.GetNoDataValue())
print("[ MIN ] = ", band.GetMinimum())
print("[ MAX ] = ", band.GetMaximum())

二、将栅格文件作为数值数组读取

为便于进行数学运算,可将 GDAL 数据转换为 NumPy 数组,利用其强大的计算能力。

# 将 GDAL 数据集转为 NumPy 数组
rasterArray = raster.ReadAsArray()
type(rasterArray), type(raster)

raster 为 GDAL 数据集对象,rasterArray 为 NumPy 数组,适用于后续分析。

也可通过 gdal_array 模块直接读取:

from osgeo import gdal_array
rasterArray = gdal_array.LoadFile(filepath)

1. 处理 NoData 值

NoData 值会影响计算结果,建议使用掩膜数组排除干扰:

import numpy as np
nodata = band.GetNoDataValue()
rasterArray = np.ma.masked_equal(rasterArray, nodata)
rasterArray.min()

2. 关闭栅格数据释放资源

及时释放内存资源:

raster = None
band = None

三、GDAL 命令行实用工具

GDAL 提供多个命令行工具用于高效批处理,包括 gdalwarp、gdal_merge.py 和 gdal_calc.py。

1. 使用 gdalwarp 裁剪图像

基于边界框裁剪影像:

gdalwarp -te xmin ymin xmax ymax inputfile.tif outputfile.tif

可通过 Python 脚本生成批量裁剪命令,并保存为 shell 或 bat 文件执行:

import glob, os
FileList = glob.glob(os.path.join(r'/home/geo/LandsatData', '*band*.tif'))
xmin, ymin, xmax, ymax = (0, 0, 0, 0)  # 替换为实际坐标
command = ""
for fp in FileList:
    inputfile = fp
    outputfile = inputfile[:-4] + "_clip.tif"
    command += "gdalwarp -te %s %s %s %s %s %s \n" % (xmin, ymin, xmax, ymax, inputfile, outputfile)

with open("ClipTurkufromLandsat.sh", 'w') as f:
    f.write(command)

在终端运行:bash ClipTurkufromLandsat.sh(Windows 用户使用 .bat 文件)。

2. 使用 gdal_merge.py 合成波段堆栈

将裁剪后的绿、红、近红外波段合并为假彩色图像:

import os
inputfiles = "band3_clip.tif band4_clip.tif band5_clip.tif"
outputfile = "Landsat8_GreenRedNir.tif"
command = "gdal_merge.py -separate %s -o %s" % (inputfiles, outputfile)
os.system(command)

3. 使用 gdal_calc.py 进行栅格计算

gdal_calc.py 是命令行栅格计算器,支持简单表达式运算:

gdal_calc.py -A input1.tif -B input2.tif --calc="A+B" --outfile=output.tif --co="COMPRESS=LZW"

参数说明:

  • --calc:定义计算公式(如 A+B、A*B)
  • --co="COMPRESS=LZW":压缩输出文件,节省空间

版权声明:本文内容整理自【倾城一少】原创文章,原文链接:https://blog.csdn.net/u010329292/article/details/128343521,仅作学术分享,版权归原作者所有,涉及侵权请联系我们删除。

AI多领域融合课程、论文写作、科研绘图、语言类
10月24日-25日、
31日-11月1日
高水平学术论文写作的“破局”之道暨AI支持下的高分SCl论文前期准备、写作、高质量图表制作、投稿技巧一站式提升高级培训班

9月25日-26日

AI赋能·SCI论文从实验设计到发表全流程实践训练营

9月20日-21日、

27日-28日

GeoAI大模型驱动的地球科学智能计算前沿实践研修班

9月27日-28日

破“卷”立新-国自然/省级基金项目撰写技巧全流程实战

10月17日-18日、24日-25日

全链路自主构建智慧科研写作系统——融合LLM语义理解、多智能体任务协同与n8n自动化工作流构建培训班

9月20日-21日、

26日-27日

一图胜千言-顶刊级科研绘图工坊暨AI支持下Nature级数据可视化高级培训班

10月10日-13日

2025最新AI-Python机器学习与深度学习实践技术应用培训班

10月15日-16日、
22日-23日
2025最新Transformer模型及深度学习前沿技术应用

10月17日-18日、24日-25日

AI智慧高光谱遥感实战精修班暨手撕99个案例项目、全覆盖技术链与应用场景一站式提升方案

农林生态、遥感、大气科学

9月26日-28日

2025最新AI+CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析高级培训班

10月18日-19日、

24日-26日

AI赋能Python-GEE遥感云大数据分析、可视化与Satellite Embedding创新应用高级培训班

10月18日-19日、

25日-26日

2025年最新AI与Python在地球科学多源数据交叉融合中的前沿技术应用高级培训班

10月18日-19日、25日-26日

AI+Python驱动的无人机生态三维建模与碳储/生物量/LULC估算全流程实战技术培训班

10月24日-27日

最新HYDRUS全模块进阶应用:土壤–水–污染物耦合模拟案例精讲培训班

10月18日-19日、24日-26日

双碳目标下基于“遥感+”集成技术的碳储量、碳排放、碳循环、温室气体等多领域监测与模拟实践高级培训班

水文水资源、地质、遥感、测量

9月13日-15日、

19日-21日

地表水-地下水耦合建模全景解析暨SWAT-MODFLOW地表与地下协同模拟及多情景专题应用培训班

10月18日-19日、

25日-26日

全流程GMS地下水数值模拟及溶质(包含反应性溶质)运移模拟技术深度应用

声明:本号对所发布内容保持中立,如有侵权或不实信息,请联系后台及时撤改。

【声明】内容源于网络
0
0
Ai尚研修
1234
内容 2377
粉丝 0
Ai尚研修 1234
总阅读13.0k
粉丝0
内容2.4k