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

内容概要:该论文研究了一种基于行波理论的输电线路故障诊断方法。当输电线路发生故障时,故障点会产生向两侧传播的电流和电压行波。通过相模变换对三相电流行波解耦,利用解耦后独立模量间的关系确定故障类型和相别,再采用小波变换模极大值法标定行波波头,从而计算故障点距离。仿真结果表明,该方法能准确识别故障类型和相别,并对故障点定位具有高精度。研究使用MATLAB进行仿真验证,为输电线路故障诊断提供了有效解决方案。文中详细介绍了三相电流信号生成、相模变换(Clarke变换)、小波变换波头检测、故障诊断主流程以及结果可视化等步骤,并通过多个实例验证了方法的有效性和准确性。 适合人群:具备一定电力系统基础知识和编程能力的专业人士,特别是从事电力系统保护与控制领域的工程师和技术人员。 使用场景及目标:①适用于电力系统的故障检测与诊断;②能够快速准确地识别输电线路的故障类型、相别及故障点位置;③为电力系统的安全稳定运行提供技术支持,减少停电时间和损失。 其他说明:该方法不仅在理论上进行了深入探讨,还提供了完整的Python代码实现,便于读者理解和实践。此外,文中还讨论了行波理论的核心公式、三相线路行波解耦、行波测距实现等关键技术点,并针对工程应用给出了注意事项,如波速校准、采样率要求、噪声处理等。这使得该方法不仅具有学术价值,也具有很强的实际应用前景。
Google Earth Engine (GEE) 平台上,你可以通过以下几个步骤来获取和分析海口市的水体面积数据: 1. **登录和初始化**: 首先,你需要在GEE官网上创建账号并登录到GEE开发者控制台。然后,在Python Notebook或客户端中导入`ee`库,并初始化它。 ```python import ee ee.Authenticate() # 登录授权 ee.Initialize() # 初始化GEE API ``` 2. **选择遥感数据源**: 使用GEE提供的卫星影像数据,如Sentinel-2或Landsat系列,它们包含对地表覆盖的详细信息。可以搜索特定时间范围内的水面反射率(例如,NDWI - 水体指数)来识别水体。 ```python # 查询海口市附近的时间窗口和数据集合 date_range = ee.DateRange('2020-01-01', '2020-12-31') landsat_dataset = ee.ImageCollection("LANDSAT/LC08/C01/T1_SR").filterDate(date_range) ``` 3. **计算水体面积**: 利用遥感数据中的水面指标,比如NDWI,结合阈值来提取水体区域。可以使用`select`和`reduceRegion`函数来计算每个像元的水体面积。 ```python def water_index(image): ndwi = image.select(['B4', 'B3']).normalizedDifference() return ndwi water_image = landsat_dataset.map(water_index).mosaic() water_mask = water_image.gt(0.25) # 这里是一个示例阈值,实际可能需要调整 water_area = water_mask.reduce(ee.Reducer.sum()) ``` 4. **分析数据**: 分析提取水体面积时间序列,可能包括趋势分析、季节变化等。你可以使用统计方法或者可视化工具来呈现结果。 ```python # 计算平均每月水体面积 monthly_water_area = water_area.resample('month').mean().getInfo() ``` 5. **可视化**: 最后,你可以利用GEE的绘图功能展示海口市水体面积的变化情况。 ```python ee.Image(monthly_water_area).visualize(min=0, max=monthly_water_area.max(), palette=['blue']) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI_RSER

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

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

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

打赏作者

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

抵扣说明:

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

余额充值