错误

ComputedObject (Error)

Dictionary.get: Dictionary does not contain key: VV_stdDev.


Line 39: Dictionary.get: Dictionary does not contain key: VV_stdDev.

GEE错误——Dictionary does not contain key: VV_stdDev.-LMLPHP

主要解决方案是检查字典中是否包含键"VV_stdDev"的拼写是否正确。如果确保拼写正确,可以尝试以下解决方案:
1. 检查字典是否已经正确初始化并包含了键"VV_stdDev"。可以使用字典的方法(如keys())来查看字典中的键。
2. 如果字典是从外部数据源(如文件)加载的,确保数据源中包含键"VV_stdDev"的正确数据。
3. 如果字典是在代码中手动创建的,确保在创建字典时正确设置了键"VV_stdDev"的值。

如果以上解决方案无效,可能需要重新考虑如何获取或设置键"VV_stdDev"的值。可能需要查找其他途径或方法来获取所需的数据。

原始代码

 var geometry = 
    /* color: #d63000 */
    /* locked: true */
    /* displayProperties: [
      {
        "type": "rectangle"
      }
    ] */
    ee.Geometry.Polygon(
        [[[36.235107932050866, 22.75240343711566],
          [36.235107932050866, 16.80088983212065],
          [42.035889182050866, 16.80088983212065],
          [42.035889182050866, 22.75240343711566]]], null, false),
    geometry2 = 
    /* color: #98ff00 */
    /* displayProperties: [
      {
        "type": "rectangle"
      }
    ] */
    ee.Geometry.Polygon(
        [[[38.00647243892509, 21.14107511893264],
          [38.00647243892509, 20.329382125779976],
          [39.03918728267509, 20.329382125779976],
          [39.03918728267509, 21.14107511893264]]], null, false);
 
  var aoi = ee.FeatureCollection(geometry);
  Map.centerObject(aoi,7);
  var smallaoi=geometry2;
// Load the Sentinel-1 GRD data
var S1=ee.ImageCollection("COPERNICUS/S1_GRD")
    .filterBounds(aoi)
    .select(polarization)
    .filter(ee.Filter.eq('orbitProperties_pass',pass_direction)) 
    .filter(ee.Filter.eq('relativeOrbitNumber_start',relative_orbit ))
// Befor Oil Spill 
  var ref_start='2018-01-01';
  var ref_end='2019-10-01';
  var crisis_start='2019-10-13';
  var crisis_end='2019-10-14';
var polarization = "VV"; 
var pass_direction = "DESCENDING";
var relative_orbit=14;
var factor=2
// Defining crisis dataset
var crisisVV = S1.filterDate(crisis_start,crisis_end).mean().clip(aoi).rename('VV')
crisisVV=crisisVV.focal_max(30, 'square', 'meters').rename('VV')
Map.addLayer(crisisVV,{min:-30,max:0},'crisisVV',1,1)
// Defining reference dataset
var refVVmedian=S1.filterDate(ref_start,ref_end).median().clip(aoi).rename('VV')
Map.addLayer(refVVmedian,{min:-30,max:0},'refVVmedian',1,0)
// Computing difference and selecting threshold
var difference=refVVmedian.subtract(crisisVV)
var reducer1 = ee.Reducer.mean();
var reducers = reducer1.combine({reducer2: ee.Reducer.median(), sharedInputs: true})
                       .combine({reducer2: ee.Reducer.stdDev(), sharedInputs: true});

var results = difference.reduceRegion({reducer: reducers,
                                geometry: smallaoi,
                                scale:10,
                                bestEffort: true});
                              
//print(results.get('VV_mean'));
print('StdDev of difference between reference and crisis images')
print(results.get('VV_stdDev'));
var oilspill=refVVmedian.subtract(crisisVV).gt(ee.Image(factor*results.get('VV_stdDev').getInfo()))
var oilspill=refVVmedian.subtract(crisisVV).gt(6)

Map.addLayer(oilspill,{min:0,max:1},'oilspill',1,0)
 Cleaning up noisy points
var cleaned=oilspill.focal_max().focal_min();
var connections = cleaned.connectedPixelCount();    
var cleaned = cleaned.updateMask(connections.gte(8));
Map.addLayer(cleaned, {}, 'cleaned',1,0);

// Masking land using DEM 
var dem=ee.Image("CGIAR/SRTM90_V4")
var dem_mask=dem.unmask().add(ee.Image(1)).lte(1)
Map.addLayer(dem_mask, {}, 'demmask',1,0);
var mask = cleaned.where(dem_mask.and(cleaned),1);

var final_oil = cleaned.updateMask(mask);
Map.addLayer(final_oil, {palette:'red'}, 'final_oil',1,1);

解决方案

一般情况下当我们碰到这种情况,肯定是因为我们在运算的时候我们没有这个波段名称所导致的,所以这里我们就必须首先检查我们运算时所选择波段是否存在的问题,这个就可以根据报错行的提示寻找相应变量,通过向上检查,查看到底时哪一个变量名称在声明的时候没有明确,或者自己引用错误,如果说你想改名,那么就对单一的对象进行rename操作即可。

在此代码中我们首先发现一个问题就是当我们打印结果的时候发现,我们的上一步并没有任何结果,所以出现了新的问题,就是在没有报错的情况下出现了下面的提示:

GEE错误——Dictionary does not contain key: VV_stdDev.-LMLPHP

