python使用栅格计算器

  重采样是指根据一类象元的信息内插出另一类象元信息的过程。在遥感中,重采样是从高分辨率遥感影像中提取出低分辨率影像的过程。常用的重采样方法有最邻近内插法、双线性内插法和三次卷积法内插。
  ReadAsArray函数可以重采样读取的数据,并且指定输出缓冲区大小或传递一个已有的缓冲区数组。

band.ReadAsArray([xoff], [yoff], [win_xsize], [win_ysize], [buf_xsize], [buf_ysize], [buf_obj])

xoff是开始阅读的专栏,默认值为0。
yoff是开始阅读的行,默认值为0。
win_xsize是要读取的列数,默认为全部读取。
win_ysize是要读取的行数,默认为全部读取。
buf_xsize是输出数组中的列数,默认值为使用win_xsize的值。
buf_ysize是输出数组中的行数,默认值为使用win_ysize的值。
buf_obj是一个NumPy数组,用于将数据放入其中,而不是创建一个新数组。如果需要,数据将被重新采样以适合此数组,对应的值也将转换为该数组的数据类型。

import os
from osgeo import gdal

os.chdir(r'D:\modis')

in_ds = gdal.Open('.tif')
in_band = in_ds.GetRasterBand(1)

# 计算输出行列数
# 输入数翻倍,因为我将像素大小减半
out_rows = in_band.YSize * 2
out_columns = in_band.XSize * 2

# 创建输出数据集
gtiff_driver = gdal.GetDriverByName('GTiff')
out_ds = gtiff_driver.Create('band_resampled.tif',
    out_columns, out_rows)

# 编辑地理变换
# 像素变为原来的 1/4
out_ds.SetProjection(in_ds.GetProjection())
geotransform = list(in_ds.GetGeoTransform())
geotransform[1] /= 2
geotransform[5] /= 2
out_ds.SetGeoTransform(geotransform)

# 读取数据时,指定一个较大的缓冲
data = in_band.ReadAsArray(
    buf_xsize=out_columns, buf_ysize=out_rows)

# 将数据写入输出光栅
out_band = out_ds.GetRasterBand(1)
out_band.WriteArray(data)

# 为较大的图像构建合适的概视图
out_band.FlushCache()
out_band.ComputeStatistics(False)
out_ds.BuildOverviews('average', [2, 4, 8, 16, 32, 64])

del out_ds
View Code

 

posted @ 2024-02-23 15:43  有翅膀的大象  阅读(26)  评论(0编辑  收藏  举报