1. 栅格数据的抽象
GDAL 为我们提供了对数据的统一抽象,方便我们来操作数据,而不用去关心底层文件。下面我们来说明 GDAL 中对于栅格数据的抽象。
文件 = Dataset
Dataset = Bands
Band = Arrays
在 GDAL/OGR 中 gdal 负责栅格部分。所以我们使用 gdal 模块即可。
2. 读取数据以及栅格信息
# 引入 gdal 模块
from osgeo import gdal
# 打开栅格文件
dataset = gdal.Open('test.tif')
# 读取栅格数据,得到一个二维(单波段)或三维(多波段) NumPy 数组
data = dataset.ReadAsArray()
# 坐标系统
projection = dataset.GetProjection()
# 列数
col_count = dataset.RasterXSize
# 行数
row_count = dataset.RasterYSize
# 获取仿射参数
geo_transform = dataset.GetGeoTransform()
# 由 geo_transform 和 col_count、row_count 可算出 extent
3. 写入数据
from osgeo import gdal
# 准备数据
data = gdal.Open('data.tif').ReadAsArray()
# 获取驱动
driver = gdal.GetDriverByName('GTiff')
# 创建数据集
dataset = driver.Create('./out.tif', 800, 600, 4, gdal.GDT_Byte)
# 写入数据
dataset.WriteRaster(0, 0, 800, 600, data.tostring())
4. 编辑数据和属性
使用 ReadAsArray 方法读取的栅格数据是 numpy 数组,所以我们可以通过 numpy 的方法操作数据,然后通过写入方法保存数据即可。