Google Earth Engine (GEE) 实现南京市水体提取:2018-2022 年时间序列分析

一、引言

本文将详细介绍如何使用 GEE 对南京市 2018 年至 2022 年的 Sentinel-2 卫星数据进行处理,实现水体的提取和时间序列分析。(大家可自行修改代码中的经纬度、时间及NDWI指数,进行自己的研究)

二、代码实现

2.1 定义研究区域

// 定义南京市的经纬度范围(矩形)
var nanjing = ee.Geometry.Rectangle([118.2, 31.3, 119.2, 32.6], null, false);
Map.centerObject(nanjing, 8);
Map.addLayer(nanjing, {color:'red'}, 'Study Area');

通过ee.Geometry.Rectangle定义南京市的经纬度范围,并将地图中心定位到该区域,同时在地图上添加研究区域的边界。

2.2 去云函数

// 定义新的去云函数(适配Sentinel-2 Level-2A数据集)
function maskS2Clouds(image) {
  // 方法1:使用SCL波段直接分类掩膜云和阴影
  var scl = image.select('SCL');
  var cloudMask = scl.eq(8)      // 中云/高云概率高
                    .or(scl.eq(9))    // 薄卷云
                    .or(scl.eq(3))    // 云阴影
                    .not();
  
  // 方法2(备选):使用云概率波段MSK_CLDPRB(需阈值化)
  // var cloudProb = image.select('MSK_CLDPRB');
  // var cloudMask = cloudProb.lt(30); // 云概率<30%视为无云
  
  // 应用掩膜并缩放反射率
  return image.updateMask(cloudMask)
             .divide(10000)  // Level-2A反射率已缩放为0-1,无需此行可注释
             .copyProperties(image, ['system:time_start']);
}

此函数用于去除 Sentinel-2 Level-2A 数据中的云。提供了两种去云方法,一种是通过 SCL 波段直接分类掩膜云,另一种是通过云概率波段设置阈值来掩膜云。

2.3 计算归一化水体指数(NDWI)

// 计算NDWI(绿光B3和近红外B8)
function addNDWI(image) {
  var ndwi = image.normalizedDifference(['B3', 'B8']).rename('NDWI');
  return image.addBands(ndwi);
}

通过normalizedDifference方法计算 NDWI,将结果添加到影像中。

2.4 定义时间范围和参数

// 定义时间范围和参数
var startYear = 2018;
var endYear = 2022;
var ndwiThreshold = 0.2;

设置时间范围为 2018 年至 2022 年,并设定 NDWI 阈值为 0.2 用于水体提取。

2.5 逐年处理数据

// 定义选择公共波段的函数
function selectCommonBands(image) {
  var commonBands = ['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B11', 'B12', 'AOT', 'WVP', 'SCL', 'TCI_R', 'TCI_G', 'TCI_B', 'MSK_CLDPRB', 'MSK_SNWPRB', 'NDWI'];
  return image.select(commonBands);
}

// 存储每年的水体掩膜
var waterMasks = [];

// 逐年处理
for (var year = startYear; year <= endYear; year++) {
  var startDate = ee.Date.fromYMD(year, 1, 1);
  var endDate = ee.Date.fromYMD(year, 12, 31);
  
  // 加载并处理Sentinel-2 Level-2A数据
  var s2Col = ee.ImageCollection('COPERNICUS/S2_SR')
    .filterBounds(nanjing)
    .filterDate(startDate, endDate)
    .map(maskS2Clouds)
    .map(addNDWI)
    .map(selectCommonBands); // 选择公共波段
  
  // 合成年度中值影像并提取水体
  var median = s2Col.median();
  var water = median.select('NDWI').gt(ndwiThreshold).selfMask();
  
  // 导出到Google Drive
  Export.image.toDrive({
    image: water,
    description: 'Water_Nanjing_' + year,
    scale: 10,
    region: nanjing,
    maxPixels: 1e13,
    fileFormat: 'GeoTIFF'
  });
  
  waterMasks.push(water.set({'year': year}));
}

循环处理每年的数据,加载 Sentinel-2 Level-2A 影像集合,进行去云、计算 NDWI、合成年度中值影像并提取水体,最后将水体掩膜导出到 Google Drive 并存储。

