1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > GEE (Google Earth Engine)最基础代码学习笔记四——循环

GEE (Google Earth Engine)最基础代码学习笔记四——循环

时间:2022-12-24 14:06:14

相关推荐

GEE (Google Earth Engine)最基础代码学习笔记四——循环

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

图片来源:网络,侵删~

这是我的微信公众号塞翁的读书笔记,想拜托你来看看,谢谢啦

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。