Google Earth Engine(GEE)——调试(语法和客户端)错误指南!

简介: Google Earth Engine(GEE)——调试(语法和客户端)错误指南!

调试指南

Earth Engine 不同于用于地理空间数据分析的传统图像处理、GIS 或其他桌面软件。您在 Earth Engine 中创建的算法在 Google 云中运行,分布在多台计算机上。调试可能具有挑战性,因为错误可能发生在客户端 JavaScript 代码或编码指令的服务器端执行中,并且是由扩展问题以及语法或逻辑错误引起的。除非您要求,否则无法检查在云中某处运行的程序部分。本文档介绍了调试策略、工具和解决方案,以帮助您解决常见错误和调试 Earth Engine 脚本。

官方给出的指南链接:

https://youtu.be/_ihm85Fy8yM


语法错误

客户端 JavaScript 中的语法错误通常由代码编辑器捕获,它会通过×编辑器面板左侧的警告您它们的存在。 将光标悬停在上将提供有关错误来源的线索。例如,图 1 说明了当列表编码不正确时会发生什么。具体来说,如果没有右括号 ( ]),则列表未正确指定,代码编辑器将这个问题解释为Expected ']' to match '[' from line 1 and saw ';'.


客户端错误

尽管 JavaScript 语法正确,但可能存在与脚本的一致性或逻辑相关的错误。以下示例演示了使用不存在的变量和方法所导致的错误:

错误— 此代码不起作用!

// 加载Sentinel-2影像.
var image = ee.Image('USGS/SRTMGL1_003');
// Error: "bandNames" 这里之前并没有设置波段名称这个变量所以错误
var display = image.visualize({bands: bandNames, min: 0, max: 9000});
// Error: image.selfAnalyze不是一个函数所以不可以直接使用
var silly = image.selfAnalyze();

第一个错误通知您bandNames变量未在引用它的范围内定义。作为解决方案,设置变量或为参数提供列表bands参数。第二个错误演示了selfAnalyze()调用不存在的函数时会发生什么。由于这不是图像上的真正方法,也就是说这个不是可以直接用在image上的函数,因此错误告诉您它不是函数。在这两种情况下,错误都是对问题的描述。

" ...is not a function" 错误可能是因为 Earth Engine 不知道变量的类型。此问题的常见表现是:

  • 对返回的对象执行某些操作first()(集合中元素的类型未知)。
  • 对返回的对象执行某些操作get()(存储在属性中的元素类型未知)。
  • 当参数的类型未知时对函数参数(在函数中)做一些事情。

以前者为例:

错误— 此代码不起作用!

var collection = ee.ImageCollection('MODIS/051/MOD44B');
// Error: collection.first(...).date is not a function
var date = collection.first().date();

在所有情况下的解决方案是使用已知类型的构造函数来强制转换未知类型的对象。继续前面的示例,解决方案是强制转换为 ee.Image

解决方案——使用括号或者添加影像ee.image,这样才能获取!

var date = ee.Image(collection.first()).date();


避免混合客户端和服务器功能

下面的例子不太明显:

错误——这段代码没有做你想要的

// 不要混淆 EE objects and JavaScript objects:
var image = ee.Image('USGS/SRTMGL1_003');
var nonsense = image + 2;
//你可以打印但这不是你想要的结果
print(nonsense);
// Error: g.eeObject.name 这不是一个正确的变量,所以无法加载地图
Map.addLayer(nonsense);

假设此代码的作者打算添加2到图像中的每个像素,这不是正确的方法。具体来说,这段代码错误地将服务器端对象 ( image) 与客户端 JavaScript 运算符 ( +)混合在一起。结果可能令人惊讶。在第一种情况下, nonsenseJavaScript 将+通过将image和转换2为字符串,然后连接它们来执行请求的操作 ( ) 。结果字符串是意外的。在第二种情况下,添加nonsense到地图,g.eeObject.name is not a function显示神秘错误,因为被添加到地图的对象,nonsense, 是一个字符串,而不是一个 EE 对象。为避免可能出现意外结果和信息不足的错误,请勿将服务器对象和函数与 JavaScript 对象、原语或函数混合使用。解决方案是这个例子是使用服务器功能:

