基于GEE实现MODIS卫星影像的批量导出

这段代码在Google Earth Engine (GEE) 平台上实现了从MODIS卫星影像数据集中提取特定时间范围内的影像,对其进行裁剪,并批量导出到Google Drive。

总体功能

实现了从MODIS卫星影像数据集中提取特定时间范围内的影像,进行裁剪,并批量导出到Google Drive的功能。通过对影像进行裁剪和导出,可以获得研究区内指定时间范围内的高分辨率影像数据,用于进一步的分析和研究

数据集

  • 数据集:使用的是MODIS卫星影像数据集,具体为 MODIS/061/MOD09A1(Terra Surface Reflectance 8-Day Global 500m)。

代码流程和功能

  1. 代码解释

    • 设置研究区和时间范围

      • 定义了研究区 ROI 和时间范围 startDateendDate
    • 裁剪影像

      • 筛选出时间范围内的MODIS影像,并使用 clip 函数裁剪到研究区 ROI
    • 可视化参数

      • 定义可视化参数 visParams,包括波段选择、最小和最大值以及伽玛校正。
    • 在地图上可视化

      • 使用 Map.centerObject 将地图中心移动到研究区,并使用 Map.addLayer 添加影像到地图进行显示。
    • 批量导出影像

      • 使用 geetoolsoutput.Download.ImageCollection.toDrive 方法将影像集合批量导出到Google Drive,设置导出参数如分辨率、区域、最大像素数、数据类型和投影系统。

结果

  • 批量导出:将指定时间范围内的裁剪后的MODIS影像批量导出到Google Drive,文件夹名称为 GEE_Exported_Images
  • 导出设置
    • 分辨率:500米。
    • 区域:研究区 ROI
    • 最大像素数:1e13。
    • 数据类型:int16。
    • 投影系统:EPSG:4326。

注意

时间跨度不要太大,不然会运行崩溃。

完整代码:

// MOD09A1 (Terra Surface Reflectance 8-Day Global 500m) 

// 设置研究区
var ROI = table;

// 定义裁剪函数
function clip(image) {
  return image.clip(ROI);
}

// 设置时间范围
var startDate = "2012-12-25";
var endDate = "2013-01-01";

// 筛选 MOD09A1 数据集并裁剪影像
var Terra_SR_8d = ee.ImageCollection('MODIS/061/MOD09A1')
                    .filterDate(startDate, endDate)
                    .map(clip);

// 可视化参数
var visParams = {
  bands: ['sur_refl_b01', 'sur_refl_b04', 'sur_refl_b03'], // 使用近红外、红光和蓝光波段
  min: 0,
  max: 3000,
  gamma: 1.4
};

// 添加影像到地图进行可视化
Map.centerObject(ROI, 9); // 将地图中心移动到研究区
Map.addLayer(Terra_SR_8d.mean(), visParams, 'MODIS Composite');

// 批量导出影像
var output = require('users/fitoprincipe/geetools:batch');

// https://github.com/fitoprincipe/geetools-code-editor
output.Download.ImageCollection.toDrive(Terra_SR_8d, "GEE_Exported_Images", {
  scale: 500, // 分辨率 (m)
  region: ROI, // 感兴趣区
  maxPixels: 1e13, // 默认为 1e8
  type: "int16", // 导出影像到 Drive 时,影像波段的数据类型必须一致;Asset 则不需要
  crs: "EPSG:4326" // 不设置,默认导出 MODIS_Sinusoidal 投影系统
});

/* 
output.Download.ImageCollection.toDrive()
output.Download.ImageCollection.toDrive(ImageCollection, Folder name in your Drive, options of Export.image.toDrive())

Export.image.toDrive 中的参数都可以在 option 中更改
Export.image.toDrive(image, description, folder, fileNamePrefix, dimensions, region, scale, crs, crsTransform, maxPixels, shardSize, fileDimensions, skipEmptyTiles, fileFormat, formatOptions)
*/

最后注释的内容提供了有关 output.Download.ImageCollection.toDrive() 方法的使用说明。以下是对注释的详细解释:

