GEE学习笔记 八十:批量下载影像(影像集合)

GEE导出这个我之前写过相关内容,下面链接是之前写的内容。

  • https://zhuanlan.zhihu.com/p/37631518

  • https://zhuanlan.zhihu.com/p/37685115

最近问如何批量导出集合的小伙伴非常多,一个一个回复太麻烦,我这里直接给一段例子代码吧:

var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_SR");

var roi = /* color: #d63000 */ee.Geometry.Polygon(

        [[[115.64960937499995, 39.112756306811285],

          [116.28681640624995, 39.163883889810315],

          [116.21540527343745, 39.58850167846649],

          [115.70454101562495, 39.6054326422912]]]);


Map.centerObject(roi, 8);


function rmL8Cloud(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);

}


var l8Imgs = l8.filterBounds(roi)

               .filterDate("2018-1-1", "2018-3-1")

               .map(rmL8Cloud);

print("l8Imgs", l8Imgs);

Map.addLayer(l8Imgs, {min:0, max:3000, bands:["B4","B3","B2"]}, "l8Imgs");

Map.addLayer(roi, {color: "red"}, "roi");



//影像集合导出方法

function exportImageCollection(imgCol) {

  var indexList = imgCol.reduceColumns(ee.Reducer.toList(), ["system:index"])

                        .get("list");

  indexList.evaluate(function(indexs) {

    for (var i=0; i

 

代码分析:

我这里说几个要注意的地方吧

(1)这里使用的是异步导出数据方式 evaluate() 方法

(2)导出代码中有一句话

image = image.toInt16();

这句话的作用是将image影像的波段都强制转为Int16类型数据,这么做的原因是使用toDrive()方法影像的波段类型必须是一致的,这点和导出到Asset不太一样

(3)region参数必须要设置,同时需要注意的是它的类型是geometry,不是featureCollection。如果我们用的是矢量集合,那么一般做法是:

featureCollection.geometry().bounds()作为region的参数

(4)maxPixels必须设置,因为我们在导出大范围的影像时候会出现默认参数过小导致导出失败(默认参数是1e8)

(5)crs推荐设置为EPSG:4326

 

运行结果:

GEE学习笔记 八十:批量下载影像(影像集合)_第1张图片

导出界面

GEE学习笔记 八十:批量下载影像(影像集合)_第2张图片

导出到drive后

 


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

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

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

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