零基础实战:5分钟用Google Earth Engine可视化全球气溶胶分布
第一次打开Google Earth Engine的代码编辑器时,那些密密麻麻的API文档和陌生的数据集名称确实让人望而生畏。但别担心,今天我们要用最简单的步骤,带你完成一个专业级的气溶胶光学厚度(AOD)可视化项目。不需要任何编程基础,跟着操作就能获得一张可交互的全球污染分布图。
1. 准备工作:认识工具与数据
Google Earth Engine(简称GEE)是一个强大的地理空间分析平台,集成了PB级卫星影像数据。我们今天要用的MCD19A2 V6数据集,是NASA基于MODIS卫星的MAIAC算法生成的气溶胶产品,具有1公里分辨率,特别适合研究大气污染状况。
关键参数速查表:
| 波段名称 | 描述 | 有效范围 | 单位 | 缩放系数 |
|---|---|---|---|---|
| Optical_Depth_047 | 蓝波段(0.47μm)AOD | -100~5000 | 无 | 0.001 |
| Optical_Depth_055 | 绿波段(0.55μm)AOD | -100~5000 | 无 | 0.001 |
| AOD_Uncertainty | AOD不确定性 | -100~30000 | 无 | 0.0001 |
提示:实际有效AOD值通常在0-3之间,负值表示数据缺失或异常
2. 数据加载与基础处理
打开GEE代码编辑器(https://code.earthengine.google.com/),在空白脚本区输入以下代码:
// 1. 加载数据集 var aodCollection = ee.ImageCollection('MODIS/006/MCD19A2_GRANULES') .select('Optical_Depth_047') // 选择蓝波段 .filterDate('2023-01-01', '2023-01-31'); // 时间范围 // 2. 计算月平均值 var meanAod = aodCollection.mean().multiply(0.001); // 应用缩放系数 // 3. 设置可视化参数 var visParams = { min: 0, max: 1.5, palette: ['green', 'yellow', 'red'] // 低到高污染颜色 }; // 4. 添加到地图 Map.addLayer(meanAod, visParams, 'January 2023 AOD'); Map.setCenter(116.4, 39.9, 4); // 默认定位到北京代码解析:
select()用于选择特定波段filterDate()限定时间范围multiply(0.001)是关键的缩放系数处理- 调色板采用交通灯颜色系统,直观显示污染程度
3. 高级可视化技巧
基础地图生成后,我们可以通过以下调整获得更专业的成果:
3.1 处理异常值
原始数据可能包含无效值(如-9999),添加掩膜处理:
// 过滤无效值 var validAod = meanAod.updateMask(meanAod.gte(0)); Map.addLayer(validAod, visParams, 'Valid AOD Data');3.2 动态范围调整
不同区域AOD值差异较大,可采用分位数拉伸:
// 自动计算2%-98%分位数 var stats = meanAod.reduceRegion({ reducer: ee.Reducer.percentile([2, 98]), geometry: Map.getBounds(true), scale: 1000, maxPixels: 1e9 }); var newVis = { min: stats.getNumber('p2'), max: stats.getNumber('p98'), palette: ['blue', 'cyan', 'green', 'yellow', 'red'] };3.3 添加图例
在UI面板插入这段代码创建颜色条:
// 创建图例 var legend = ui.Panel({ style: { position: 'bottom-right', padding: '8px' } }); function makeColorBarParams(palette) { return { bbox: [0, 0, 1, 0.1], dimensions: '100x10', format: 'png', min: 0, max: 1, palette: palette }; } var colorBar = ui.Thumbnail({ image: ee.Image.pixelLonLat().select(0), params: makeColorBarParams(visParams.palette), style: {stretch: 'horizontal', margin: '0 auto'} }); legend.add(ui.Label('AOD Value')); legend.add(colorBar); Map.add(legend);4. 结果导出与分享
完成可视化后,你可能需要导出图片或分享成果:
4.1 导出高清图片
Export.image.toDrive({ image: meanAod, description: 'Global_AOD_Export', scale: 1000, region: Map.getBounds(true), maxPixels: 1e10 });4.2 生成可分享链接
- 点击右上角"Get Link"按钮
- 设置权限为"Anyone with the link can view"
- 复制生成的URL分享给合作者
常见问题解决方案:
- 如果地图显示全黑:检查时间范围是否有数据
- 颜色异常:确认max/min值设置合理
- 报错"Computation timed out":缩小分析区域
5. 实战案例:区域对比分析
让我们比较京津冀和珠三角地区的冬季AOD差异:
// 定义两个区域 var jjj = ee.Geometry.Rectangle([113.5, 36.0, 119.5, 40.5]); var prd = ee.Geometry.Rectangle([112.0, 21.5, 115.5, 24.5]); // 计算区域均值 var jjjStats = meanAod.reduceRegion({ reducer: ee.Reducer.mean(), geometry: jjj, scale: 1000 }); var prdStats = meanAod.reduceRegion({ reducer: ee.Reducer.mean(), geometry: prd, scale: 1000 }); // 打印结果 print('京津冀平均AOD:', jjjStats.get('Optical_Depth_047')); print('珠三角平均AOD:', prdStats.get('Optical_Depth_047')); // 添加区域边界 Map.addLayer(jjj, {color: 'red'}, 'Jing-Jin-Ji'); Map.addLayer(prd, {color: 'blue'}, 'Pearl River Delta');在操作过程中,我发现蓝波段(0.47μm)的数据在沿海地区偶尔会出现异常高值,这时切换到绿波段(0.55μm)通常能得到更稳定的结果。对于长期监测项目,建议同时检查两个波段的数据质量。