下面是对给定代码的具体解释:
1. 数据集与区域定义
var table = ee.FeatureCollection("users/krnwnaji1995/AOI_Target_PL"),
firms = ee.ImageCollection("FIRMS"),
KHDTK_Tumbang_Nusa =
ee.Feature(
ee.Geometry.Polygon(
[[[114.00281780691927, -2.3463919715536297],
[114.09620159598177, -2.473309021663233],
[114.17722576590364, -2.4527286869071663],
[114.10444134207552, -2.3607993630998423],
[114.02959698172396, -2.2942497013515983]]]),
{
"system:index": "0"
}),
Lokasi_Terbakar =
ee.Feature(
ee.Geometry.MultiPoint(
[[113.82847865292388, -2.368873162323681],
[114.1924007720645, -2.289288089633419],
[114.307757217377, -2.3935710553656477],
[113.96615469223698, -2.7212829172956603],
[114.10073721176823, -2.386533212343586],
[113.80127986133955, -2.219127072756204]]),
{
"system:index": "0"
}),
roi_tn =
ee.Geometry.Polygon(
[[[113.85690886701578, -2.175203392754999],
[113.85690886701578, -2.638964920712441],
[114.32382781232828, -2.638964920712441],
[114.32382781232828, -2.175203392754999]]], null, false);
table
:定义了一个特征集合,表示感兴趣的区域(AOI)。firms
:引入了 FIRMS(火灾监测)数据集。KHDTK_Tumbang_Nusa
和Lokasi_Terbakar
:定义了两个特征,分别表示一个多边形区域和多个点,可能用于监测火灾或其他环境变化。roi_tn
:定义了一个矩形区域,用于后续分析。
2. 可视化参数设置
var ndviVisParams = {"opacity":1,"bands":["NDVI"],"min":0,"palette":["d00706","fdb000","fff700","7aff02","37dc02","2bad01"]};
var firesVis = {
min: 325,
max: 6000,
palette: ['red', 'orange', 'yellow'],
};
var imageVisParam2 = {"opacity":1,"bands":["SR_B5","SR_B4","SR_B3"],"min":0.010668699999999991,"max":0.43132630000000005,"gamma":1};
var visualization = {
bands: ['SR_B4', 'SR_B3', 'SR_B2'],
min: 0.0,
max: 0.3,
};
- 定义了多个可视化参数,用于不同的图像显示,包括 NDVI(归一化植被指数)和火灾数据的可视化。
3. 图像处理函数
function maskL457sr(image) {
// Bit masks for QA_PIXEL and saturation
var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
var saturationMask = image.select('QA_RADSAT').eq(0);
// Scale optical and thermal bands
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
var thermalBand = image.select('ST_B6').multiply(0.00341802).add(149.0);
return image.addBands(opticalBands, null, true)
.addBands(thermalBand, null, true)
.updateMask(qaMask)
.updateMask(saturationMask);
}
maskL457sr
:用于处理 Landsat 4、5、7 图像,应用质量掩膜(QA)和饱和度掩膜,缩放光学波段和热波段。
var addNDVI = function(image) {
var ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI');
return image.addBands(ndvi);
};
addNDVI
:计算 NDVI,并将其添加到图像中。
function maskL8sr(image) {
// Similar to maskL457sr but for Landsat 8
var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
var saturationMask = image.select('QA_RADSAT').eq(0);
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
return image.addBands(opticalBands, null, true)
.addBands(thermalBands, null, true)
.updateMask(qaMask)
.updateMask(saturationMask);
}
maskL8sr
:处理 Landsat 8 图像,类似于maskL457sr
,但针对 Landsat 8 的波段。
4. 数据集获取与处理
// FIRMS dataset for 2019
var dataset19 = firms.filter(
ee.Filter.date('2019-01-01', '2019-12-31'));
var fires19 = dataset19.select('T21').sum().clip(roi_tn);
// FIRMS dataset for 2015
var dataset15 = firms.filter(
ee.Filter.date('2015-01-01', '2015-12-31'));
var fires15 = dataset15.select('T21').sum().clip(roi_tn);
// Image collections for Landsat 5 and 8
var l5 = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2')
.filterDate('1984-06-01', '2012-01-01')
.filterBounds(table)
.map(maskL457sr)
.map(function(a){
return a.set('year',ee.Image(a).date().get('year'))
});
var l8 = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2")
.filterDate('2012-01-01', '2022-09-01')
.filterBounds(roi_tn)
.map(maskL8sr)
.map(function(a){
return a.set('year',ee.Image(a).date().get('year'))
});
- 获取 FIRMS 数据集(2015 和 2019 年),并对其进行火灾监测。
- 获取 Landsat 5 和 Landsat 8 图像集合,应用掩膜函数,并附加年份属性。
5. 图像集合的处理与可视化
var list = ee.List([])
for (var a = 2000;a <= 2022;a++){
if(a < 2012){
var filL5 = l5.filterMetadata('year','equals',a).median();
var finalL5 = filL5.set('year',a)
.set('product','L05')
list = list.add(finalL5)
} else {
var filL8 = l8.filterMetadata('year','equals',a).median();
var finalL8 = filL8.set('year',a)
.set('product','L08')
list = list.add(finalL8)
}
}
var finalCol = ee.ImageCollection(list)
.map(function(a){
return a.set('bands',ee.Image(a).bandNames().length())
})
.filterMetadata('bands','greater_than',0);
- 遍历 2000 到 2022 年,分别处理 Landsat 5 和 Landsat 8 图像,计算每年的中值,并添加到列表中。
- 创建最终的图像集合
finalCol
,并过滤掉没有波段的图像。
6. 添加图层到地图
for (var a = 2010;a <= 2022;a++){
Map.addLayer(finalCol.filterMetadata('year','equals',a)
.median()
.clip(roi_tn)
,visualization,'Tahun '+a,false)
}
for (var a = 2010;a <= 2022;a++){
Map.addLayer(addNDVI(finalCol.filterMetadata('year','equals',a)
.median()
.clip(roi_tn))
,ndviVisParams,'NDVITahun '+a,false)
}
Map.addLayer(fires19,firesVis,'hotspot tahun 2019')
Map.addLayer(fires15,firesVis,'hotspot tahun 2015')
Map.addLayer(KHDTK_Tumbang_Nusa,{},'batas kajian',false);
Map.centerObject(roi_tn)
- 将每年的中值图像和 NDVI 图层添加到地图中。
- 添加 2015 和 2019 年的火灾热点图层,以及研究区域的边界。
7. 导出结果
for (var a = 2010;a <= 2022;a++){
Export.image.toDrive({
image : addNDVI(finalCol.filterMetadata('year','equals',a)
.median()
.clip(roi_tn)).toDouble().select('SR_B2','SR_B3','SR_B4','SR_B5','NDVI'),
fileNamePrefix : 'NDVITumbangN3_'+a,
description : 'NDVITumbangN3_'+a,
folder : 'GEE/COBA',
maxPixels: 1e8,
scale : 30
})
}
for (var a = 2010;a <= 2022;a++){
Export.image.toDrive({
image : finalCol.filterMetadata('year','equals',a)
.select('SR_B4', 'SR_B3', 'SR_B2','SR_B5')
.median()
.clip(roi_tn),
fileNamePrefix : 'TumbangNus_'+a,
description : 'TumbangNus_'+a,
folder : 'GEE/COBA',
maxPixels: 1e8,
scale : 30
})
}
//Hotspot
Export.image.toDrive({
image : fires19,
fileNamePrefix : 'Hotspot 2019',
description : 'Hotspot 2019',
folder : 'GEE/COBA',
maxPixels: 1e9,
scale : 30
})
Export.image.toDrive({
image : fires15,
fileNamePrefix : 'Hotspot 2015',
description : 'Hotspot 2015',
folder : 'GEE/COBA',
maxPixels: 1e9,
scale : 30
})
- 导出每年的 NDVI 和中值图像到 Google Drive,指定文件名和文件夹。
- 也导出 2015 和 2019 年的火灾热点图像。
全部代码
// 定义感兴趣区域(AOI)和数据集
var table = ee.FeatureCollection("users/krnwnaji1995/AOI_Target_PL"), // 感兴趣区域的特征集合
firms = ee.ImageCollection("FIRMS"), // 引入 FIRMS(火灾监测)数据集
KHDTK_Tumbang_Nusa =
/* color: #d63000 */
/* shown: false */
ee.Feature(
ee.Geometry.Polygon(
[[[114.00281780691927, -2.3463919715536297], // 定义一个多边形区域
[114.09620159598177, -2.473309021663233],
[114.17722576590364, -2.4527286869071663],
[114.10444134207552, -2.3607993630998423],
[114.02959698172396, -2.2942497013515983]]]),
{
"system:index": "0" // 系统索引
}),
Lokasi_Terbakar =
/* color: #ffec08 */
/* shown: false */
ee.Feature(
ee.Geometry.MultiPoint(
[[113.82847865292388, -2.368873162323681], // 定义多个点的位置
[114.1924007720645, -2.289288089633419],
[114.307757217377, -2.3935710553656477],
[113.96615469223698, -2.7212829172956603],
[114.10073721176823, -2.386533212343586],
[113.80127986133955, -2.219127072756204]]),
{
"system:index": "0" // 系统索引
}),
roi_tn =
/* color: #d63000 */
/* shown: false */
/* displayProperties: [
{
"type": "rectangle"
}
] */
ee.Geometry.Polygon(
[[[113.85690886701578, -2.175203392754999], // 定义一个矩形区域
[113.85690886701578, -2.638964920712441],
[114.32382781232828, -2.638964920712441],
[114.32382781232828, -2.175203392754999]]], null, false);
// 可视化参数设置
var ndviVisParams = {"opacity":1,"bands":["NDVI"],"min":0,"palette":["d00706","fdb000","fff700","7aff02","37dc02","2bad01"]}; // NDVI 可视化参数
var firesVis = {
min: 325,
max: 6000,
palette: ['red', 'orange', 'yellow'], // 火灾热点可视化颜色
};
var imageVisParam2 = {"opacity":1,"bands":["SR_B5","SR_B4","SR_B3"],"min":0.010668699999999991,"max":0.43132630000000005,"gamma":1}; // 图像可视化参数
var visualization = {
bands: ['SR_B4', 'SR_B3', 'SR_B2'], // 可视化使用的波段
min: 0.0,
max: 0.3,
};
// 图像处理函数
// 处理 Landsat 4、5、7 图像的掩膜函数
function maskL457sr(image) {
// QA_PIXEL 波段的位掩膜
var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0); // 过滤不良像素
var saturationMask = image.select('QA_RADSAT').eq(0); // 过滤饱和像素
// 应用缩放因子到相应的波段
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2); // 光学波段缩放
var thermalBand = image.select('ST_B6').multiply(0.00341802).add(149.0); // 热波段缩放
// 替换原始波段并应用掩膜
return image.addBands(opticalBands, null, true)
.addBands(thermalBand, null, true)
.updateMask(qaMask)
.updateMask(saturationMask);
}
// 添加 NDVI 的函数
var addNDVI = function(image) {
var ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI'); // 计算 NDVI
return image.addBands(ndvi); // 将 NDVI 添加到图像中
};
// 处理 Landsat 8 图像的掩膜函数
function maskL8sr(image) {
// QA_PIXEL 波段的位掩膜
var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0); // 过滤不良像素
var saturationMask = image.select('QA_RADSAT').eq(0); // 过滤饱和像素
// 应用缩放因子到相应的波段
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2); // 光学波段缩放
var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0); // 热波段缩放
// 替换原始波段并应用掩膜
return image.addBands(opticalBands, null, true)
.addBands(thermalBands, null, true)
.updateMask(qaMask)
.updateMask(saturationMask);
}
// 数据集获取与处理
// 获取 2019 年的 FIRMS 数据集
var dataset19 = firms.filter(
ee.Filter.date('2019-01-01', '2019-12-31'));
var fires19 = dataset19.select('T21').sum().clip(roi_tn); // 计算火灾热点并裁剪到感兴趣区域
// 获取 2015 年的 FIRMS 数据集
var dataset15 = firms.filter(
ee.Filter.date('2015-01-01', '2015-12-31'));
var fires15 = dataset15.select('T21').sum().clip(roi_tn); // 计算火灾热点并裁剪到感兴趣区域
// 获取 Landsat 5 图像集合
var l5 = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2')
.filterDate('1984-06-01', '2012-01-01') // 过滤日期
.filterBounds(table) // 过滤感兴趣区域
.map(maskL457sr) // 应用掩膜函数
.map(function(a){
return a.set('year',ee.Image(a).date().get('year')) // 设置年份属性
});
// 获取 Landsat 8 图像集合
var l8 = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2")
.filterDate('2012-01-01', '2022-09-01') // 过滤日期
.filterBounds(roi_tn) // 过滤感兴趣区域
.map(maskL8sr) // 应用掩膜函数
.map(function(a){
return a.set('year',ee.Image(a).date().get('year')) // 设置年份属性
});
// 图像集合的处理与可视化
var list = ee.List([]) // 创建一个空列表
for (var a = 2000;a <= 2022;a++){ // 遍历 2000 到 2022 年
if(a < 2012){ // 如果年份小于 2012
var filL5 = l5.filterMetadata('year','equals',a).median(); // 获取该年的中值图像
var finalL5 = filL5.set('year',a) // 设置年份属性
.set('product','L05'); // 设置产品属性
list = list.add(finalL5); // 将图像添加到列表中
} else { // 如果年份大于或等于 2012
var filL8 = l8.filterMetadata('year','equals',a).median(); // 获取该年的中值图像
var finalL8 = filL8.set('year',a) // 设置年份属性
.set('product','L08'); // 设置产品属性
list = list.add(finalL8); // 将图像添加到列表中
}
}
// 创建最终的图像集合
var finalCol = ee.ImageCollection(list)
.map(function(a){
return a.set('bands',ee.Image(a).bandNames().length()); // 设置波段数量属性
})
.filterMetadata('bands','greater_than',0); // 过滤掉没有波段的图像
// 添加图层到地图
for (var a = 2010;a <= 2022;a++){
Map.addLayer(finalCol.filterMetadata('year','equals',a) // 添加每年的中值图像
.median()
.clip(roi_tn)
,visualization,'Tahun '+a,false); // 设置图层名称
}
for (var a = 2010;a <= 2022;a++){
Map.addLayer(addNDVI(finalCol.filterMetadata('year','equals',a) // 添加每年的 NDVI 图层
.median()
.clip(roi_tn))
,ndviVisParams,'NDVITahun '+a,false); // 设置图层名称
}
Map.addLayer(fires19,firesVis,'hotspot tahun 2019'); // 添加 2019 年火灾热点图层
Map.addLayer(fires15,firesVis,'hotspot tahun 2015'); // 添加 2015 年火灾热点图层
Map.addLayer(KHDTK_Tumbang_Nusa,{},'batas kajian',false); // 添加研究区域边界
Map.centerObject(roi_tn); // 调整地图中心到感兴趣区域
// 导出结果
for (var a = 2010;a <= 2022;a++){
Export.image.toDrive({ // 导出 NDVI 图像到 Google Drive
image : addNDVI(finalCol.filterMetadata('year','equals',a) // 获取该年的 NDVI 图像
.median()
.clip(roi_tn)).toDouble().select('SR_B2','SR_B3','SR_B4','SR_B5','NDVI'),
fileNamePrefix : 'NDVITumbangN3_'+a, // 文件名前缀
description : 'NDVITumbangN3_'+a, // 导出描述
folder : 'GEE/COBA', // 导出文件夹
maxPixels: 1e8, // 最大像素数
scale : 30 // 像素分辨率
});
}
for (var a = 2010;a <= 2022;a++){
Export.image.toDrive({ // 导出中值图像到 Google Drive
image : finalCol.filterMetadata('year','equals',a) // 获取该年的中值图像
.select('SR_B4', 'SR_B3', 'SR_B2','SR_B5')
.median()
.clip(roi_tn),
fileNamePrefix : 'TumbangNus_'+a, // 文件名前缀
description : 'TumbangNus_'+a, // 导出描述
folder : 'GEE/COBA', // 导出文件夹
maxPixels: 1e8, // 最大像素数
scale : 30 // 像素分辨率
});
}
// 导出火灾热点图像
Export.image.toDrive({
image : fires19, // 2019 年火灾热点
fileNamePrefix : 'Hotspot 2019', // 文件名前缀
description : 'Hotspot 2019', // 导出描述
folder : 'GEE/COBA', // 导出文件夹
maxPixels: 1e9, // 最大像素数
scale : 30 // 像素分辨率
});
Export.image.toDrive({
image : fires15, // 2015 年火灾热点
fileNamePrefix : 'Hotspot 2015', // 文件名前缀
description : 'Hotspot 2015', // 导出描述
folder : 'GEE/COBA', // 导出文件夹
maxPixels: 1e9, // 最大像素数
scale : 30 // 像素分辨率
});
总结
该代码段通过使用 Landsat 影像数据和 FIRMS 火灾监测数据,定义了多个区域和可视化参数,处理了图像数据,计算了 NDVI,并将结果导出。整个流程包括数据获取、处理、可视化和导出,适用于环境监测和分析。