生成GIF动画这个是GEE新增加的功能之一,这一篇文章我会简单介绍一下如何使用GEE来制作GIF动画。
相关API如下:
参数含义:
params:设置GIF动画显示参数,详细的参数可以参考ee.data.getMapId()
callback:回调函数
其实还有另外的一个方法可以生成GIF动画就是使用缩略图的方式,具体的API如下所示:
如果只是查看API我们发现他并没有说这个可以生成GIF动画,这个是GEE的官方没有及时的更新文档造成的问题。我们在实际使用中会经常直接使用ui.Thumbnail来做相关gif动画输出,如果要使用getVideoThumbURL()也类似。
下面是我做的一个黄河口近三十年的变化动图
下面我会介绍如何做这个动态图。
(1)首先我们选定一个区域作为展示区域,具体区域如下图:
(2)相关生成GIF动画的代码如下:
var roi =
/* color: #d63000 */
/* displayProperties: [
{
"type": "rectangle"
}
] */
ee.Geometry.Polygon(
[[[118.76701352910152, 37.95798438938449],
[118.76701352910152, 37.58456192342209],
[119.38224790410152, 37.58456192342209],
[119.38224790410152, 37.95798438938449]]], null, false),
l8_sr = ee.ImageCollection("LANDSAT/LC08/C01/T1_SR");
Map.centerObject(roi, 8);
Map.addLayer(roi, {color: "red"}, "roi");
var sDate = "2013-1-1";
var eDate = "2019-1-1";
var l8Col = l8_sr.filterDate(sDate, eDate)
.filterBounds(roi)
.map(function(image) {
var cloudShadowBitMask = 1 << 3;
var cloudsBitMask = 1 << 5;
var qa = image.select('pixel_qa');
var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
.and(qa.bitwiseAnd(cloudsBitMask).eq(0));
return image.updateMask(mask);
})
.map(function(image) {
var time_start = image.get("system:time_start");
image = image.multiply(0.0001);
image = image.set("system:time_start", time_start);
return image;
})
.select(["B2","B3","B4"], ['blue','green','red']);
print(l8Col.limit(1));
print(l8Col.size());
var yearList = ee.List.sequence(ee.Date(sDate).get("year"), ee.Number(ee.Date(eDate).get("year")).subtract(1));
var yearImgList = yearList.map(function(year) {
year = ee.Number(year);
var _sdate = ee.Date.fromYMD(year, 1, 1);
var _edate = ee.Date.fromYMD(year.add(1), 1, 1);
var tempCol = l8Col.filterDate(_sdate, _edate);
var img = tempCol.median().clip(roi);
img = img.set("year", year);
img = img.set("system:index", ee.String(year.toInt()));
return img;
});
var imgCol = ee.ImageCollection.fromImages(yearImgList);
print("imgCol", imgCol);
// 使用缩略图来制作展示
var params = {
crs: 'EPSG:3857',
framesPerSecond: 2,
region: roi,
min: 0.0,
max: 0.3,
bands: ["red", "green", "blue"],
dimensions: 512,
};
print(ui.Thumbnail(imgCol, params));
print(imgCol.getVideoThumbURL(params));
代码分析:
需要注意的问题,一是制作GIF图区域不能选择太大;二是区域内包含的像素点不能太多。
运行结果:
大家如果有问题需要交流或者有项目需要合作,可以微信联系我,加微信好友请留言加上“GEE”。
知乎专栏:https://zhuanlan.zhihu.com/c_123993183
CSDN:https://blog.csdn.net/shi_weihappy
微信号:shi_weihappy