从GEE中批量导出S5P的图像数据(tif)

需求分析:需要下载s5p数据用于模型的构建,时间范围为1年~2年,空间范围为自定义范围矩阵。

提取数据可视化(S5P_L3_NO2_2019_Mean):
从GEE中批量导出S5P的图像数据(tif)_第1张图片
一、Methods。gee code平台默认为js处理器,虽然也可以自己构建python环境,但是很累。

// 这里的有效范围:2018-06-28T10:24:07Z - 2022-03-19T00:00:00
// S5P卫星的上天时间:2017-10-13
// 数据原始的分辨率:7x3.5km2

// (1)set the boundary
var china_bound = ee.FeatureCollection(
      ee.Geometry.Polygon({
        coords: [[72.5, 54.5], [72.5,18], [136.25, 18], [136.25, 54.5]],   // 自定义研究区域
        geodesic:false
      })); /

// (2)define the time range 
var start = ee.Date.fromYMD(2019, 1, 1);
var end = ee.Date.fromYMD(2019, 12,31);
var n_days = end.difference(start, 'day').round(); // 获得总天数
var date_list = ee.List.sequence(0, n_days, 1);  // 获得原始的时间序列

function list2date(n){
  return start.advance(n, 'day')   // 根据偏移得到每天的范围
}
var dates = date_list.map(list2date);  // 得到对应的每天

function getrg(d1){
  var dg = ee.Date(d1).getRange( 'day' );  // 得到每天对应的range
return dg;}
var daterg = dates.map(getrg);    // 得到我们数据每天对应的range
print(daterg, daterg.get(0))

// (3) select the data by the date range
var imgcol = ee.ImageCollection('COPERNICUS/S5P/OFFL/L3_NO2')
  .select('tropospheric_NO2_column_number_density') // 自定义数据以及波段
  
function rg2im(rg){

  var day_image = imgcol.filterDate(rg)
  var name = day_image.first().date().format('YYYY-MM-dd')
  var image = day_image.mosaic().set('system:id', name)

  return image
}
var images = daterg.map(rg2im)
print(images)
var test = ee.ImageCollection(images)
print(test)


// (4) 多张图片的保存
// (4.1) 将365张日图像合并为具有多个波段的一张图像
// var year_image = test.toBands()  // 将多张图像合并为一张图像的多个波段
// print(year_image)

// Export.image.toDrive({
//   image: year_image,
//   description: 'NO2_year_2019',
//   scale: 1113.2,
//   folder: 'NO2',
//   region: china_bound,
// });
// (4.2) 多张图像依次导出
// (4.2.1) 根据map函数依次导出,name 对应日期
// emm, 这里getInfo()服务器端使用,因此这里代码不可行
// function exportImage(img){
//     Export.image.toDrive({
//       image: img,
//       description: img.get('system:id').getInfo(),
//       scale: 1113.2,
//       folder: 'NO2',
//       region: china_bound
//     });
// }
// // test.first().map(exportImage)
// exportImage(test.first())

// (4.2.2) 根据其他作者的封装函数,进行批量导出
var batch = require('users/fitoprincipe/geetools:batch');
// 使用limit(3),即用三张图片作为测试
batch.Download.ImageCollection.toDrive(test.limit(3), "S5P Download", 
      {name: 'S5P_{system:id}',
      region: china_bound,
      folder: 'NO2', 
      })


// (5)将获得的图像可视化
var band_viz = {
  min: 0,
  max: 0.0002,
  palette: ['black', 'blue', 'purple', 'cyan', 'green', 'yellow', 'red']
};

Map.addLayer(ee.Image(images.get(0)).clip(china_bound), band_viz, 'day 0');  // 添加layer的时候需要将图片定义到服务器
Map.addLayer(ee.Image(images.get(1)).clip(china_bound), band_viz, 'day 1');  // 添加layer的时候需要将图片定义到服务器
Map.addLayer(ee.Image(images.get(2)).clip(china_bound), band_viz, 'day 2');  // 添加layer的时候需要将图片定义到服务器
Map.addLayer(ee.Image(images.get(-1)).clip(china_bound), band_viz, 'day -1');  // 添加layer的时候需要将图片定义到服务器
Map.addLayer(test.mean().clip(china_bound), band_viz, 'year mean');
// Map.addLayer(ds.first().clip(china_bound), band_viz, 'S5P N02');
Map.setCenter(104.5, 28.5, 3);
// // print(ds)

    代码分析:在(2) define the time range里,advance函数可以在start日期的基础上以’day‘的格式添加n天,达到遍历全年的效果;getRange函数可以在’day’的格式上得到该天的一个时间范围。最后通过map函数得到全年的image.
        重要的地方在于将处理好的image导出到drive。在得到全年的image之后,想的办法是通过函数将image一张一张导出,花费了蛮多时间研究异步导出;后来GEE交流群里大神的代码提到可可以通过image.toBands() 方法将大量图片转为一张图片的众多波段,简直是妙不可言。
        在选定图像提交run之后,按f12打开控制台,输入代码进行批量RUN:

function runTaskList() {
    var runButtons = document.querySelector('#task-pane').shadowRoot.querySelectorAll(".run-button")
     runButtons.forEach(function(e) {e.click()})
}
runTaskList()
setTimeout( 
    function(){
       var taskDialog = document.querySelectorAll("ee-image-config-dialog") //table的话-image-改成-table-
        taskDialog.forEach(function(e) {e.shadowRoot.querySelector("ee-dialog").shadowRoot.querySelector("paper-dialog").querySelector(".ok-button").click()})
 },5 * 1000 );  

二、Result:
从GEE中批量导出S5P的图像数据(tif)_第2张图片
输出一个包含365个波段的Image图像,方便导出到drive以及后续的下载。
三、简单验证:
在可视化里分别输出该数据集在2019年第一天和最后一天的图像
从GEE中批量导出S5P的图像数据(tif)_第3张图片
从GEE中批量导出S5P的图像数据(tif)_第4张图片

参考文章:google earth engine随缘学习(十二)批量下载影像&批量执行RUN任务(2021-9-17已更新,见末尾)

你可能感兴趣的:(遥感可视化,javascript,大数据)