GEE学习笔记 六十:GEE中生成GIF动画

生成GIF动画这个是GEE新增加的功能之一,这一篇文章我会简单介绍一下如何使用GEE来制作GIF动画。

相关API如下:

GEE学习笔记 六十:GEE中生成GIF动画_第1张图片

参数含义:

    params:设置GIF动画显示参数,详细的参数可以参考ee.data.getMapId()

    callback:回调函数

其实还有另外的一个方法可以生成GIF动画就是使用缩略图的方式,具体的API如下所示:

GEE学习笔记 六十:GEE中生成GIF动画_第2张图片

如果只是查看API我们发现他并没有说这个可以生成GIF动画,这个是GEE的官方没有及时的更新文档造成的问题。我们在实际使用中会经常直接使用ui.Thumbnail来做相关gif动画输出,如果要使用getVideoThumbURL()也类似。

下面是我做的一个黄河口近三十年的变化动图

下面我会介绍如何做这个动态图。

(1)首先我们选定一个区域作为展示区域,具体区域如下图:

GEE学习笔记 六十:GEE中生成GIF动画_第3张图片

 

(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学习笔记 六十:GEE中生成GIF动画_第4张图片

 


大家如果有问题需要交流或者有项目需要合作,可以微信联系我,加微信好友请留言加上“GEE”。

知乎专栏:https://zhuanlan.zhihu.com/c_123993183

CSDN:https://blog.csdn.net/shi_weihappy

微信号:shi_weihappy

你可能感兴趣的:(GEE,GEE开发)