在GEE上基于sentinel 2实现dNBR2的提取的代码解释
时间: 2024-05-01 10:20:46 浏览: 156
dNBR2(differenced Normalized Burn Ratio 2)是一种用于火灾监测的指数,它通过计算前后两次遥感图像的归一化烧迹指数(Normalized Burn Ratio,NBR)之差来提取火灾烧迹信息。基于Sentinel-2数据实现dNBR2的提取,可以参考以下代码:
```python
# 导入必要的库
import ee
# 初始化Earth Engine
ee.Initialize()
# 定义区域(Region of Interest,ROI)
roi = ee.Geometry.Point([longitude, latitude]).buffer(distance)
# 定义时间范围(start_date为开始时间,end_date为结束时间)
start_date = '2020-01-01'
end_date = '2020-12-31'
# 加载Sentinel-2数据集,并进行筛选和预处理
s2_collection = ee.ImageCollection("COPERNICUS/S2_SR")\
.filterBounds(roi)\
.filterDate(start_date, end_date)\
.filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE", 30))\
.map(lambda img: img.clip(roi))\
.select(['B4', 'B8', 'B11'])
# 定义NBR计算函数
def calculate_nbr(image):
nbr = image.normalizedDifference(['B8', 'B4']).rename('NBR')
return image.addBands(nbr)
# 计算前后两次的NBR并进行差异计算
pre_fire = s2_collection.filterDate(start_date, '2020-08-31').map(calculate_nbr).mean()
post_fire = s2_collection.filterDate('2020-09-01', end_date).map(calculate_nbr).mean()
dnbr2 = post_fire.select('NBR').subtract(pre_fire.select('NBR')).rename('dNBR2')
# 可视化结果
vis_params = {'min': -0.5, 'max': 0.5, 'palette': ['blue', 'white', 'red']}
Map = geemap.Map()
Map.centerObject(roi, zoom=10)
Map.addLayer(pre_fire.select('NBR'), vis_params, 'Pre-fire NBR')
Map.addLayer(post_fire.select('NBR'), vis_params, 'Post-fire NBR')
Map.addLayer(dnbr2, vis_params, 'dNBR2')
Map.addLayerControl()
Map
```
代码中首先定义了区域(roi)和时间范围(start_date和end_date),然后加载Sentinel-2数据集并进行筛选和预处理。接下来定义了NBR计算函数(calculate_nbr),并利用该函数计算前后两次的NBR并进行差异计算,得到dNBR2结果。最后,使用geemap库中的Map对象进行结果可视化,并添加图层控制器(addLayerControl())以便用户可以交互式控制图层的显示和隐藏。
阅读全文