给出利用landsat影像计算ndvi的代码
时间: 2023-03-31 16:01:07 浏览: 224
以下是利用Landsat影像计算NDVI的Python代码示例:
```python
import rasterio
import numpy as np
# 打开Landsat影像文件
with rasterio.open('landsat.tif') as src:
# 读取红波段和近红外波段数据
red = src.read(4)
nir = src.read(5)
# 计算NDVI
ndvi = np.where((nir+red) == ., , (nir-red)/(nir+red))
# 将NDVI写入新的GeoTIFF文件
profile = src.profile
profile.update(dtype=rasterio.float32, count=1)
with rasterio.open('ndvi.tif', 'w', **profile) as dst:
dst.write(ndvi.astype(rasterio.float32), 1)
```
这段代码使用了rasterio库来读取和写入GeoTIFF格式的影像文件,计算NDVI的公式为(NIR-Red)/(NIR+Red),其中NIR为近红外波段,Red为红波段。最后将NDVI结果写入新的GeoTIFF文件中。
相关问题
2)自行准备一幅Landsat影像(裁剪一块边长不超过100个像元的矩形区域作为计算单元),利用arcpy计算其对应的NDVI的代码
以下是使用arcpy计算Landsat影像的NDVI的代码:
```python
import arcpy
# 设置工作空间
arcpy.env.workspace = r"C:\data"
# 设置输入和输出文件路径
inRaster = "landsat.tif"
outRaster = "ndvi.tif"
# 计算NDVI
redBand = arcpy.Raster(inRaster + "\Band_4")
nirBand = arcpy.Raster(inRaster + "\Band_5")
ndvi = (nirBand - redBand) / (nirBand + redBand)
# 保存结果
ndvi.save(outRaster)
```
在这个代码中,我们首先设置了工作空间,接着设置了输入和输出文件路径。然后,我们使用arcpy的Raster函数读取Landsat影像的红光和近红外波段,并计算NDVI。最后,我们使用Raster对象的save方法保存结果到输出文件中。
请注意,这个代码只是一个示例,你需要根据自己的数据调整文件路径和波段编号。
利用arcpy通过Python代码实现计算NDVI的代码
以下是利用arcpy通过Python代码计算NDVI的示例代码:
```python
import arcpy
# 设置工作空间和输入输出文件路径
arcpy.env.workspace = r"C:\data"
input_raster = "landsat.tif"
output_raster = "ndvi.tif"
# 计算NDVI
red_band = arcpy.Raster("landsat.tif\Band_4") # 红色波段
nir_band = arcpy.Raster("landsat.tif\Band_5") # 近红外波段
ndvi = arcpy.sa.Float(nir_band - red_band) / arcpy.sa.Float(nir_band + red_band) # NDVI计算公式
# 保存输出结果
ndvi.save(output_raster)
```
在这个示例代码中,我们首先设置了工作空间和输入输出文件路径。然后,我们使用`arcpy.Raster`函数加载输入的Landsat影像,并分别提取红色波段和近红外波段。接下来,我们根据NDVI计算公式计算NDVI,并使用`arcpy.sa.Float`函数确保精度。最后,我们使用`save`方法将输出结果保存到指定路径。
请注意,此代码仅适用于使用Landsat影像计算NDVI的情况。在其他情况下,您需要根据不同的波段组合和NDVI计算公式进行修改。
阅读全文