GEE图表:使用 Google Earth Engine (GEE) 来监测指定地区的二氧化氮(NO₂)月度浓度趋势

使用 Google Earth Engine 监测乌代布尔的 NO2 月度趋势

在本博客中,我们将探讨如何使用 Google Earth Engine (GEE) 来监测指定地区的二氧化氮(NO₂)月度浓度趋势。通过整合遥感数据,我们可以分析不同年份的空气质量变化。

1. 定义感兴趣区域(AOI)

首先,我们需要定义我们的研究区域,这里我们选择的是乌代布尔。使用 GEE 的 FeatureCollection 来过滤出该地区的边界:

var aoi = ee.FeatureCollection("FAO/GAUL/2015/level2")
                  .filter(ee.Filter.eq('ADM2_NAME', 'Udaipur'));

Map.addLayer(aoi); // 将AOI添加到地图中
2. 创建月份名称列表

接下来,我们创建一个包含月份名称的列表,以便在后续的分析中使用:

var monthNames = ee.List(['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
                          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);
3. 定义年份范围

我们将分析从2019年到2024年的数据,创建一个年份序列:

var years = ee.List.sequence(2019, 2024); // 从2019到2024的年份序列
4. 定义处理每年的函数

我们需要一个函数来处理每年的数据,计算每个月的 NO₂ 平均值:

var getMonthlyNO2 = function(year){
  year = ee.Number(year); // 将年份转换为数字
  var start = ee.Date.fromYMD(year, 1, 1); // 年的开始日期
  var end = start.advance(1, 'year'); // 年的结束日期
  
  var collection = ee.ImageCollection("COPERNICUS/S5P/OFFL/L3_NO2")
    .filterDate(start, end) // 过滤指定年份的数据
    .filterBounds(aoi) // 过滤感兴趣区域内的数据
    .select('NO2_column_number_density'); // 选择NO2浓度波段
  
  var months = ee.List.sequence(1, 12); // 月份序列
  
  var monthlyData = months.map(function(month){
    var startMonth = ee.Date.fromYMD(year, month, 1); // 每个月的开始日期
    var endMonth = startMonth.advance(1, 'month'); // 每个月的结束日期
    
    var monthlyCollection = collection.filterDate(startMonth, endMonth); // 过滤每个月的数据
    var monthlyMeanImage = monthlyCollection.mean(); // 计算每个月的平均图像
    
    var meanDict = monthlyMeanImage.reduceRegion({
      reducer: ee.Reducer.mean(), // 使用均值计算
      geometry: aoi, // 在AOI区域内计算
      scale: 10000, // 像素尺度
      bestEffort: true, // 尽力而为
      maxPixels: 1e13 // 最大像素数
    });
    
    var meanValue = ee.Number(meanDict.get('NO2_column_number_density')); // 获取NO2的平均值
    
    // 将µmol/m²转换为µg/m³(通过乘以NO2的摩尔质量)
    var meanValueInUGm3 = meanValue.multiply(46.0055);
    
    // 将月份数字(1-12)转换为索引(0-11)以用于monthNames列表
    var monthName = monthNames.get(ee.Number(month).subtract(1));
    
    return ee.Algorithms.If(
      meanValueInUGm3, // 如果有平均值
      ee.Feature(null, { // 创建一个特征
        'Month': month, // 月份
        'MonthName': monthName, // 月份名称
        'NO2': meanValueInUGm3, // NO2浓度
        'Year': year // 年份
      }),
      null // 否则返回null
    );
  });
  return ee.FeatureCollection(ee.List(monthlyData).filter(ee.Filter.notNull(['NO2']))) // 返回非空的特征集合
};
5. 对每个年份应用该函数

我们将上述函数应用于所有年份,并将结果扁平化为一个特征集合:

var allData = ee.FeatureCollection(years.map(getMonthlyNO2)).flatten(); // 扁平化所有数据
6. 生成 NO₂ 浓度趋势图表

最后,我们使用 GEE 的图表功能生成 NO₂ 月度趋势图:

var chart = ui.Chart.feature.groups({
  features: allData, // 使用所有数据
  xProperty: 'MonthName', // x轴属性为月份名称
  yProperty: 'NO2', // y轴属性为NO2浓度
  seriesProperty: 'Year' // 系列属性为年份
}).setChartType('LineChart') // 设置图表类型为折线图
.setOptions({
  title: '每月NO2趋势 (µg/m³)', // 图表标题
  hAxis: {
    title: '月份', // x轴标题
    slantedText: true // 斜体文本
  },
  vAxis: {title: 'NO2柱密度 (µg/m³)'}, // y轴标题
});

// 打印图表
print(chart);

总结

通过以上步骤,我们成功地使用 Google Earth Engine 提取并可视化了地区的 NO₂ 月度浓度趋势。这种分析方法可以帮助我们更好地理解空气质量的变化,为环境保护和政策制定提供支持。如果您对遥感数据分析感兴趣,欢迎尝试类似的方法!

全部代码

// 定义感兴趣区域(AOI) - 示例:印度拉贾斯坦邦乌代布尔
var aoi = ee.FeatureCollection("FAO/GAUL/2015/level2")
                  .filter(ee.Filter.eq('ADM2_NAME', 'Udaipur'));

Map.addLayer(aoi); // 将AOI添加到地图中

// 月份名称列表
var monthNames = ee.List(['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
                          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);

// 年份列表
var years = ee.List.sequence(2019, 2024); // 从2019到2024的年份序列

// 处理每年的函数
var getMonthlyNO2 = function(year){
  year = ee.Number(year); // 将年份转换为数字
  var start = ee.Date.fromYMD(year, 1, 1); // 年的开始日期
  var end = start.advance(1, 'year'); // 年的结束日期
  
  var collection = ee.ImageCollection("COPERNICUS/S5P/OFFL/L3_NO2")
    .filterDate(start, end) // 过滤指定年份的数据
    .filterBounds(aoi) // 过滤感兴趣区域内的数据
    .select('NO2_column_number_density'); // 选择NO2浓度波段
  
  var months = ee.List.sequence(1, 12); // 月份序列
  
  var monthlyData = months.map(function(month){
    var startMonth = ee.Date.fromYMD(year, month, 1); // 每个月的开始日期
    var endMonth = startMonth.advance(1, 'month'); // 每个月的结束日期
    
    var monthlyCollection = collection.filterDate(startMonth, endMonth); // 过滤每个月的数据
    var monthlyMeanImage = monthlyCollection.mean(); // 计算每个月的平均图像
    
    var meanDict = monthlyMeanImage.reduceRegion({
      reducer: ee.Reducer.mean(), // 使用均值计算
      geometry: aoi, // 在AOI区域内计算
      scale: 10000, // 像素尺度
      bestEffort: true, // 尽力而为
      maxPixels: 1e13 // 最大像素数
    });
    
    var meanValue = ee.Number(meanDict.get('NO2_column_number_density')); // 获取NO2的平均值
    
    // 将µmol/m²转换为µg/m³(通过乘以NO2的摩尔质量)
    var meanValueInUGm3 = meanValue.multiply(46.0055);
    
    // 将月份数字(1-12)转换为索引(0-11)以用于monthNames列表
    var monthName = monthNames.get(ee.Number(month).subtract(1));
    
    return ee.Algorithms.If(
      meanValueInUGm3, // 如果有平均值
      ee.Feature(null, { // 创建一个特征
        'Month': month, // 月份
        'MonthName': monthName, // 月份名称
        'NO2': meanValueInUGm3, // NO2浓度
        'Year': year // 年份
      }),
      null // 否则返回null
      );
  });
  return ee.FeatureCollection(ee.List(monthlyData).filter(ee.Filter.notNull(['NO2']))) // 返回非空的特征集合
};

// 对每个年份应用该函数
var allData = ee.FeatureCollection(years.map(getMonthlyNO2)).flatten(); // 扁平化所有数据

// 生成包含月份NO2浓度的图表
var chart = ui.Chart.feature.groups({
  features: allData, // 使用所有数据
  xProperty: 'MonthName', // x轴属性为月份名称
  yProperty: 'NO2', // y轴属性为NO2浓度
  seriesProperty: 'Year' // 系列属性为年份
}).setChartType('LineChart') // 设置图表类型为折线图
.setOptions({
  title: '每月NO2趋势 (µg/m³)', // 图表标题
  hAxis: {
    title: '月份', // x轴标题
    slantedText: true // 斜体文本
  },
  vAxis: {title: 'NO2柱密度 (µg/m³)'}, // y轴标题
})

// 打印图表
print(chart);

结果

可视化结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此星光明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值