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

网友投稿 933 2022-05-30

调试指南

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

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

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

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

浏览器锁

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

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

Image JavaScript

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Docker系列之MySQL安装教程
下一篇:什么?听说你想免费试用GaussDB(DWS)?安排!!!
相关文章