生成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图区域不能选择太大;二是区域内包含的像素点不能太多。
运行结果:
来源请引用:地理遥感生态网科学数据注册与出版系统.