栅格数据处理
关闭栅格数据集
这里显示如何关闭栅格数据集。在脚本的中间非常有用,它可以恢复访问数据集所拥有的资源,删除文件等。在脚本的末尾没有必要,因为Python垃圾收集器会在脚本运行时自动执行相同的操作。脚本退出。
from osgeo import gdal
# 打开数据集
ds = gdal.Open("jianda.tif")
# 关闭数据集
ds = None
获取栅格数据集的元数据
获取栅格元数据以进行快速的分辨率检查
from osgeo import gdal
gtif = gdal.Open("jianda.tif")
print(gtif.GetMetadata())
结果:
{'AREA_OR_POINT': 'Area', 'TIFFTAG_DATETIME': '2020:04:30 11:58:38', 'TIFFTAG_RESOLUTIONUNIT': '2 (pixels/inch)', 'TIFFTAG_SOFTWARE': 'Windows Photo Editor 10.0.10011.16384', 'TIFFTAG_XRESOLUTION': '96', 'TIFFTAG_YRESOLUTION': '96'}
获取栅格数据集的波段
获取栅格数据的波段。注意我们如何处理此函数可能引发的运行时错误。
from osgeo import gdal
import sys
gdal.UseExceptions()
try:
src_ds = gdal.Open("jianda.tif")
except RuntimeError as e:
print("不能打开该文件")
print(e)
sys.exit()
try:
srcband = src_ds.GetRasterBand(10)
except RuntimeError as e:
print("Band not found")
print(e)
sys.exit()
结果:
Band not found
jianda.tif: GDALDataset::GetRasterBand(10) - Illegal band #
遍历所有栅格波段
遍历所有栅格波段并执行一些有用的操作,例如列出波段统计信息。
from osgeo import gdal
import sys
src_ds = gdal.Open("m_4111105_ne_12_060_20180829.tif")
if src_ds is None:
print("Unable to open file")
sys.exit()
print("Raster band cout: ",src_ds.RasterCount)
for band in range(src_ds.RasterCount):
band += 1
print("Getting band:",band)
srcband = src_ds.GetRasterBand(band)
if srcband is None:
continue
stats = srcband.GetStatistics(True,True)
if stats is None:
continue
print("[Stat] : min=%.3f, max=%.3f, mean= %.3f, stdDev=%3.f"%(stats[0],stats[1],stats[2],stats[3]))
结果:
Raster band cout: 4
Getting band: 1
[Stat] : min=11.000, max=229.000, mean= 76.991, stdDev= 57
Getting band: 2
[Stat] : min=24.000, max=223.000, mean= 83.685, stdDev= 38
Getting band: 3
[Stat] : min=34.000, max=225.000, mean= 80.593, stdDev= 23
Getting band: 4
[Stat] : min=1.000, max=225.000, mean= 108.005, stdDev= 81