目录
写在前面
最近需要使用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中的影像集合拼接为单张影像: