GEE ——errors & debuggings (2023GEE峰会总结)

简介: GEE ——errors & debuggings (2023GEE峰会总结)

简介:

在gee中有三种错误,一种就是系统错误,也就是我们看到的会在JavaScript code editor中出现的错误,也就是在程序还没有启动之前就会提示的错误,而客户端错误则主要是会提示一些在代码过程中的错误,比如说没出现过的变量名称,另外就是服务器出席那的错误,也就是说,你的代码和你索要运行的结果之间的错误,比如说,原本这个影像中是没有这个波段的,但是你却使用了,或者说你输入的波段名称不对而导致的错误。所有的这里显示的错误就如下面这张图所显示的。前言 – 人工智能教程

bug解决方案:

这里针对debug的解决方法无非就是限制性输出,也就是减少控制台输出的量,另外我们会使用到下面的一些函数来实现这个功能。

函数:

ee.Filter(filter)

Constructs a new filter. This constructor accepts the following args:

  • Another filter.
  • A list of filters (which are implicitly ANDed together).
  • A ComputedObject returning a filter. Users shouldn't be making these; they're produced by the generator functions below.

Arguments:

filter (Filter|List<Object>|Object, optional):

Optional filter to add.

Returns: Filter

first()

Returns the first entry from a given collection.

Arguments:

this:collection (FeatureCollection):

The collection from which to select the first entry.

Returns: Element

limit(max, property, ascending)

Limit a collection to the specified number of elements, optionally sorting them by a specified property first.

Returns the limited collection.

Arguments:

this:collection (Collection):

The Collection instance.

max (Number):

The number to limit the collection to.

property (String, optional):

The property to sort by, if sorting.

ascending (Boolean, optional):

Whether to sort in ascending or descending order. The default is true (ascending).

Returns: Collection

aside(func, var_args)

Calls a function passing this object as the first argument, and returning itself. Convenient e.g. when debugging:调用一个函数,将此对象作为第一个参数,并返回自身。例如,在调试时非常方便:

var c = ee.ImageCollection('foo').aside(print)

.filterDate('2001-01-01', '2002-01-01').aside(print, 'In 2001')

.filterBounds(geom).aside(print, 'In region')

.aside(Map.addLayer, {min: 0, max: 142}, 'Filtered')

.select('a', 'b');

Returns the same object, for chaining.

Arguments:

this:computedobject (ComputedObject):

The ComputedObject instance.

func (Function):

The function to call.

var_args (VarArgs<Object>):

Any extra arguments to pass to the function.

Returns: ComputedObject

这里重点说一下aside函数,这个功能就是在你执行程序每一步的时候都可以一步步的让其输出到控制台中,最后到底检查时哪一行代码出现了问题:

var c = ee.ImageCollection('foo').aside(print)
.filterDate('2001-01-01', '2002-01-01').aside(print, 'In 2001')
.filterBounds(table).aside(print, 'In region').aside(print, 'xxxx')
.aside(Map.addLayer, {min: 0, max: 142}, 'Filtered')
.select('a', 'b');
print(c)

我们看一下简单的错误:

Early Errors -Corrected

image.set(days,image.get('system:time_start')/(60*60*24*1000))

Result Capture

image =image.set(.)

Casting

ee.Number(image.get('system:time_start'))

or

image.getNumber('system:time_start')

Javascript Operators   image.getNumber(.).divide(60*60*24**1000)

MAP function 错误

这里的map不能使用print或者getinfo或者export等函数的操作。

Return a Value

function(x){y=x.add(1);}

User-defined methods must return a value

Return an Element

function(x){return x.date()}

Collection.map:A mapped algorithm must return a Feature or Image.

Using getlnfo or print

function(x){return x.set('y',x.date().getInfo())}

Line 1:A mapped function's arguments cannot be used in client-side operation

Javascript branching

if(i==0){return 1 }else {return 2 }

Mapped Aggregations function(x){return x.reduceRegion({...maxPixels:1e9})}

Scaling Issues

Error:Image.reduceRegions:Computed value is too large.

Error:Image.classify:Feature null has a non-numeric value for property B1.Task timed out after 7200 seconds.

另外一些函数在使用过程中也指的注意:

How l Debug Your Code -my checklist

Low Hanging Fruit

getlnfo()

for loops

iterate()

toList()

Complex geometries

Don't clip

image.reduceToVectors()

image.reproject()

image.resample()

image.reduceResolution()

Joins

Collections

filterDate /filterBounds

calendarRange()without filterDate()

collection.geometry()

toBands()/toArray()

Aggregations

Tilescale in reduce*Combine reducers

image.reduceNeighborhood()

Neighborhood size使用较小的pixels作为参数

Use optimizations

How I Debug Your Code -my checklist

Distances

use fastDistanceTransform()

/ee.Image.pixelArea().sqrt()

Geometries

Specify an error marginSimplify if possible

