gdal 压缩tif_Python | GDAL处理影像

GDAL栅格数据处理

  • 栅格数据介绍
  • 栅格数据读取
  • 读取部分数据集
  • 坐标变换
  • 重采样

什么是栅格数据

  • 基本上是一个大的二维或三维数组
  • 没有独立的几何对象,只有像素的集合
  • 二维:黑白图片
  • 三维:彩色/假彩色,多光谱/高光谱
  • 可以存储几乎任何类型的数据
  • 体积比较大
  • 应用场景:遥感、气象、水文、农业、海洋……

栅格数据都能存储什么?

  • 高程、坡度、坡向
  • 温度、风速、降水、蒸发
  • 可见光、近红外、微波等遥感数据

栅格数据小知识

  • 栅格数据的仿射变换与几何校正:通过一组坐标,像素的大小和数据集的旋转量
  • 存储空间:双精度浮点数>单精度浮点数>整数>无符号整数
  • 概视图:递减分辨率,用于大数据快速显示
  • 有损压缩与无损压缩:地理科学数据应使用无损压缩

GDAL数据集的基本结构

e4f4a0e8391c549d5e03365d7ce6adf0.png

栅格数据读取

  • 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支持的数据类型

00274b5599390f8f868db163e76d1ec4.png
# 导入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')
d537c11874df45df7073adad4f6c048d.png
# 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"
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Python遥感影像重采样,可以使用GDAL(Geospatial Data Abstraction Library)库来实现。GDAL是一个开源的地理信息系统(GIS)库,它提供了许多用于处理栅格数据的功能,包括重采样。 下面是一个简单的示例代码,演示如何使用GDAL库进行遥感影像重采样: ```python from osgeo import gdal def resample_image(input_path, output_path, pixel_size): # 打开输入影像 input_ds = gdal.Open(input_path) # 获取输入影像的投影和仿射变换参数 projection = input_ds.GetProjection() geotransform = input_ds.GetGeoTransform() # 获取输入影像的宽度和高度 width = input_ds.RasterXSize height = input_ds.RasterYSize # 计算重采样后的宽度和高度 new_width = int(width / pixel_size) new_height = int(height / pixel_size) # 创建输出影像 driver = gdal.GetDriverByName('GTiff') output_ds = driver.Create(output_path, new_width, new_height, 1, gdal.GDT_Float32) # 设置输出影像的投影和仿射变换参数 output_ds.SetProjection(projection) output_ds.SetGeoTransform((geotransform[0], pixel_size, 0, geotransform[3], 0, -pixel_size)) # 执行重采样 gdal.ReprojectImage(input_ds, output_ds, None, None, gdal.GRA_Bilinear) # 关闭数据集 input_ds = None output_ds = None # 使用示例 input_path = 'input_image.tif' output_path = 'resampled_image.tif' pixel_size = 10 # 新的像素大小(单位:米) resample_image(input_path, output_path, pixel_size) ``` 在上面的示例中,`input_path`是输入影像的路径,`output_path`是重采样后的输出影像的路径,`pixel_size`是新的像素大小,用于指定重采样后每个像素的大小(单位:米)。代码将使用双线性插值进行重采样操作,并将结果保存为GeoTIFF格式的影像文件。 请注意,执行此代码需要安装GDAL库。你可以使用pip安装它:`pip install gdal`。 希望这个示例对你有帮助!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值