解释

  1. 方法概述

    • output.Download.ImageCollection.toDrive() 是一个用于将 ImageCollection 批量导出到 Google Drive 的方法。
  2. 方法签名

    • output.Download.ImageCollection.toDrive(ImageCollection, Folder name in your Drive, options of Export.image.toDrive())
      • ImageCollection:要导出的影像集合。
      • Folder name in your Drive:存储在 Google Drive 中的文件夹名称。
      • options of Export.image.toDrive():导出时的参数选项,与 Export.image.toDrive() 方法的参数相同。
  3. 导出选项

    • Export.image.toDrive 方法中的参数都可以在 option 中更改。这些参数包括:
      • image:要导出的影像。
      • description:导出任务的描述。
      • folder:存储在 Google Drive 中的文件夹名称。
      • fileNamePrefix:文件名前缀。
      • dimensions:导出影像的像素尺寸。
      • region:要导出的区域。
      • scale:导出的分辨率。
      • crs:投影坐标系统。
      • crsTransform:自定义的坐标变换。
      • maxPixels:最大像素数。
      • shardSize:分片大小。
      • fileDimensions:每个文件的尺寸。
      • skipEmptyTiles:是否跳过空的瓦片。
      • fileFormat:文件格式。
      • formatOptions:格式选项。

运行结果:

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
dNBR值(differenced Normalized Burn Ratio)是衡量火灾烈度的指标之一,可以通过MODIS/061/MCD64A1数据计算得到。 以下是基于GEE计算dNBR值的步骤: 1. 打开GEE平台并登录账号。 2. 在左侧菜单栏中选择“地图”选项,进入地图界面。 3. 在地图界面中,点击左上角的“+”按钮,添加MODIS/061/MCD64A1数据。 4. 在左侧图层栏中选择“MODIS/061/MCD64A1_500m_aid0001”图层,并调整时间范围至所需的时间段。 5. 在左侧菜单栏中选择“代码编辑器”,并在编辑器中输入以下代码: ``` // 定义AOI区域 var aoi = ee.Geometry.Polygon( [[[113.0, 33.0], [115.0, 33.0], [115.0, 35.0], [113.0, 35.0], [113.0, 33.0]]], null, false); // 选择计算的时间段 var start_date = ee.Date.fromYMD(2019, 1, 1); var end_date = ee.Date.fromYMD(2019, 12, 31); // 选择计算的MODIS波段 var modis_bands = ['BurnDate','QA']; // 筛选出指定时间段内的MODIS数据 var modis_dataset = ee.ImageCollection('MODIS/006/MCD64A1') .select(modis_bands) .filterDate(start_date, end_date) .filterBounds(aoi); // 定义NDVI计算公式 var nbr_formula = function(image) { var nbr = image.normalizedDifference(['sur_refl_b04', 'sur_refl_b07']); return nbr.rename('NBR'); }; // 计算dNBR值 var pre_fire = ee.Image(modis_dataset.sort('system:time_start', false).first()).select('BurnDate'); var post_fire = ee.Image(modis_dataset.sort('system:time_start', true).first()).select('BurnDate'); var pre_nbr = nbr_formula(pre_fire); var post_nbr = nbr_formula(post_fire); var dNBR = post_nbr.subtract(pre_nbr).rename('dNBR'); // 将结果可视化 Map.centerObject(aoi, 9); Map.addLayer(dNBR, {min:-1,max:1,palette:['FF0000','FFFF00','00FF00']}, 'dNBR'); ``` 上述代码中,首先定义了计算区域(AOI)、计算时间段(start_date和end_date)以及需要计算的MODIS波段(modis_bands)。接着,通过ImageCollection函数筛选出指定时间段内的MODIS数据,并选择需要的波段。定义了计算dNBR值所需的函数(nbr_formula),并使用该函数计算出前火情(pre_fire)和后火情(post_fire)的NBR值,最终得出dNBR值(dNBR)。最后将结果可视化,其中min、max和palette参数可根据需要进行调整。 完成上述代码的输入和运行后,即可在地图上看到计算得到的dNBR值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值