利用GEE处理并提取地市哨兵-2卫星影像

概述

本代码在Google Earth Engine (GEE)平台上实现了对潍坊市2020年6月1日至2020年9月30日期间,云量少于10%的哨兵-2卫星影像的提取、处理和导出。主要功能包括加载指定区域,去除云层干扰,合成影像并导出。

数据集介绍

使用的数据集是哨兵-2卫星影像数据集(COPERNICUS/S2_SR_HARMONIZED),该数据集提供了高分辨率的多光谱影像,适用于土地覆盖分类、农业监测和环境监测等应用。

流程与功能

  1. 定义参数:指定城市名称、时间范围和最大云量百分比。
  2. 加载研究区域:通过过滤shapefile文件获取指定城市的研究区域,并在地图上显示。
  3. 定义去云函数:通过选择影像中的质量评估带(QA60),去除云层和卷云。
  4. 筛选哨兵-2影像数据:根据研究区域、时间范围和云量百分比过滤影像数据,并应用去云函数。
  5. 查询影像数量:统计满足条件的影像数量并打印。
  6. 设置可视化参数:定义RGB波段的可视化参数,用于地图展示。
  7. 添加影像至地图:将影像集合合成后裁剪至研究区域,并添加到地图中进行显示。
  8. 导出影像:将合成后的影像裁剪至研究区域,并导出至Google Drive。

运行结果

运行结果是生成了一幅覆盖潍坊市的哨兵-2卫星影像合成图,该图去除了云层干扰,并在地图上进行了展示,影像合成图被导出至Google Drive供进一步分析使用。

完整代码:

// 定义参数
var cityName = 'weifang';
var startDate = '2020-06-01';
var endDate = '2020-09-30';
var maxCloudPercentage = 10;

// 加载指定的shp范围
var roi = table.filter(ee.Filter.eq('city', cityName));

// 在地图中显示研究区
Map.addLayer(roi, {}, 'ROI');
Map.centerObject(roi);

// 定义去云函数
function maskClouds(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);
}

// 筛选哨兵-2影像数据
var sentinel2Collection = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
  .filterBounds(roi)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', maxCloudPercentage))
  .map(maskClouds);

// 查询影像数量
var imageCount = sentinel2Collection.size();
print('Number of images:', imageCount);

// 设置可视化参数
var visParams = {
  bands: ['B4', 'B3', 'B2'],
  min: 0,
  max: 0.3,
  gamma: 1.4
};

// 将影像集合添加至地图
Map.addLayer(sentinel2Collection.median().clip(roi), visParams, 'Sentinel-2 Composite');

// 导出影像示例
var exportImage = sentinel2Collection.median().clip(roi);
Export.image.toDrive({
  image: exportImage,
  description: cityName + '_Sentinel2_Composite',
  folder: 'GEE_Exports',
  scale: 10,
  region: roi,
  crs: 'EPSG:4326',
  maxPixels: 1e13
});

运行示例:

工作台输出:

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GEE中,可以使用Sentinel-2影像计算每月的NDVI,并且可以使用哨兵二号影像的数据来实现这个目的。下面是一个计算2018-2020年每月NDVI的代码实现: ```javascript // 定义计算NDVI函数 var addNDVI = function(image){ var ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI'); return image.addBands(ndvi); }; // 定义日期范围 var startDate = '2018-01-01'; var endDate = '2020-12-31'; var startYear = 2018; var endYear = 2020; // 加载哨兵二号影像 var sentinel2 = ee.ImageCollection('COPERNICUS/S2_SR') .filterBounds(geometry) .filterDate(startDate, endDate) .map(addNDVI); // 将每个月的影像合并成一个影像 var months = ee.List.sequence(1, 12); var years = ee.List.sequence(startYear, endYear); var byMonthYear = ee.ImageCollection.fromImages( years.map(function (y) { return months.map(function (m) { var monthImage = sentinel2.filter(ee.Filter.calendarRange(y, y, 'year')) .filter(ee.Filter.calendarRange(m, m, 'month')) .reduce(ee.Reducer.mean()); return monthImage.set('year', y).set('month', m).set('system:time_start', ee.Date.fromYMD(y, m, 1)); }); }).flatten()); // 将每个月的NDVI作为一个图层添加到地图上 var ndviPalette = ['FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', '012E01', '011D01', '011301']; var ndviParams = {min: -0.2, max: 1, palette: ndviPalette}; byMonthYear = byMonthYear.map(function(image){ return image.clip(geometry); }); Map.addLayer(byMonthYear.select('NDVI'), ndviParams, 'NDVI'); ``` 这个代码实现首先定义了一个计算NDVI的函数`addNDVI`,然后加载了哨兵二号影像,将每个月的影像合并成一个影像,并将每个月的NDVI作为一个图层添加到地图上。其中,`ndviPalette`是一个NDVI的颜色调色板,用于将NDVI值转换为对应的颜色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值