解决方案——使用服务器功能!

Map.addLayer(image.add(2));


浏览器锁

啊,啪!如果您遇到导致 Chrome 浏览器锁定的错误,您可能会看到如图 所示的窗口。

发生这种情况时,通常是因为 JavaScript 在客户端中运行时间过长,或等待 Earth Engine 的某些内容。此错误的两个常见来源是 for 循环和/或getInfo()在您的代码中,最坏的情况是 getInfo()在 for 循环内。For 循环会导致浏览器锁定,因为代码在您的机器上运行。另一方面,getInfo() 从地球引擎同步请求计算结果,阻塞直到收到结果。如果计算需要很长时间,阻塞可能会导致您的浏览器锁定。避免 for 循环和getInfo()


相关文章
|
3月前
|
数据可视化 定位技术 Sentinel
如何用Google Earth Engine快速、大量下载遥感影像数据?
【2月更文挑战第9天】本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,批量下载指定时间范围、空间范围的遥感影像数据(包括Landsat、Sentinel等)的方法~
633 0
如何用Google Earth Engine快速、大量下载遥感影像数据?
|
3月前
|
机器学习/深度学习 算法 数据可视化
基于Google Earth Engine云平台构建的多源遥感数据森林地上生物量AGB估算模型含生物量模型应用APP
基于Google Earth Engine云平台构建的多源遥感数据森林地上生物量AGB估算模型含生物量模型应用APP
110 0
|
3月前
GEE——Google dynamic world中在影像导出过程中无法完全导出较大面积影像的解决方案(投影的转换)EPSG:32630和EPSG:4326的区别
GEE——Google dynamic world中在影像导出过程中无法完全导出较大面积影像的解决方案(投影的转换)EPSG:32630和EPSG:4326的区别
41 0
|
2月前
|
存储 编解码 数据可视化
Google Earth Engine获取随机抽样点并均匀分布在栅格的不同数值区中
【2月更文挑战第14天】本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,按照给定的地表分类数据,对每一种不同的地物类型,分别加以全球范围内随机抽样点自动批量选取的方法~
272 0
Google Earth Engine获取随机抽样点并均匀分布在栅格的不同数值区中
|
3月前
|
API Go 网络架构
GEE Colab——如何从本地/Google云盘/Google Cloud Storage (GCS)上传和下载
GEE Colab——如何从本地/Google云盘/Google Cloud Storage (GCS)上传和下载
100 4
|
3月前
|
机器学习/深度学习 存储 人工智能
GEE Colab——初学者福音快速入门 Google Colab(Colaboratory)
GEE Colab——初学者福音快速入门 Google Colab(Colaboratory)
77 3
|
3月前
|
数据处理
Google Earth Engine(GEE)——sentinel-1数据处理过程中出现错误Dictionary does not contain key: bucketMeans
Google Earth Engine(GEE)——sentinel-1数据处理过程中出现错误Dictionary does not contain key: bucketMeans
32 0
|
3月前
|
编解码 人工智能 算法
Google Earth Engine——促进森林温室气体报告的全球时间序列数据集
Google Earth Engine——促进森林温室气体报告的全球时间序列数据集
31 0
|
3月前
|
编解码 人工智能 数据库
Google Earth Engine(GEE)——全球道路盘查项目全球道路数据库
Google Earth Engine(GEE)——全球道路盘查项目全球道路数据库
48 0
|
3月前
|
编解码
Open Google Earth Engine(OEEL)——matrixUnit(...)中产生常量影像
Open Google Earth Engine(OEEL)——matrixUnit(...)中产生常量影像
23 0