简介

本篇博客将介绍如何使用Google Earth Engine (GEE) 进行雪盖监测和分析。通过MODIS MOD10A1数据集,我们可以识别2010年至2015年间的雪盖范围,并计算其面积。

背景知识

MODIS MOD10A1数据集

MODIS/061/MOD10A1数据集提供了全球的日尺度雪盖和冰盖数据,包括归一化雪盖指数(NDSI)等信息。

雪盖监测

雪盖监测对于理解气候变化、水资源管理和生态研究具有重要意义。

完整代码

// 定义研究区域的坐标点
var cor = [
  [44.44379054392027, 34.879626513916506],
  [49.27777491892027, 34.879626513916506],
  [49.27777491892027, 38.95343252297563],
  [44.44379054392027, 38.95343252297563],
  [44.44379054392027, 34.879626513916506]
];

// 创建多边形区域
var roi = ee.Geometry.Polygon(cor);

// 将地图中心设置为研究区域
Map.centerObject(roi);

// 定义时间范围
var time_start = '2010';
var time_end = '2015';

// 加载MODIS NDSI数据集
var modis = ee.ImageCollection("MODIS/061/MOD10A1")
  .select('NDSI_Snow_Cover')
  .filterDate(time_start, time_end);

// 加载MODIS土地覆盖数据集并提取水体
var lc = ee.ImageCollection("MODIS/061/MCD12Q1").select('LC_Type1').mode();
var wb = lc.eq(17).not();

// 将水体数据裁剪至研究区域并添加至地图
Map.addLayer(wb.clip(roi), [], 'water_body', false);

// 计算NDSI最大值并更新掩膜
var ndsi_max = modis.max().updateMask(wb);

// 将NDSI最大值裁剪至研究区域并添加至地图
Map.addLayer(ndsi_max.clip(roi), [], 'ndsi_2010', false);

// 设置阈值并创建掩膜
var thr = ndsi_max.gt(50);
Map.addLayer(thr.clip(roi), [], 'thr50', false);

// 更新掩膜
var mask = thr.updateMask(thr);
Map.addLayer(mask.clip(roi), [], 'mask50', false);

// 计算雪盖面积
var area = mask.multiply(ee.Image.pixelArea().divide(1e6));
Map.addLayer(area.clip(roi), [], 'area', false);

// 计算雪盖总面积
var snow_area = ee.Number(area.reduceRegion({
  reducer: ee.Reducer.sum(),
  geometry: roi,
  scale: 500,
  maxPixels: 1e13
}).get(0));

print('snow cover area km2', snow_area);

// 映射NDSI图像并计算雪盖面积时间序列
var ndsi = modis.map(function (img) {
  var mask_water = img.updateMask(wb);
  var ndsi_thr = mask_water.gt(20);
  var ndsi_mask = ndsi_thr.updateMask(ndsi_thr);
  var ndsi_area = ndsi_mask.multiply(ee.Image.pixelArea().divide(1e6));
  return ndsi_area.copyProperties(img, img.propertyNames());
});

print(
  ui.Chart.image.series(ndsi, roi, ee.Reducer.sum(),
  500, 'system:time_start')
);

// 导出特定时间范围的NDSI图像至Google Drive
Export.image.toDrive({
  image: ndsi.filterDate('2011', '2012')
    .filter(ee.Filter.calendarRange(1, 1, 'month')).toBands().clip(roi),
  description: 'modis_ndsi',
  scale: 500,
  region: roi,
  crs: 'EPSG:4326'
});
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.

代码详解

1. 定义研究区域

创建一个多边形区域roi,用于限定分析的地理范围,并设置地图中心。

2. 加载MODIS数据集

加载MODIS NDSI和土地覆盖数据集,并根据时间范围和地理范围进行筛选。

3. 土地覆盖提取水体

提取土地覆盖数据中的水体信息,以便在后续分析中排除水体影响。

4. 计算NDSI最大值

计算时间范围内NDSI的最大值,并使用水体掩膜更新数据。

5. 雪盖面积计算

通过设置阈值,计算雪盖区域的像素面积,并将其转换为实际面积(单位:平方公里)。

6. 雪盖面积时间序列分析

映射MODIS NDSI图像集合,计算每年1月份的雪盖面积,并绘制时间序列图表。

7. 数据导出

将2011年至2012年1月份的NDSI图像导出至Google Drive。

结论

本教程展示了如何使用GEE对MODIS数据进行雪盖监测和面积计算。通过此分析,可以了解特定区域内雪盖的分布和变化趋势,为气候变化研究提供支持。

进一步探索

GEE提供了多种工具和方法来进行气象和环境数据分析。在后续的教程中,我们将继续探索GEE在不同领域的应用。