2.6 可视化水体掩膜

// 将数组转换为ImageCollection
waterMasks = ee.ImageCollection(waterMasks);

var visParams = {palette: ['blue'], min: 0, max: 1};

// 按时间顺序可视化每年的水体掩膜
waterMasks.evaluate(function(waterMasksList) {
  waterMasksList.features.forEach(function(feature) {
    var year = feature.properties.year;
    var waterImage = ee.Image(feature.id);
    Map.addLayer(waterImage, visParams, 'Water_Nanjing_' + year);
  });
});

将存储的水体掩膜数组转换为影像集合,并设置可视化参数,按时间顺序将每年的水体掩膜添加到地图上进行可视化。

结果展示:

2018年水体提取结果:

PS:实际应用或者写论文的时候应当综合考虑多种指数或者结合其他方法进行水体分析,不能仅仅用一种方法。

【完美复现】面向配电网韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE33节点的配电网韧性提升方法,重点研究了移动储能系统的预布局与动态调度策略。通过Matlab代码实现,提出了一种结合预配置和动态调度的两阶段优化模型,旨在应对电网故障或极端事件时快速恢复供电能力。文中采用了多种智能优化算法(如PSO、MPSO、TACPSO、SOA、GA等)进行对比分析,验证所提策略的有效性和优越性。研究不仅关注移动储能单元的初始部署位置,还深入探讨其在故障发生后的动态路径规划与电力支援过程,从而全面提升配电网的韧性水平。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事智能电网、能源系统优化等相关领域的工程技术人员。; 使用场景及目标:①用于科研复现,特别是IEEE顶刊或SCI一区论文中关于配电网韧性、应急电源调度的研究;②支撑电力系统在灾害或故障条件下的恢复力优化设计,提升实际电网应对突发事件的能力;③为移动储能系统在智能配电网中的应用提供理论依据和技术支持。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析,重点关注目标函数建模、约束条件设置以及智能算法的实现细节。同时推荐参考文中提及的MPS预配置与动态调度上下两部分,系统掌握完整的技术路线,并可通过替换不同算法或测试系统进一步拓展研究
Google Earth Engine (GEE)提取特定时间段(例如20222024)的水体面积,可以通过使用Earth Engine的数据集和API来实现。以下是一个基本的步骤指南,展示如何利用GEE进行水体面积的提取: ### 数据选择 可以选择多种数据集来识别水体,例如: - **JRC Global Surface Water Dataset**:提供全球地表水的历史信息。 - **MODIS Aqua/Terra Land Cover Products**:包含土地覆盖类型,可以用来识别水体- **Sentinel-1/2 数据**:通过分析遥感影像中的水体反射特性来提取水体。 ### 代码示例 以下是一个基于JRC Global Surface Water数据集的简单示例代码,用于提取20222024水体面积[^1]: ```javascript // 定义时间范围 var startYear = 2022; var endYear = 2024; // 加载JRC Global Surface Water数据集 var jrc = ee.ImageCollection("JRC/GSW1_3").select('water'); // 过滤时间范围 var filteredJRC = jrc.filter(ee.Filter.calendarRange(startYear, endYear, 'year')); // 计算平均水体分布 var waterMean = filteredJRC.mean(); // 将水体掩膜化(仅保留水体区域) var waterMask = waterMean.gt(0).selfMask(); // 计算水体面积(单位为平方公里) var areaImage = waterMask.multiply(ee.Image.pixelArea()).divide(1000 * 1000); var totalArea = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: yourStudyAreaGeometry, // 替换为你的研究区域几何对象 scale: 30, maxPixels: 1e10 }); // 输出结果 print('Total Water Area (km&sup2;)', totalArea.get('water')); ``` ### 注意事项 1. **研究区域定义**:需要替换`yourStudyAreaGeometry`为你自己的研究区域几何对象。 2. **分辨率设置**:代码中使用的分辨率为30米,可以根据需求调整。 3. **数据可用性**:确保所选数据集在目标时间段内有足够的覆盖。 ### 结果解释 上述代码将计算指定时间段内的平均水体分布,并统计总水体面积(以平方公里为单位)。此方法适用于大范围的水体监测任务。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遥感AI实战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值