柵格數據處理
關閉柵格數據集
這裏顯示如何關閉柵格數據集。在腳本的中間非常有用,它可以恢復訪問數據集所擁有的資源,刪除文件等。在腳本的末尾沒有必要,因爲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