GEE中Sentinel-2月度合成数据分区统计报错:重复键[date]
解决GEE中
Dictionary.rename: Duplicate key: [date]错误 问题场景
使用Google Earth Engine(GEE)生成湖泊区域Sentinel-2影像各波段月度平均值表格时,运行代码触发错误:
FeatureCollection (Error) Error in map(ID=0): Dictionary.rename: Duplicate key: [date].
错误原因
核心是**date属性重复定义**:
- 生成月度合成影像时,手动给每个Image添加了
date属性(w.set('date', ee.Date.fromYMD(y,m,1))) - 在
zonalStats函数中,通过参数datetimeName: 'date'再次添加了同名的格式化日期属性 - 后续构建属性字典时,两个
date属性被重复纳入,导致重命名操作出现冲突
解决方法
方法一:移除手动添加的date属性
GEE可通过system:time_start自动解析日期,无需手动设置date属性。修改月度合成影像代码:
// monthly composite var monthlyImages = ee.ImageCollection.fromImages( years.map(function (y) { return months.map(function(m){ var w = dataset.select([ 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B11', 'B12']) .filter(ee.Filter.calendarRange(y, y, 'year')) .filter(ee.Filter.calendarRange(m, m, 'month')) .mean() .set('system:time_start',ee.Date.fromYMD(y,m,1).millis()); return w.set('year', y) .set('month', m) .set('system:time_start',ee.Date.fromYMD(y,m,1).millis()); }); }).flatten());
方法二:修改datetimeName避免属性名冲突
若需保留原date属性,将zonalStats的datetimeName改为非重复名称:
var params = { reducer: ee.Reducer.mean(), scale: 20, bands: [ 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B11', 'B12'], bandsRename: ['blue', 'green', 'red', 'red_edge1', 'red_edge2', 'red_edge3', 'NIR', 'red_edge4', 'SWIR_1', 'SWIR_2'], datetimeName: 'formatted_date', // 修改为不重复的属性名 datetimeFormat: 'YYYY-MM-dd' };
额外修正:参数类型匹配
zonalStats的第二个参数要求是FeatureCollection,原代码传入的Geometry需要转换:
var SentinelStats = zonalStats(monthlyImages, ee.FeatureCollection([ee.Feature(geometry)]), params);
内容的提问来源于stack exchange,提问作者ifoxfoot
相关产品推荐
相关产品推荐

