使用GEE下载哨兵2号影像(初学者版)

博主因需用GEE大批量下载满足要求的哨兵2号影像,在学习GEE和Java过程中记录学习过程。博客介绍代码参考,包括加载矢量边界、搜索数据、保存到谷歌云端硬盘等,还对哨兵数据进行详解,并对代码各部分操作进行解释,适合新手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

写在前面

一、代码参考

1. 加载矢量边界

2. 搜索数据

3. 保存到谷歌云端硬盘

二、保存到谷歌云端硬盘并查看

三、哨兵数据详解

四、代码详解

1. district.geometry()

2. Map的一系列操作

3. image.select('QA60')

 4. <<及去云操作

5. dataset.median()

6. dataset.mosaic()


写在前面

       最近需要使用GEE大批量下载满足要求的哨兵2号影像,由于之前没有学习过GEE和java,在学习过程中一直摸爬滚打。此篇博文主要对网上的现有资料进行搬运,记录自己的学习过程。

一、代码参考

GEE 01 -Sentinel2A 哨兵数据下载_gee下载哨兵数据-CSDN博客

1. 加载矢量边界

// 1. load shp
var district = ee.FeatureCollection("users/xxx/xxx");

// var dsize = district.size();
// print(dsize);   // 1

var district_geometry = district.geometry();   //geometry the image

Map.centerObject(district_geometry, 12);   // the level of scale
Map.addLayer(district);

2. 搜索数据

// 2. find data
function maskS2clouds(image) {
  var qa = image.select('QA60');   // using QA band to wipe off the cloud

  // Bits 10 and 11 are clouds and cirrus, respectively.
  var cloudBitMask = 1 << 10;   // amplify the varity
  var cirrusBitMask = 1 << 11;

  // Both flags should be set to zero, indicating clear conditions.
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
      .and(qa.bitwiseAnd(cirrusBitMask).eq(0));

  // return image.updateMask(mask).divide(10000);
  return image.updateMask(mask);
}


// Map the function over one year of data.
// Load Sentinel-2 TOA reflectance data.
var dataset = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
                  .filterBounds(district_geometry)
                  .filterDate('2017-01-01', '2021-01-01')
                  // Pre-filter to get less cloudy granules.
                  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
                  .map(maskS2clouds);
                  
                

var rgbVis = {
  min: 0.0,
  max: 0.3,
  bands: ['B4', 'B3', 'B2'],
};

Map.addLayer(dataset.median(), rgbVis, 'RGB');

3. 保存到谷歌云端硬盘

// 3. export to drive
var exportdataset =  ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
                  .filterBounds(district_geometry)
                  .filterDate('2020-01-01', '2021-01-01')
                  // Pre-filter to get less cloudy granules.
                  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
                  .map(maskS2clouds)
                  .select(['B4', 'B3', 'B2']);
                  
  var mosaic = exportdataset.mosaic();
  
  Export.image.toDrive({
      image:mosaic,
      description:'maolan_20',
      scale:10,
      maxPixels: 1e13,
      region:district_geometry,
      fileFormat: 'GeoTIFF',
      formatOptions: {
        cloudOptimized: true
      }
    });

二、保存到谷歌云端硬盘并查看

谷歌云端硬盘链接:Google 云端硬盘

GEE批量下载处理遥感数据教程及代码分享_哔哩哔哩_bilibili

三、哨兵数据详解

哨兵2号(Sentinel-2)介绍、下载、预处理及批处理-CSDN博客

四、代码详解

       该部分主要是对第一部分代码的解释,以及究竟为什么要这么写(超级适合新手)。

1. district.geometry()

GEE(Google Earth Engine)——将集合的几何图形绘制到图像上 - 知乎

2. Map的一系列操作

       在代码中主要包括Map.centerObject、Map.addLayer

GEE必须会教程—Map工具的使用_gee map.addlayer-CSDN博客

3. image.select('QA60')

       使用QA60波段标记实现去云(QA60为哨兵数据提供的用于cloud mask的影像控制波段),下面是GEE中对QA60的介绍:

GEE学习笔记 九十二:Sentinel-2 最新去云方法总结 - 知乎

4. <<及去云操作

       对哨兵2A数据10、11波段的操作用到了<<,<<为左移运算符,将这两个波段对应的变量1分别变为了原来的2的10次方和2的11次方,即1024和2048。

Java中的 << , >> , 和 >>>所代表的含义_java <<-CSDN博客

       对该部分的整体理解请看这里:

GEE常用的除云函数及如何理解并运用#Landsat#Sentinel_gee中divide函数-CSDN博客

       经过处理后,像元值为0的像元表示无云像元,像元值为1的像元表示有云像元。

5. dataset.median()

       dataset.median()对一段时间内的影像取中位数,关于中位数与平均数的选择可以参考下面的博文:

Google Earth Engine(GEE)——对于我们正确使用mean()和median()来使影像进行聚合_gee中的.median()什么意思-CSDN博客

6. dataset.mosaic()

       将GEE中的影像集合拼接为单张影像:

GEE学习笔记 五十九:GEE中mosaic、qualityMosaic、max区别 - 知乎

### 使用 Google Earth Engine (GEE) 下载 Sentinel-2 MSI 数据 #### 准备工作 在 GEE下载 Sentinel-2 MSI 数据前,需完成以下准备工作: 1. 创建并登录到自己的 GEE 账户。 2. 安装 GEE 的 Python API 或者使用在线 Code Editor 进行操作。 #### 编写脚本 以下是用于筛选、处理以及导出 Sentinel-2 MSI 数据的代码示例: ```javascript // 定义研究区域(以宁夏为例) var roi = ee.Geometry.Rectangle([105, 36, 107, 38]); // 加载 Sentinel-2 数据集 var sentinel2 = ee.ImageCollection('COPERNICUS/S2') .filterDate('2023-01-01', '2023-01-31') // 设置时间范围 .filterBounds(roi); // 筛选覆盖 ROI 的图像 // 打印集合信息至控制台 print(sentinel2); // 计算 NDVI 并添加为新波段 var addNDVI = function(image) { var ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI'); return image.addBands(ndvi); }; var withNDVI = sentinel2.map(addNDVI); // 导出带有 NDVI 波段的数据 Export.image.toDrive({ image: withNDVI.first(), // 只导出第一个影像 description: 'sentinel2_ndvi_export', scale: 10, // 输出分辨率为 10 米 region: roi, maxPixels: 1e13 // 增加最大像素数限制 }); ``` 上述代码实现了以下几个功能: - **定义感兴趣区域 (ROI)**:通过 `ee.Geometry` 方法指定地理边界[^2]。 - **加载数据**:利用 `ImageCollection` 和过滤器获取特定时间和空间范围内的 Sentinel-2 图像。 - **计算 NDVI**:基于近红外波段 (`B8`) 和红光波段 (`B4`) 计算归一化植被指数 (NDVI)[^1]。 - **导出数据**:将处理后的图像保存到用户的 Google Drive 上。 #### 注意事项 1. 需要调整日期范围和地理位置来匹配具体需求。 2. 如果目标区域内存在大量云层,则可以引入哨兵-2 L2A 数据中的场景分类图层 (SCL),剔除被标记为高概率云或阴影的部分[^3]。 ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值