python 影像读取和计算NDVI

from osgeo import gdal

filename='D:\\影像练习\\001.tif'
dataset=gdal.Open(filename)
if dataset is None:
    print('could not open'+filename)

cols=dataset.RasterXSize #列数
rows=dataset.RasterYSize #行数  空间坐标 可以理解为行列号
print(cols,rows)
bands=dataset.RasterCount  #波段数

#dataset.GetRasterBand():获取指定波段  dataset.ReadAsArray(xoffset,yoffset,1,1):根据像素位置获取像素值
band1=dataset.GetRasterBand(1) #读取第1个波段
proj=dataset.GetProjection() #投影

geotrans=dataset.GetGeoTransform() #左上角x坐标、水平分辨率、旋转参数、左上角y坐标、旋转参数、竖直分辨率
print(geotrans)

data_all=dataset.ReadAsArray(0,0,cols,rows)#读取从(0,0)开始,大小为(xsize,ysize)的矩阵
print(data_all)

#计算 NDVI=(NIR-RED)/(NIR+RED)
#提取红波段
band_red=dataset.GetRasterBand(3)
data_red=band_red.ReadAsArray(0,0,cols,rows) #获取像素值
#提取近红外波段
band_nir=dataset.GetRasterBand(4)
data_nir=band_nir.ReadAsArray(0,0,cols,rows)

ndvi=(data_nir-data_red)/(data_nir+data_red)
#创建栅格数据集
filename_out='D:\\影像练习\\NDVI输出\\001_ndvi.tif'
'''
GetDriverByName(driver_name)函数中的driver_name是文件类型的名称,
如TIFF/GeoTIFF文件的名称为GTiff
Erdas Imagine文件的名称为HFA
ENVI文件的名称为ENVI
详细的栅格文件名称可参考https://gdal.org/drivers/raster/index.html。
'''
driver=gdal.GetDriverByName('GTiff') #将GTiff图纸实体化为driver,括号内为文件类型

dataset_out=driver.Create(filename_out,cols,rows,1,gdal.GDT_Float32) #这里的1指的是创建的栅格数据文件只能容纳一个波段
#定义仿射矩阵和投影信息
dataset_out.SetGeoTransform(geotrans)
dataset_out.SetProjection(proj)
#写入像素值
band_out=dataset_out.GetRasterBand(1)
band_out.WriteArray(ndvi)  #把数组写入到栅格数据相应的波段中
#清空缓存,关闭数据集
dataset.FlushCache()
dataset_out.FlushCache() #把内存中的数据写入到文件中
del dataset
del dataset_out

geopandas —— 矢量数据读取与基本操作

rasterio       —— 栅格数据读写与基本操作

matplotlib   —— 基本绘图控件

cartopy       —— 地理空间绘图的基础、关键库(Basemap的替换者)

  • 10
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫杨傲天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值