用GEE和Sentinel-2监测你家附近的湖:5分钟搞定实时水体范围变化(附完整代码)
用GEE和Sentinel-2监测你家附近的湖5分钟搞定实时水体范围变化附完整代码你是否好奇家门口的湖泊在不同季节会有多大变化干旱年份水面是否明显缩小雨季时水体又扩张了多少借助Google Earth EngineGEE和Sentinel-2卫星数据普通人也能像专业机构一样监测水体变化。本文将手把手教你用5行核心代码实现自动化水体提取无需下载数据或复杂处理所有计算都在云端完成。1. 准备工作零基础入门GEEGEE是一个免费的遥感数据分析平台整合了PB级卫星影像资源。注册账号后访问Earth Engine Code Editor即可开始。界面主要包含四个区域代码编辑器左上地图展示区右上任务管理器右下脚本管理区左下首次使用建议// 示例加载一个基础地图 Map.setCenter(经度, 纬度, 缩放级别); // 替换为你家乡的坐标 Map.addLayer(ee.Image(LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318));提示按住Shift键在地图上拖拽可以绘制感兴趣区域ROI右键点击可删除误操作2. 选择合适的数据源Sentinel-2与Landsat 8是最常用的免费中分辨率数据二者对比参数Sentinel-2 MSILandsat 8 OLI分辨率10m (可见光)30m重访周期5天16天波段数量13个11个数据延迟近实时通常有1个月延迟推荐优先使用Sentinel-2数据var s2 ee.ImageCollection(COPERNICUS/S2_SR_HARMONIZED) .filterDate(2023-01-01, 2023-12-31) .filter(ee.Filter.lt(CLOUDY_PIXEL_PERCENTAGE, 20));3. 水体提取核心技术NDWI计算归一化水体指数NDWI通过绿波段与近红外波段的反射率差异突出水体特征实际操作代码function addNDWI(image) { var ndwi image.normalizedDifference([B3, B8]).rename(NDWI); return image.addBands(ndwi); } var s2WithNDWI s2.map(addNDWI);典型地物NDWI值范围开阔水体0.3~1植被-1~0.2建筑/裸土-0.5~04. 完整工作流实现以下是端到端的解决方案替换坐标即可监测任意湖泊// 步骤1定义研究区域以杭州西湖为例 var roi ee.Geometry.Point(120.15, 30.25).buffer(5000); // 步骤2获取Sentinel-2数据并去云 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); } var s2 ee.ImageCollection(COPERNICUS/S2_SR_HARMONIZED) .filterBounds(roi) .filterDate(2023-01-01, 2023-12-31) .filter(ee.Filter.lt(CLOUDY_PIXEL_PERCENTAGE, 20)) .map(maskClouds); // 步骤3计算NDWI并提取水体 var water s2.map(function(image) { var ndwi image.normalizedDifference([B3, B8]); return ndwi.gt(0.2); // 阈值可根据实际情况调整 }); // 步骤4可视化 var visParams {palette: [white, blue], min: 0, max: 1}; Map.addLayer(water.mean(), visParams, Water Probability); Map.centerObject(roi, 12);5. 进阶技巧与结果解读季节性变化监测// 按月份分组计算水体面积 var monthlyWater ee.ImageCollection( ee.List.sequence(1, 12).map(function(month) { var filtered s2.filter(ee.Filter.calendarRange(month, month, month)); var water filtered.map(function(img) { return img.normalizedDifference([B3, B8]).gt(0.2); }); return water.mean().set(month, month); }) ); // 导出统计结果 var stats monthlyWater.map(function(image) { var area image.multiply(ee.Image.pixelArea()).reduceRegion({ reducer: ee.Reducer.sum(), geometry: roi, scale: 10, maxPixels: 1e9 }); return ee.Feature(null, { month: image.get(month), area_m2: area.get(nd) }); }); print(ui.Chart.feature.byFeature(stats, month, area_m2));常见问题排查结果全黑检查日期范围是否有可用影像水体提取不全尝试调整NDWI阈值0.1~0.3云污染严重降低CLOUDY_PIXEL_PERCENTAGE阈值实际项目中我发现Sentinel-2的10m分辨率能清晰呈现小型池塘的边界变化而处理高山湖泊时需要注意地形阴影的影响。将结果与历史影像对比时建议选择相近月份的数据以消除季节影响。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2550782.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!