使用Google Earth Engine (GEE) 分析海表叶绿素浓度的时间序列变化
在这篇博客中,我们将介绍如何使用Google Earth Engine (GEE) 分析特定区域的海表叶绿素浓度(Chlorophyll-a, Chl-a)的时间序列变化。叶绿素浓度是衡量海洋浮游植物生物量的重要指标,对于研究海洋生态系统和气候变化具有重要意义。我们将使用JAXA提供的GCOM-C卫星数据,并通过GEE的JavaScript API来实现这一过程。
1. 定义感兴趣区域(ROI)
首先,我们定义了一个点作为感兴趣区域(ROI),即我们要分析的区域。这里我们选择了日本附近的一个点:
var geometry = ee.Geometry.Point([135.08430617765364, 39.39949021776264]);
为了更清晰地展示区域范围,我们还加载了该点所在的国家边界:
var country = ee.FeatureCollection("FAO/GAUL/2015/level0").filterBounds(geometry);
Map.addLayer(country); // 将国家边界添加到地图
Map.centerObject(geometry, 4); // 将地图中心设置为该点,缩放级别为4
2. 加载叶绿素浓度数据
我们使用JAXA提供的GCOM-C卫星数据,选择了CHLA_AVE
(叶绿素浓度平均值)波段,并过滤了2021年12月24日至2022年12月20日的数据:
var Vaporpressure = ee.ImageCollection("JAXA/GCOM-C/L3/OCEAN/CHLA/V3")
.select('CHLA_AVE')
.filterBounds(geometry)
.filterDate('2021-12-24', '2022-12-20');
为了确保数据的一致性,我们对每幅影像进行了裁剪和单位转换:
var Vaporpressure = Vaporpressure.map(function(img) {
return img.clip(geometry)
.multiply(1) // 单位转换(如果需要)
.subtract(0) // 数据偏移(如果需要)
.add(0) // 数据偏移(如果需要)
.copyProperties(img, ['system:time_start']);
});
打印影像集合的大小以确认数据加载成功:
print(Vaporpressure.size());
3. 可视化叶绿素浓度
我们将叶绿素浓度的平均值添加到地图中,并使用颜色条带表示浓度范围:
Map.addLayer(Vaporpressure.mean(), {
min: -10897.557992254591,
max: 17662.01839438519,
palette: ['#00007f', '#0000ff', '#007fff', '#00ffff', '#7fff7f', '#ffff00', '#ff7f00', '#ff0000', '#7f0000']
}, 'chl');
4. 创建叶绿素浓度时间序列图
为了分析叶绿素浓度随时间的变化,我们创建了一个时间序列图:
print(ui.Chart.image.series({
imageCollection: Vaporpressure,
region: geometry,
reducer: ee.Reducer.mean(),
scale: 4638.3,
xProperty: 'system:time_start'
}).setSeriesNames(['海表浮游植物中叶绿素-a的浓度'])
.setOptions({
title: '海表浮游植物中叶绿素-a的浓度',
hAxis: {title: '时间'},
vAxis: {title: '浓度 (mg/m^3)'},
interpolateNulls: true,
lineWidth: 1,
pointSize: 2,
curveType: 'function'
}));
5. 添加图例
为了更直观地理解地图中的颜色条带,我们添加了一个图例:
// 创建图例面板
var legend = ui.Panel({
style: {
position: 'bottom-right', // 将面板放置在右下角
padding: '8px 13px' // 添加内边距
}
});
// 添加图例标题
var legendTitle = ui.Label({
value: '叶绿素浓度', // 标题文本
style: {
fontWeight: 'bold', // 字体加粗
fontSize: '18px', // 字体大小
margin: '0 0 4px 0', // 外边距
padding: '0' // 无内边距
}
});
legend.add(legendTitle);
// 创建垂直颜色条
var makeColorBar = function(palette) {
var colorBar = ui.Thumbnail({
image: ee.Image.pixelLonLat().select(1), // 使用纬度作为渐变图像
params: {
bbox: [0, 0, 0.1, 1], // 创建垂直颜色条
dimensions: '10x100', // 设置颜色条大小
format: 'png', // 图像格式
min: 0, // 颜色条最小值
max: 1, // 颜色条最大值
palette: palette // 使用提供的颜色条带
},
style: {stretch: 'vertical', margin: '8px 0'} // 垂直拉伸颜色条
});
return colorBar;
};
// 定义颜色条带
var palette = ['#00007f', '#0000ff', '#007fff', '#00ffff', '#7fff7f', '#ffff00', '#ff7f00', '#ff0000', '#7f0000'];
// 添加最小值和最大值标签
var minLabel = ui.Label({
value: '172', // 最小值标签
style: {margin: '4px 8px'}
});
var maxLabel = ui.Label({
value: '162', // 最大值标签
style: {margin: '4px 8px'}
});
// 将标签和颜色条添加到图例面板
legend.add(minLabel); // 添加最小值标签
legend.add(makeColorBar(palette)); // 添加颜色条
legend.add(maxLabel); // 添加最大值标签
// 将图例添加到地图
Map.add(legend);
总结
通过以上步骤,我们成功地使用Google Earth Engine分析了特定区域的海表叶绿素浓度时间序列变化。通过地图可视化和时间序列图,我们可以直观地观察到叶绿素浓度的空间分布和时间变化趋势。这些数据对于研究海洋生态系统健康、浮游植物动态以及气候变化的影响具有重要意义。