gdal读取单波段tif和创建新的单波段tif

 

import gdal

# 读文件
YG_dataset = gdal.Open(r'F:\YG\data\SVDNB_npp_20181201-20181213caijian.tif')  # 打开文件
print(YG_dataset)
YG_width = YG_dataset.RasterXSize  # 栅格矩阵的列数
print(YG_width)
YG_height = YG_dataset.RasterYSize  # 栅格矩阵的行数
print(YG_height)
YG_geotrans = YG_dataset.GetGeoTransform()  # 仿射矩阵
print(YG_geotrans)
YG_proj = YG_dataset.GetProjection()  # 地图投影信息
print(YG_proj)
YG_data = YG_dataset.ReadAsArray(0, 0, YG_width, YG_height)  # 将数据写成数组,对应栅格矩阵
print(YG_data)
print(YG_data.shape)


# 创建tif文件
driver = gdal.GetDriverByName("GTiff")
New_YG_dataset = driver.Create(r'F:\YG\result\综合夜间灯光强度.tif', YG_width, YG_height, 1, gdal.GDT_Float32)
New_YG_dataset.SetGeoTransform(YG_geotrans)
New_YG_dataset.SetProjection(YG_proj)
band = New_YG_dataset.GetRasterBand(1)
band.WriteArray(YG_data + 10)
print(New_YG_dataset)
New_YG_data = New_YG_dataset.ReadAsArray(0, 0, 10, 10)  # 将数据写成数组,对应栅格矩阵
print(New_YG_data)
# 这里注意,创建完成之后,需要删除,不然,后面再次打开的时候,会被占用
del New_YG_dataset

 
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,你可以参考以下代码来使用C++版GDAL裁剪一个波段TIF影像: ```c++ #include <iostream> #include "gdal_priv.h" using namespace std; int main() { // 打开原始影像 GDALDataset* src_ds = (GDALDataset*)GDALOpen("input.tif", GA_ReadOnly); // 设置裁剪窗口 int xoff = 100; // 起始列 int yoff = 100; // 起始行 int xsize = 500; // 列数 int ysize = 500; // 行数 // 创建输出影像 GDALDriver* driver = GetGDALDriverManager()->GetDriverByName("GTiff"); // 获取驱动 GDALDataset* dst_ds = driver->CreateCopy("output.tif", src_ds, FALSE, NULL, NULL, NULL); // 创建输出影像 int band_num = 1; // 波段数 // 设置输出影像的尺寸和起始位置 int dst_xoff = 0; int dst_yoff = 0; int dst_xsize = xsize; int dst_ysize = ysize; // 读取数据 float* data = new float[xsize * ysize]; GDALRasterBand* src_band = src_ds->GetRasterBand(band_num); src_band->RasterIO(GF_Read, xoff, yoff, xsize, ysize, data, xsize, ysize, GDT_Float32, 0, 0); // 写入数据 GDALRasterBand* dst_band = dst_ds->GetRasterBand(band_num); dst_band->RasterIO(GF_Write, dst_xoff, dst_yoff, dst_xsize, dst_ysize, data, dst_xsize, dst_ysize, GDT_Float32, 0, 0); // 释放资源 delete[] data; GDALClose(src_ds); GDALClose(dst_ds); return 0; } ``` 在上述代码中,我们首先打开原始影像,然后设置裁剪窗口的起始位置和尺寸。接着,我们使用GDAL库的CreateCopy函数创建输出影像,并设置输出影像的尺寸和起始位置。然后,我们读取原始影像的数据,并将其写入到输出影像中。最后,我们释放申请的资源,并关闭数据集。 你可以根据自己的需求,修改代码中的输入输出文件名、裁剪窗口的起始位置和尺寸,以及数据类型等参数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值