本研究使用了 Google Earth Engine 的 JavaScript API 对 MODIS 积雪数据进行处理。首先,设置了起始和结束日期,选择了相应的数据集。随后,通过循环遍历每一天的数据,进行投影、统计,并将结果导出为 GeoTIFF 文件。将每天的数据添加到地图上,并计算了每天的总积雪覆盖面积,最终将这些统计信息保存为 CSV 文件。整个过程涵盖了数据处理、地图展示以及结果导出等关键步骤,实现了对积雪情况的全面统计和可视化。
话不多说,上代码:
var startDate = '2020-12-01';
var endDate = '2020-12-30';
var modisDataset = ee.ImageCollection('MODIS/006/MOD10A1')
.filterBounds(roi)
.filterDate(startDate, endDate)
.select(['NDSI_Snow_Cover']);
var dates = modisDataset.aggregate_array('system:time_start');
var allTotalSnowCoverAreaValues = [];
dates.getInfo().forEach(function(date) {
date = new Date(date);
var dateString = date.toISOString().slice(0,10);
var dailyImage = modisDataset
.filterDate(dateString, dateString + 'T23:59:59')
.first()
.clip(roi);
//*************************************
// Map.addLayer(dailyImage, {
// min: 0,
// max: 100,
// palette: ['00FF00', 'FF0000']
// }, 'MODIS_Snow_Cover_' + dateString);
// Map.centerObject(roi, 6);
//**************************************
//卡就注释掉上面的一行
var reprojected = dailyImage.reproject({crs:"EPSG:4326",scale:500});
print(reprojected);
//**************************************
var totalSnowCover = reprojected.reduce(ee.Reducer.sum());
var snowCoverArea = totalSnowCover.multiply(250000).divide(100);
var stats = snowCoverArea.reduceRegion({
reducer: ee.Reducer.sum(),
geometry: roi,
scale: 500,
maxPixels: 1e9
});
var currentTotalSnowCoverArea = stats.get('sum');
print('总积雪覆盖率 (单位面积):', currentTotalSnowCoverArea);
allTotalSnowCoverAreaValues.push(currentTotalSnowCoverArea);
//**************************************
var exportOptions = {
image: reprojected,
description: 'MODIS_Snow_Cover_' + dateString,
folder: '1', // 文件
fileNamePrefix: 'MODIS_Snow_Cover_' + dateString,
scale: 500,
region: roi,
crs: 'EPSG:4326'
};
//**************************************
// Export.image.toDrive(exportOptions);
//**************************************
//卡就注释掉上面的一行
});
//**************************************
var featureCollection = ee.FeatureCollection(
allTotalSnowCoverAreaValues.map(function(value, index) {
var date = new Date(dates.getInfo()[index]);
var dateString = date.toISOString().slice(0, 10);
return ee.Feature(null, {'date': dateString, 'totalSnowCoverArea': value});
})
);
// print(featureCollection);
Export.table.toDrive({
collection: featureCollection,
description: 'total_snow_cover_area',
folder: '1',
fileFormat: 'CSV'
});
//**************************************