Google Earth Engine(GEE)—— 在 GEE 中为图像几何动画添加文本和图例信息
代码:
/// 获取一个 MODIS NDVI 集合,并选择 NDVI。
var col = ee.ImageCollection('MODIS/006/MOD13A2').select('NDVI');
// 定义一个掩码,通过它来过滤边界获取 NDVI 数据。
var mask = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017')
.filter(ee.Filter.eq('wld_rgn', 'Africa'));
// 定义动画帧的区域界线。
var region = ee.Geometry.Polygon(
[[[-18.698368046353494, 38.1446395611524],
[-18.698368046353494, -36.16300755581617],
[52.229366328646506, -36.16300755581617],
[52.229366328646506, 38.1446395611524]]],
null, false
);
// 为每张图片添加年月日(DOY)属性。
col = col.map(function(img) {
var doy = ee.Date(img.get('system:time_start')).getRelative('day', 'year');
return img.set('doy', doy);
});
// 获得由 'doy' 提供的明显的图像集合。
var distinctDOY = col.filterDate('2013-01-01', '2014-01-01');
// 定义一个过滤器,以确定哪些图片来自完整的 集合中的哪些图片与不同的 DOY 集合中的 DOY 相匹配。
var filter = ee.Filter.equals({leftField: 'doy', rightField: 'doy'});
// 定义一个连接。
var join = ee.Join.saveAll('doy_matches');
// 应用连接并将得到的 FeatureCollection 转换为 ImageCollection。
var joinCol = ee.ImageCollection(join.apply(distinctDOY, col, filter));
// 在匹配的 DOY 集合中应用中位数合成影像。
var comp = joinCol.map(function(img) {
var doyCol = ee.ImageCollection.fromImages(
img.get('doy_matches')
);
return doyCol.reduce(ee.Reducer.median());
});
// 定义 RGB 可视化参数。
var visParams = {
min: 0.0,
max: 9000.0,
palette: [
'FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901',
'66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01',
'012E01', '011D01', '011301'
],
};
// 添加一个带有标签的颜色渐变条。这里是从 gena 这个包中获取的
var style = require('users/gena/packages:style');
var utils = require('users/gena/packages:utils');
var text = require('users/gena/packages:text');
var geometryGradientBar = ee.Geometry.Polygon(
[[[-12.907508407699103, -26.822938080181096],
[-12.907508407699103, -29.915752084430412],
[10.207725967300876, -29.915752084430412],
[10.207725967300876, -26.822938080181096]]], null, false);
var min = 0;
var max = 1;
var textProperties = {
fontSize: 32,
textColor: 'ffffff',
outlineColor: '000000',
outlineWidth: 0,
outlineOpacity: 0.6
};
var labels = ee.List.sequence(min, max);
var gradientBar = style.GradientBar.draw(geometryGradientBar, {
min: min, max: max, palette: visParams.palette, labels: labels,
format: '%.0f', text: textProperties
});
// 创建 RGB 可视化图像,作为动画帧使用。
// 将梯度条和标签图像与 NDVI 图像混合。
var label = 'NDVI';
var scale = 19567;
var geometryLabel = ee.Geometry.Point([-6.052039657699084, -20.837091553700866]);
var text = text.draw(label, geometryLabel, scale, {fontSize: 32});
var rgbVis = comp.map(function(img) {
return img.visualize(visParams).clip(mask).blend(gradientBar).blend(text);
});
// 定义 GIF 的可视化参数。
var gifParams = {
'region': region,
'dimensions': 600,
'crs': 'EPSG:3857',
'framesPerSecond': 10,
'format': 'gif'
};
// 打印 GIF 的 URL 到控制台。
print(rgbVis.getVideoThumbURL(gifParams));
// 在控制台中渲染 GIF 动画。
print(ui.Thumbnail(rgbVis, gifParams));