1. for 循环
Google Earth Engine 不推荐使用for循环,官方推荐使用map()实现for循环。
比如:
// 产生一个1到10的listvar myList = ee.List.sequence(1, 10);// map()将实现对每一个元素进行运算 ,并返回一个值var computeSquares = function(number) {return ee.Number(number).pow(2); //算平方};// 通过使用 map() ,对每一个元素执行function里的内容var squares = myList.map(computeSquares);print(squares); // 结果[1, 4, 9, 16, 25, 36, 49, 64, 81]
2. if/else 循环
Google Earth Engine 的条件循环通过ee.Algorithms.If()实现,但强烈反对使用它。官方推荐:通过使用.map()和filters实现。
//判断是奇数还是偶数var getOddNumbers = function(number) {number = ee.Number(number); // Cast the input to a Number so we can use mod.var remainder = number.mod(2);//模2return number.multiply(remainder);};var newList = myList.map(getOddNumbers);// 移除0值var oddNumbers = newList.removeAll([0]);var squares = oddNumbers.map(computeSquares);print(squares); //结果 [1, 9, 25, 49, 81]
如果想基于不同的条件写代码,可以将代码分开写。
var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA');// 把数据分为两部分,应用到不同的代码var subset1 = collection.filter(ee.Filter.lt('SUN_ELEVATION', 40));var subset2 = collection.filter(ee.Filter.gte('SUN_ELEVATION', 40));var processed1 = subset1.map(function(image) {return image.multiply(2);});var processed2 = subset2;// 将图像融合为一幅var final = processed1.merge(processed2);print('Original collection size', collection.size());print('Processed collection size', final.size());
3. 累积迭代
您可能需要执行顺序操作,其中每个迭代的结果由后续迭代使用。Earth Engine为此类任务提供了iterate()方法。请记住,iterate()是按顺序执行的,因此对于大型操作来说速度会很慢。仅当无法使用map()和过滤器实现所需的输出时才使用它。(机翻,勿怪罪)
iterate()的一个很好的演示是用于创建斐波那契数列。这里,序列中的每个数字都是前两个数字的和。iterate()函数有两个参数,一个函数(算法)和一个起始值。函数本身传递两个值,即迭代中的当前值和上一次迭代的结果。下面的示例演示如何在Earth引擎中实现fibonacci序列。(机翻,勿怪罪)
var algorithm = function(current, previous) {previous = ee.List(previous);var n1 = ee.Number(previous.get(-1));var n2 = ee.Number(previous.get(-2));return previous.add(n1.add(n2));};// Compute 10 iterations.var numIteration = ee.List.repeat(1, 10);var start = [0, 1];var sequence = numIteration.iterate(algorithm, start);print(sequence); // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
The End
图片来源:网络,侵删~
这是我的微信公众号塞翁的读书笔记,想拜托你来看看,谢谢啦