使用google earth engine提取亚马逊每年森林火灾区域
程序员文章站
2022-05-26 19:16:04
...
2019年亚马逊大火还历历在目,作为学遥感的学生,我们可以使用遥感影像来获得着火区。但是使用传统遥感太过于麻烦,我们可以使用GEE,1分钟获得亚马逊10年的着火区域,并统计面积与导出着火区。
代码主要步骤:
1.数据选择与预处理;
数据源选择modis的火点产品数据,该数据是modis的500m月合成数据。
研究区是通过roi工具在GEE上面绘制的,包括了亚马逊森林。
var temp=MCD64.filterDate(start_date,end_date).mosaic().clip(SA)
var burn=temp.gte(0)
Map.addLayer(burn)
2.下载着火区域;
由于下载区域比较大,需要把maxpixel设置大一点。
Export.image.toDrive({
image:burn,
maxPixels:1e13,
scale: 500,
region :SA,
fileNamePrefix:NAME,
folder:NAME,
skipEmptyTiles:true,
})
3.统计着火区域面积;
在GEE里面没有直接统计面积的函数,一般有两个办法:
第一种方法是计算每个像素的面积,再统计所有像素的面积;
第二种方法是统计所有像素的个数,再乘以单个像素的面积;
我才用的是第一种方法:
//计算单个像素面积
var AreaImage = burn.multiply(ee.Image.pixelArea());
//统计面积
var AreaNum=AreaImage.reduceRegion({
reducer: ee.Reducer.sum(),
geometry: SA,
scale: 500,
maxPixels: 1e14})
var BurnedArea=AreaNum.get('BurnDate')
print(NAME+"这一年的面积"+"(单位:平方米)")
print(BurnedArea)
4.嵌套一个时间循环函数。
因为我们想嵌套一个时间循环,得到2010到2020年的亚马逊森林着火情况.get_monthly_burn是把前3个步骤封装好,并名为get_monthly_burn函数,方便直接调用。
//日期循环
for(var i=0;i<1;i++){
var start_date='201'+i+'-1-01';
var end_date= '201'+i+'-12-31';
get_monthly_water(start_date,end_date)
}
根据这个脚本,我们就能得到亚马逊这10年的火灾情况,下表就是统计的着火面积:
时间 | 火灾面积(万平方千米) | 时间 | 火灾面积(万平方千米) | |
2000 | 0.30 | 2019.1 | 0.74 | |
2001 | 19.43 | 2019.2 | 0.72 | |
2002 | 30.69 | 2019.3 | 0.73 | |
2003 | 22.41 | 2019.4 | 0.24 | |
2004 | 28.54 | 2019.5 | 2.71 | |
2005 | 31.20 | 2019.6 | 0.68 | |
2006 | 19.63 | 2019.7 | 1.60 | |
2007 | 44.87 | 2019.8 | 7.28 | |
2008 | 20.46 | 2019.9 | 10.28 | |
2009 | 12.53 | 2019.1 | 3.26 | |
2010 | 47.07 | 2019.11 | 1.40 | |
2011 | 19.27 | 2019.12 | 0.34 | |
2012 | 28.26 | |||
2013 | 13.76 | |||
2014 | 18.18 | |||
2015 | 23.52 | |||
2016 | 21.13 | |||
2017 | 26.30 | |||
2018 | 12.07 | |||
2019 | 27.17 |
可以看出其实亚马逊森林火灾并没有想象中严重,历史上的2007年的火灾更严重。如此引人关注,可能是因为2019年9月份的着火面积太大了。
完整的代码可进入GEE里面查看:https://code.earthengine.google.com/191ce5cf316191bd1878ecb0e9af7fef
上一篇: 查看端口占用windows系统