GDAL栅格数据处理
- 栅格数据介绍
- 栅格数据读取
- 读取部分数据集
- 坐标变换
- 重采样
什么是栅格数据
- 基本上是一个大的二维或三维数组
- 没有独立的几何对象,只有像素的集合
- 二维:黑白图片
- 三维:彩色/假彩色,多光谱/高光谱
- 可以存储几乎任何类型的数据
- 体积比较大
- 应用场景:遥感、气象、水文、农业、海洋……
栅格数据都能存储什么?
- 高程、坡度、坡向
- 温度、风速、降水、蒸发
- 可见光、近红外、微波等遥感数据
栅格数据小知识
- 栅格数据的仿射变换与几何校正:通过一组坐标,像素的大小和数据集的旋转量
- 存储空间:双精度浮点数>单精度浮点数>整数>无符号整数
- 概视图:递减分辨率,用于大数据快速显示
- 有损压缩与无损压缩:地理科学数据应使用无损压缩
GDAL数据集的基本结构
栅格数据读取
driver.Create(filename, xsize, ysize, [bands], [data_type], [options])
- filename: 文件名,创建一个新文件
- xsize: x方向,列数
- ysize: y方向,行数
- bands: 波段数,默认值为1,从1开始(不是从0开始)
- data_type: 数据类型,默认为GDT_Byte(8位无符号整型)
- options: 其它选项,按数据类型而有所不同
GDAL支持的数据类型
# 导入gdal,注意导入的名称import osfrom osgeo import gdal #或者直接用import gdalfrom matplotlib import pyplot as pltimage_data_dir = 'D:\BaiduNetdiskDownload\Landsat\Washington'
# Be sure to change your directory.# 切换当前路径os.chdir(image_data_dir)band1_fn = 'p047r027_7t20000730_z10_nn10.tif'band2_fn = 'p047r027_7t20000730_z10_nn20.tif'band3_fn = 'p047r027_7t20000730_z10_nn30.tif'
# 打开波段1(注意这里是从1开始数)# Open band 1.in_ds = gdal.Open(band1_fn)# 用索引1,而不是0,来获取第一个波段in_band = in_ds.GetRasterBand(1)plt.imshow(in_band.ReadAsArray(),cmap='gray')
# Create a 3-band GeoTIFF with the same dimensions, data type, projection,# and georeferencing info as band 1. This will be overwritten if it exists.# 使用驱动对象来创建数据集,因为使用的是GeoTIFF驱动,无论给它任何扩展名,输出的文件都是GeoTIFFgtiff_driver = gdal.GetDriverByName('GTiff')out_ds = gtiff_driver.Create('nat_color.tif', in_band.XSize, in_band.YSize, 3, in_band.DataType)# 重要:获取空间信息# 第一句:得到投影(SRS)并复制到新的数据集# 第二句:得到geotransform信息并复制到新的数据集# 两者的信息都很重要。# 前者与矢量数据类似,包含有完整的空间参考信息;# 后者提供原始坐标、像素大小、旋转值,是栅格数据独有的out_ds.SetProjection(in_ds.GetProjection())out_ds.SetGeoTransform(in_ds.GetGeoTransform())
0
print(out_ds.GetProjection())
PROJCS["WGS 84 / UTM zone 10N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG"