Google earth engine下载哨兵影像

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 处理哨兵卫星数据 Google Earth Engine (GEE) 是一个强大的云计算平台,能够高效处理和分析大规模地理空间数据。对于哨兵卫星数据(如 Sentinel-1 和 Sentinel-2),可以通过 GEE 提供的功能实现多种操作,包括但不限于数据预处理、时间序列分析、特征提取等。 #### 数据加载与筛选 在 GEE 中,可以轻松访问公开的哨兵卫星数据集。例如,通过 `ee.ImageCollection` 加载 Sentinel-2 数据,并设置时间和地理位置过滤条件: ```javascript // 定义研究区域 (AOI) var aoi = ee.Geometry.Rectangle([78, 15, 80, 17]); // 加载 Sentinel-2 图像集合 var sentinel2 = ee.ImageCollection('COPERNICUS/S2') .filterDate('2023-01-01', '2023-12-31') // 时间范围 .filterBounds(aoi); // 地理位置范围 print('Sentinel-2 Image Collection:', sentinel2); ``` 此代码片段展示了如何加载指定时间段内的 Sentinel-2 数据,并将其限制在一个特定的研究区域内[^1]。 #### 黑边去除 对于 Sentinel-1 数据,可能会遇到因 SAR 波束扫描引起的黑边现象。为了消除这些黑边,可以在加载数据后应用掩膜处理: ```javascript // 加载 Sentinel-1 数据 var sentinel1 = ee.ImageCollection('COPERNICUS/S1_GRD') .filterDate('2023-01-01', '2023-12-31') .filterBounds(aoi); // 去除黑边 function removeBlackEdges(image) { var mask = image.select(0).gt(-30); // 设置阈值以移除低回波强度区域 return image.updateMask(mask); } var cleanSentinel1 = sentinel1.map(removeBlackEdges); print('Cleaned Sentinel-1 Image Collection:', cleanSentinel1); ``` 这段代码实现了对 Sentinel-1 数据中的黑边进行自动检测和去除的操作[^3]。 #### 主成分分析 (PCA) 如果需要对多光谱影像执行降维分析,则可以采用 PCA 方法来简化复杂的数据结构。以下是基于 Sentinel-2 数据的一个简单示例: ```javascript // 计算主成分分析 var pcaBands = ['B2', 'B3', 'B4']; // 选择蓝、绿、红波段 var meanDict = sentinel2.mean().select(pcaBands).reduceRegion({ reducer: ee.Reducer.mean(), geometry: aoi, scale: 10, }); var centered = sentinel2.map(function(img){ return img.select(pcaBands).subtract(ee.Image.constant(meanDict)); }); var covariance = centered.reduce(ee.Reducer.centeredCovariance(), null, true); var eigens = covariance.eigen(); var principalComponents = centered.map(function(img){ return img.expression( 'b(0)*w0 + b(1)*w1 + b(2)*w2', {w0:eigens.get('eigenVectors').get(0), w1:eigens.get('eigenVectors').get(1), w2:eigens.get('eigenVectors').get(2)}); }); ``` 以上脚本完成了对 Sentinel-2 蓝、绿、红三个波段的 PCA 分析过程[^2]。 #### 批量下载遥感影像 当完成所有必要的处理之后,可能还需要将最终结果导出到本地存储设备或者云端服务中。下面是一段用于批量下载 Sentinel-2 影像Google Drive 的 JavaScript 示例代码: ```javascript // 导出配置参数 var options = { folder: 'Sentinel', // 文件夹名 region: aoi, // 下载边界框 maxPixels: 1e13 // 最大像素数量 }; // 开始下载任务 Export.image.toDrive({ image: sentinel2.first(), description: 'sentinel_export', fileNamePrefix: 'sentinel_image', crs: 'EPSG:4326', scale: 10, fileFormat: 'GeoTIFF' }); ``` 该部分说明了如何设定导出选项并将单张或多张图片保存下来以便后续进一步使用[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值