然后接着我们通过代码继续向上看,这里我们看到在上面的代码中提到了图层加载,但是地图上并没有出现任何数据展示的结果,所以这里最大的问题时我们从一开始就没有真正获取到数据,再用inspector检查以下,发现了下面的错误提示:

crisisVV:

Error

ImageCollection.getRegion: No bands in collection.

refVVmedian:

Error

ImageCollection.getRegion: No bands in collection.

GEE错误——Dictionary does not contain key: VV_stdDev.-LMLPHP

这里我们就开始检查数据,但是结果发现数据从2014年就开始有了,只是我们的筛选方式不同,所以这里我们就会发现一个下面的问题

GEE错误——Dictionary does not contain key: VV_stdDev.-LMLPHP 接下来查看sentinel-1属性

GEE错误——Dictionary does not contain key: VV_stdDev.-LMLPHP

第一个属性时没有问题的,这个时帮我们按照轨迹过境属性来讲研究区影像来进行分类的,所以这里没有问题,第二个筛选就有问题了,因为这里的我们查看了基本上没有小于30以下的所以这里我们需要进行调整,最终得到了第一步的正确结果,就是可以得到筛选的结果了。第二步紧接着就又错了,没有结果,又得重新开始,直到查出问题的关键,先从时间筛选开始查,最终不要经过裁剪,后的结果就出现了。

GEE错误——Dictionary does not contain key: VV_stdDev.-LMLPHP

修改后代码

 var geometry = 
    /* color: #d63000 */
    /* locked: true */
    /* displayProperties: [
      {
        "type": "rectangle"
      }
    ] */
    ee.Geometry.Polygon(
        [[[36.235107932050866, 22.75240343711566],
          [36.235107932050866, 16.80088983212065],
          [42.035889182050866, 16.80088983212065],
          [42.035889182050866, 22.75240343711566]]], null, false),
    geometry2 = 
    /* color: #98ff00 */
    /* displayProperties: [
      {
        "type": "rectangle"
      }
    ] */
    ee.Geometry.Polygon(
        [[[38.00647243892509, 21.14107511893264],
          [38.00647243892509, 20.329382125779976],
          [39.03918728267509, 20.329382125779976],
          [39.03918728267509, 21.14107511893264]]], null, false);
 
  var aoi = ee.FeatureCollection(geometry);
  Map.centerObject(aoi,7);
  var smallaoi=geometry2;
// Load the Sentinel-1 GRD data
var S1=ee.ImageCollection("COPERNICUS/S1_GRD")
    .filterBounds(aoi)
    .select("VV")
    .filter(ee.Filter.eq('orbitProperties_pass','DESCENDING')) 
    .filter(ee.Filter.eq('relativeOrbitNumber_start',50 ))
print(S1)
// Befor Oil Spill 
  var ref_start='2018-01-01';
  var ref_end='2022-10-01';
  var crisis_start='2019-10-1';
  var crisis_end='2019-10-31';
var polarization = "VV"; 
var pass_direction = "DESCENDING";
var relative_orbit=14;
var factor=2
// Defining crisis dataset
var crisisVV = S1.filterDate(crisis_start,crisis_end).select('VV').mean()//.clip(aoi).rename('VV')

print(crisisVV)

//crisisVV=crisisVV.focal_max(30, 'square', 'meters').rename('VV')
Map.addLayer(crisisVV,{min:-30,max:0},'crisisVV',1,1)
// Defining reference dataset
var refVVmedian=S1.filterDate(ref_start,ref_end).median().clip(aoi).rename('VV')
Map.addLayer(refVVmedian,{min:-30,max:0},'refVVmedian',1,0)
// Computing difference and selecting threshold
var difference=refVVmedian.subtract(crisisVV)
var reducer1 = ee.Reducer.mean();
var reducers = reducer1.combine({reducer2: ee.Reducer.median(), sharedInputs: true})
                       .combine({reducer2: ee.Reducer.stdDev(), sharedInputs: true});

var results = difference.reduceRegion({reducer: reducers,
                                geometry: smallaoi,
                                scale:10,
                                bestEffort: true});

print(results);                           
//print(results.get('VV_mean'));
print('StdDev of difference between reference and crisis images')
print(results.get('VV_stdDev'));
var oilspill=refVVmedian.subtract(crisisVV).gt(ee.Image(factor*results.get('VV_stdDev').getInfo()))
var oilspill=refVVmedian.subtract(crisisVV).gt(6)

Map.addLayer(oilspill,{min:0,max:1},'oilspill',1,0)
 Cleaning up noisy points
var cleaned=oilspill.focal_max().focal_min();
var connections = cleaned.connectedPixelCount();    
var cleaned = cleaned.updateMask(connections.gte(8));
Map.addLayer(cleaned, {}, 'cleaned',1,0);

// Masking land using DEM 
var dem=ee.Image("CGIAR/SRTM90_V4")
var dem_mask=dem.unmask().add(ee.Image(1)).lte(1)
Map.addLayer(dem_mask, {}, 'demmask',1,0);
var mask = cleaned.where(dem_mask.and(cleaned),1);

var final_oil = cleaned.updateMask(mask);
Map.addLayer(final_oil, {palette:'red'}, 'final_oil',1,1);

 结果

GEE错误——Dictionary does not contain key: VV_stdDev.-LMLPHP

总结

这个问题的本质是因为我们研究区大小不同多导致的,也就是说我们裁剪后两者是对不上的,所以这里我们不需要过多的区裁剪

GEE错误——Dictionary does not contain key: VV_stdDev.-LMLPHP

 

03-15 13:19