bounds()vs.drawing a box

Discard them completely

Pre-caching before sampling

Classifier size(trees,training)

Never use Math.random()

错误代码示范:

https://code.earthengine.google.com/34bdb87a407011a6c9b821fad47d7987

var l8 = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2").limit(400);
function reduceBands(x, acc) {
    return ee.Image(acc).addBands(x);
}
var iterateVersion = ee.Image(l8.iterate(reduceBands, ee.Image()));
print('Iterate: image has', iterateVersion.bandNames().length(), 'bands');
var toBandsVersion = l8.toBands();
print('toBands: image has', toBandsVersion.bandNames().length(), 'bands');
相关文章
|
存储 编解码 人工智能
Github 3k+!南科大 VIP Lab 近期开源 Track-Anything | SAM + VOS: 一键视频标注
Github 3k+!南科大 VIP Lab 近期开源 Track-Anything | SAM + VOS: 一键视频标注
627 0
KubeCon + CloudNativeCon + Open Source Summit China【KubeDL】
KubeCon + CloudNativeCon + Open Source Summit China【KubeDL】
KubeCon + CloudNativeCon + Open Source Summit China【KubeDL】
|
Apache 流计算
《Flink Forward Virtual Conference - April 2020 - Cloudera CDF Keynote》电子版地址
Apache Flink - Completing Cloudera's End-to-End Streaming Platform
93 0
《Flink Forward Virtual Conference - April 2020 - Cloudera CDF Keynote》电子版地址
|
安全 开发者
代码谱写美好未来,2022 Code For Better_Hackathon 等你加入
代码谱写美好未来,2022 Code For Better_Hackathon 等你加入
120 0
代码谱写美好未来,2022 Code For Better_Hackathon 等你加入
|
传感器 编解码 算法
Google Earth Engine ——MOD17A3H.006: Terra Net Primary Production Yearly Global 500m这是该产品的NASA版本年度净初级
Google Earth Engine ——MOD17A3H.006: Terra Net Primary Production Yearly Global 500m这是该产品的NASA版本年度净初级
342 0
Google Earth Engine ——MOD17A3H.006: Terra Net Primary Production Yearly Global 500m这是该产品的NASA版本年度净初级
tech| 开源之路: github PR 走起
想快速提高编程能力, 还不快来 「全球最大同性交友社区」~
125 0
如何在 Code China 上对开源项目进行贡献 ?|Code China
今天来聊一聊,如何在 Code China 上对开源项目做贡献,首先以下图所示的项目作为例子。该项目主要目的是用于维护 Code China 的explore 页面,作为项目的非 Maintainer,可以通过 pull request 方式提交合并请求,以对项目进行贡献。分 fork 源项目、在线编辑并提交、创建合并请求三部分进行介绍。
152 0
Code Lab科技创新营
蚂蚁金服金融科技携手浙江省内优秀高校与合作伙伴,建立长期的科技育人计划并推出「Code Lab科技创新营」 「Code Lab科技创新营」项目主要开放给具备一定信息技术基础的本科院校三、四年级或在校研究生同学, 邀请到数位蚂蚁金服高级技术工程师及高校博士导师以3天集中课程的形式向学生输出蚂蚁技术与能力,与同学们面对面深入探讨,共同实践。 本次活动以”如何创造出支付宝移动APP“为课程主题,由专业老师辅导,学生上手实操开发。真正做到技术不再是理论,上手不再是梦想。
Code Lab科技创新营
「Code Lab科技创新营」浙江工业大学
蚂蚁金服金融科技携手浙江省内优秀高校与合作伙伴,建立长期的科技育人计划并推出「Code Lab科技创新营」 「Code Lab科技创新营」项目主要开放给具备一定信息技术基础的本科院校三、四年级或在校研究生同学, 邀请到数位蚂蚁金服高级技术工程师及高校博士导师以3天集中课程的形式向学生输出蚂蚁技术与能力,与同学们面对面深入探讨,共同实践。 本次活动以”如何创造出支付宝移动APP“为课程主题,由专业老师辅导,学生上手实操开发。真正做到技术不再是理论,上手不再是梦想。
「Code Lab科技创新营」浙江工业大学
「Code Lab科技创新营」绍兴文理学院
蚂蚁金服金融科技携手浙江省内优秀高校与合作伙伴,建立长期的科技育人计划并推出「Code Lab科技创新营」 「Code Lab科技创新营」项目主要开放给具备一定信息技术基础的本科院校三、四年级或在校研究生同学, 邀请到数位蚂蚁金服高级技术工程师及高校博士导师以2天集中课程的形式向学生输出蚂蚁技术与能力,与同学们面对面深入探讨,共同实践。 本次活动以”如何创造出支付宝移动APP“为课程主题,由专业老师辅导,学生上手实操开发。真正做到技术不再是理论,上手不再是梦想。
「Code Lab科技创新营」绍兴文理学院