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

错误

ComputedObject (Error)

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


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

主要解决方案是检查字典中是否包含键"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操作即可。

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

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

crisisVV:

Error

ImageCollection.getRegion: No bands in collection.

refVVmedian:

Error

ImageCollection.getRegion: No bands in collection.

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

 接下来查看sentinel-1属性

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

修改后代码

 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);

 结果

总结

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/458886.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3分钟阿里云数据库购买、数据库创建和连接教程

阿里云数据库怎么使用?阿里云服务器网aliyunfuwuqi.com整理阿里云数据库从购买到使用全流程,阿里云支持MySQL、SQL Server、PostgreSQL和MariaDB等数据库引擎,阿里云数据库具有高可用、高容灾特性,阿里云提供数据库备份、恢复、迁…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的火焰与烟雾检测系统详解(深度学习模型+UI界面升级版+训练数据集)

摘要:本研究详细介绍了一种集成了最新YOLOv8算法的火焰与烟雾检测系统,并与YOLOv7、YOLOv6、YOLOv5等早期算法进行性能评估对比。该系统能够在包括图像、视频文件、实时视频流及批量文件中准确识别火焰与烟雾。文章深入探讨了YOLOv8算法的原理&#xff0…

Marin说PCB之如何利用CATIA软件把器件的3D模型导出2D格式文件

步骤一,打开CATIA软件,找到器件的3D模型文件。 如下图所示就是SD卡的3D模型图了。 若是我们想要把这个3D模型导出我们实际需要的2D的DXF或者是DWG格式的话,我们应该如何操作呢? 1,文件,新建一个DAWING格式的文件, 2,新…

Fix a Tree(树的遍历,判断是否有环 并连成一颗树 )

题意翻译 对于下图中的树, 可以用数组表示为 [2,3,3,2]。这种可以表示树的数组(即有效)需要符合以下条件: 有且只有一个索引 r ,符合pr​r 。其中顶点 r 是树的根。对于所有剩下的 n−1 个顶点 i 一定要有在 i 和 pi…

SpringBoot3整合Mybatis-Plus与PageHelper包冲突解决

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: SpringBoot3整合Mybatis-Plus与PageHelper包冲突解决 ⏱️ 创作时间&a…

基础:TCP是什么?

1. TCP 是什么? TCP(Transmission Control Protocol 传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1]定义。 TCP旨在适应支持多网络应用的分层协议层次结构。连接到不同但互连的计算机…

AI人员入侵识别摄像机

AI人员入侵识别摄像机是一种智能监控设备,利用人工智能技术辨认并报警可能的入侵行为。这种摄像机利用深度学习算法实时分析监控画面,识别出普通行人和潜在入侵者之间的差异,从而更准确地预警可能发生的安全事件。 该摄像机通过对比数据库中存…

redis 缓冲区详解(性能优化缓冲区优化)

目录 前言 客户端输入缓冲区 输出缓冲区 集群缓冲区 全量复制缓冲区问题 增量复制缓冲区问题 前言 在我的《Redis 为啥那么快》这篇文章中,详细总结了Redis 为啥那么快。今天当我要详细阐述Redis 的缓冲区时,意识到应该加上Redis 的缓冲区。我们假…

CC攻击详细

CC攻击是DDoS攻击的其中一种,是目前应用层攻击的主要手段之一,相比其它的DDoS攻击CC似乎更有技术含量一些。CC攻击借助代理服务器生成指向目标系统的合法请求,实现伪装和DDoS。我们都有这样的体验,访问一个静态页面,即…

c++基础语法—————默认成员函数

文章目录 一、构造函数(初始化)1.构造函数的名称与类名相同,没有返回类型,可以有参数。2.对象实例化时,编译器自动调用构造函数进行初始化3.若类中没有显示定义一个用户的构造函数,编译器则会自动生成一个默…

MCM箱模型的运行及结果分析,MCM建模技巧与参数设置、EKMA曲线绘制、大气O3来源解析

目录 一、大气中O3形成知识基础、MCM和Atchem 2原理及Linux系统安装 二、MCM建模、数据输入、模型运行及结果输出 三、O3形成途径、生成潜势及其敏感性分析 EKMA曲线及大气O3来源解析 更多应用 臭氧污染不仅对气候有重要影响,而且对人体健康、植物生长均有严重…

大门对楼梯,怎么办?

​ 中国是一个非常重视风水的国家,风水学发扬和流传已有几千年的历史,很多懂风水的人都知道,大门风水是其中非常重要的一环,因为大门风水直接影响全家人的各种运势。大门风水好,能帮助你一臂之力;若大门风…

加密货币在网络违法犯罪活动中的利用情况调查

一、调查背景 区块链基于分布式共识和经济激励等手段,在开放式、无许可的网络空间中,为价值的确立、存储、转移提供了新的解决方案。然而随着加密生态在过去若干年的快速发展,加密货币也越来越多地被用于各类风险活动,为网络赌博…

了解什么是 Redis 的雪崩、穿透和击穿?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透?

目录 一、面试官心理分析 二、面试题剖析 1. 缓存雪崩 2. 缓存穿透 3. 缓存击穿 一、面试官心理分析 其实这是问到缓存必问的,因为缓存雪崩和穿透,是缓存最大的两个问题,要么不出现,一旦出现就是致命性的问题&#x…

发票OCR-国税可进行的发票查验种类-接口文档

发票查验内容包括发票种类名称、发票代码、发票号码、金额、销售方名称、购买方名称等信息。可以在国家税务总局全国增值税发票查验平台上进行查验,也可以进入发票所属省、直辖市税务局官方网站的“我要查询-发票查询”模块进行查验,企业也可以通过发…

vue生命周期函数原理解析,vue阻止事件冒泡方法实现

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

#15封装vue3+el-table表格数据请求函数

目录 1、useTableData 2、util 3、使用 开箱即用,理解容易。 1、useTableData import { reactive } from vue import { getType } from /utils/utilsexport const useTableData (api) > {if (typeof api ! function && getType(api) ! Promise) {th…

Unity类银河恶魔城学习记录10-1 10-2 P89,90 Character stats - Stat script源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Stat.cs using System.Collections; using System.Collections.Generic; us…

【MAC】OpenResty安装

首先官方网站:http://openresty.org/cn/download.html 安装: 我是安装官网去执行的安装命令 配置环境变量 1.打开配置文件 vim ~/.bash_profile2.粘贴进去变量配置 #OPENRESTY export NGINX_HOME/opt/homebrew/etc/openresty export PATH$PATH:$NGI…

【面试精讲】String是如何实现的?String源码分析

【面试精讲】String是如何实现的?String源码分析 目录 一、String实现机制 二、String不可变性(使用final修饰) 三、String 和 StringBuilder、StringBuffer 的区别 四、和equals的区别 五、String创建对象与JVM辨析 六、String源码解…