You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GEE洪水风险映射代码报错:dem is not a function,求技术支持

问题分析与修复方案

核心错误原因

  1. 数据源错误:你使用的COPERNICUS/S2_SR是哨兵2号光学卫星影像,根本没有elevation(高程)波段,导致elevation变量是空影像对象,后续操作全部失效。
  2. 概念混淆:ee.Terrain.hillshade()是生成山体阴影的工具,不是创建DEM(数字高程模型)的方法——DEM本身就是高程数据,无需通过山体阴影生成。
  3. 无效对象触发报错:前面的elevation为空,生成的dem是无效影像,调用dem.expression()时就会出现“dem is not a function”这类异常。

修复后的完整代码

// 确保roi已在GEE中定义,示例为Houston区域
var roi = ee.Geometry.Rectangle([-95.6, 29.4, -95.2, 29.8]);

// 导入标准DEM数据源(SRTM 30米全球高程数据)
var dem = ee.Image('USGS/SRTMGL1_003').clip(roi);

// 可选:生成山体阴影用于可视化辅助
var hillshade = ee.Terrain.hillshade(dem);

// 计算洪水风险(基于高程正态分布,可按需调整逻辑)
var floodRisk = dem.expression(
  'exp(-((x - mean)^2) / (2 * sigma^2))', {
    'x': dem,
    'mean': dem.reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: roi,
      scale: 30,
      maxPixels: 1e9
    }).get('elevation'),
    'sigma': dem.reduceRegion({
      reducer: ee.Reducer.stdDev(),
      geometry: roi,
      scale: 30,
      maxPixels: 1e9
    }).get('elevation')
  }
);

// 可视化结果
Map.centerObject(roi, 12);
Map.addLayer(dem, {min: 0, max: 100}, 'DEM');
Map.addLayer(floodRisk, {min: 0, max: 1, palette: ['blue', 'yellow', 'red']}, 'Flood Risk');

关键修正说明

  • 替换DEM数据源:用USGS/SRTMGL1_003替代哨兵2影像,这是GEE中获取高程数据的标准方式。
  • 修正统计值计算:原代码中dem.mean()、dem.stdDev()是异步对象,需用reduceRegion()在研究区内计算实际统计值,确保表达式能读取有效数值。
  • 优化风险逻辑:示例用高程正态分布计算风险(低洼区域风险值更高),你可根据需求调整,比如直接设定高程阈值(如低于5米标记为高风险)。

内容的提问来源于stack exchange,提问作者Nidhi Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:30:57