Google earth engine下载哨兵影像

Google earth engine下载哨兵影像


前言

这里是超分任务之下载Sentinel-2光学影像。通过GEE平台处理并下载。

/**
 * 注意加载自己的shp数据
 */
var roi:
/**
 * 定义云掩膜函数
 */
function maskS2clouds(image) {
  var qa = image.select('QA60');
  var cloudBitMask = 1 << 10;
  var cirrusBitMask = 1 << 11;
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
               .and(qa.bitwiseAnd(cirrusBitMask).eq(0));
  return image.updateMask(mask).divide(10000);
}

/**
 * 定义文件名规范化函数(这里是因为我的shp属性名中有特殊字符需要处理,不影响数据下载)
 */
function normalizeFileName(name) {
  return name
    .replace(/\s+/g, '_')           // 将空格替换为下划线
    .replace(/[áàãâä]/g, 'a')       // 替换带重音的a
    .replace(/[éèêë]/g, 'e')        // 替换带重音的e
    .replace(/[íìîï]/g, 'i')        // 替换带重音的i
    .replace(/[óòõôö]/g, 'o')       // 替换带重音的o
    .replace(/[úùûü]/g, 'u')        // 替换带重音的u
    .replace(/[ñ]/g, 'n')           // 替换ñ
    .replace(/[^a-zA-Z0-9_]/g, ''); // 移除其他特殊字符
}

/***************************************
 *             数据准备阶段              *
 ***************************************/

// 1. 处理Sentinel-2数据
var s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
  .filterDate('2020-01-01', '2020-12-31')
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 5))
  .map(maskS2clouds)
  .select('B2','B3','B4','B8')
  .mean();

/***************************************
 *           数据统计和缩放              *
 ***************************************/

// 计算Sentinel-2每个波段的统计值
var s2Stats = s2.reduceRegion({
  reducer: ee.Reducer.minMax(),
  geometry: roi,
  scale: 10,
  maxPixels: 1e9
});

// 对Sentinel-2数据进行分波段缩放(归一化)
var s2_scaled = ee.Image([
  s2.select('B2').unitScale(s2Stats.get('B2_min'), s2Stats.get('B2_max')).multiply(255).uint8(),
  s2.select('B3').unitScale(s2Stats.get('B3_min'), s2Stats.get('B3_max')).multiply(255).uint8(),
  s2.select('B4').unitScale(s2Stats.get('B4_min'), s2Stats.get('B4_max')).multiply(255).uint8(),
  s2.select('B8').unitScale(s2Stats.get('B8_min'), s2Stats.get('B8_max')).multiply(255).uint8()
]).rename(['B2', 'B3', 'B4', 'B8']);

// 打印统计值以供参考
print('Sentinel-2 statistics:', s2Stats);

/***************************************
 *           批量导出功能实现            *
 ***************************************/

// 将矢量集合转换为客户端列表
var cityList = roi.toList(roi.size()).getInfo();

// 遍历每个城市
cityList.forEach(function(cityFeature) {
  // 获取城市属性并规范化名称
  var cityName = normalizeFileName(cityFeature.properties.UC_NM_MN);// UC_NM_MN是我要加载的属性字段名,需要替换为自己的shp数据字段名
  var cityGeometry = ee.Geometry(cityFeature.geometry);

  // 导出缩放后的Sentinel-2数据(导出至Google Drive)
  Export.image.toDrive({
    image: s2_scaled.clip(cityGeometry),
    description: 'S2_' + cityName + '_8bit',
    fileNamePrefix: 'S2_' + cityName + '_8bit',
    folder: 'spain_opt',
    region: cityGeometry,
    scale: 10,
    crs: 'EPSG:4326',
    maxPixels: 1e13,
    fileFormat: 'GeoTIFF'
  });
});

/***************************************
 *           地图可视化                 *
 ***************************************/

// 添加图层预览
Map.centerObject(roi, 8);

// 添加原始Sentinel-2预览
Map.addLayer(s2.clip(roi), {
  bands: ['B4', 'B3', 'B2'],
  min: 0,
  max: 0.3
}, 'Sentinel-2 Original');

// 添加缩放后的Sentinel-2预览
Map.addLayer(s2_scaled.clip(roi), {
  bands: ['B4', 'B3', 'B2'],
  min: 0,
  max: 255
}, 'Sentinel-2 8-bit');
Google Earth Engine (GEE) 中获取特定日期的Sentinel 卫星影像数据需要按照以下步骤操作: 1. **创建GEE账户并登录**:首先访问Google Earth Engine网站(https://earthengine.google.com/)并注册一个账号。 2. **导入所需库**:在GEEJavaScript环境中,你需要导入`ee`库,这是GEE的核心数据处理工具集。 ```javascript var ee = require('ee'); ``` 3. **设置时间范围**:指定你想要获取数据的具体日期。例如,如果你要找2022年5月1日的数据,可以这样做: ```javascript var date = ee.Date.fromYMD(2022, 5, 1); ``` 4. **选择 Sentinel 数据源**:Sentinel-2 是常用的高分辨率卫星数据。你可以使用`ee.ImageCollection`来检索特定传感器的数据: ```javascript var collection = ee.ImageCollection("COPERNICUS/S2") .filterDate(date, date.advance(1, 'day')); // 获取当天及前一天的数据 ``` 这里`.filterDate()`函数用于筛选日期范围内的图像。 5. **应用滤波器**:如果你想进一步筛选出特定波段或者区域,可以添加更多的过滤条件。比如只取Bands 4 (近红外) 和 8 (红边): ```javascript var image = collection.first() // 或者用mean(), median()等聚合方法 .select(['B4', 'B8']); ``` 6. **下载数据**:最后,使用`image.getThumbUrl({min: [0, 0], max: [0.3, 0.3]})`生成缩略图,然后利用`drive.flush()`将数据导出到Google Drive或其他云存储服务: ```javascript image.getThumbUrl({maxResolution: 10}).getDownloadURL().then(function(url) { // 下载链接 }); ``` 请注意,GEE对免费用户有一定的数据下载限制,并且实时下载可能会受到速率限制。实际操作时,请考虑数据量、许可证和GEE的服务条款。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值