google-earth-engine - 无法使用“getInfo”将列表元素提取为整数
问题描述
我reduceRegion
用来对 NDWI 确定的水像素数求和。我想在一组图像上执行此操作,以查看一段时间内水域的变化。
这些值是从reduceRegion
控制台中返回的,并且似乎是整数,但我无法将它们提取出来。这似乎是一个常见问题,但解决方案通常是使用getInfo
函数将这些值带到客户端。不幸的是getInfo
,在这种情况下返回 null。
下面的代码用于图像集合或单个图像。单个图像(image1
)返回具有额外属性(waterArea
)的图像,映射算法崩溃(因为函数返回空值)。
我还尝试使用getInfo
onwaterAg
可能将该列表带到客户端,但是返回的List
对象与我不想要的对象相同。
var image1 = ee.Image(leastcloud.first()).select(['B11','B8','B3'])
var stackarea = function(image){
var watermask = ee.Image(0)
var MNDWI = image.normalizedDifference(['B3','B11'])
watermask = watermask.where(MNDWI.gt(.31),1);
//sum of water pixels in an area
var sum = ee.Number(watermask.reduceRegion({
reducer: ee.Reducer.sum(),
geometry: geometry,
scale: 20,
maxPixels: 1e9
}));
var clientSide = sum.getInfo()
var setArea = image.set('waterArea', clientSide)
return setArea
};
var single = stackarea(image1)
print(single)
var watermapped = filterSpot.map(stackarea)
var waterAg = watermapped.aggregate_array('waterArea')
print(waterAg)
我真的不确定如何将这些值提取为数字......
我希望得到一个数字列表,以便我可以将该数组连接到其他数组(图像日期、云像素百分比等)
解决方案
reduceRegion
返回一个字典对象,而不是类似数字的对象。因此,在您的stackarea
函数中,clientSide
变量是字典(即对象),而不是数字。
您要查找的数字存储在reduceRegion
函数返回的字典中。您可以通过get
在此字典对象上使用函数来获取该数字:
var sum = watermask.reduceRegion({
reducer: ee.Reducer.sum(),
geometry: geometry,
scale: 20,
maxPixels: 1e9
}).get('nd');
这样,sum
将是一个服务器端数字,用于存储您所追求的值(这里没有必要使用ee.Number
,因为它没有多大帮助)。
如果您想知道为什么 using get('nd')
but not get('somethingelse')
,那么它就是watermask
图像中波段的名称,并且该名称是normalizedDifference
函数结果的默认波段名称。
而且在我看来,您甚至不需要使用getInfo
需要更多时间来执行的功能。只需删除该行var clientSide = sum.getInfo()
并将下一行修改为var setArea = image.set('waterArea', sum)
.
希望这有帮助。
推荐阅读
- haskell - 如何使用 Shake 分配 PTY?
- javascript - 在第 n 个而不是第一个使用 async 和 await ?
- excel - 过滤表格时如何在 IE(非默认浏览器)中使 Excel 打开超链接
- libreoffice-calc - 在 Starbasic 宏中,在 LibreCalc 中,我无法将字符串作为表达式传递
- php - 如何在 WordPress 仪表板的管理栏中排列列?
- c++ - 如果函数会返回一个指向 char 数组的指针而我不会使用它怎么办?
- node.js - mocha 和 chai 测试期间的 Node.js api 端点超时
- rendering - HTML css - 谷歌浏览器和边缘是一个像素
- linux - 在添加从 RPM 移植的 pkg 后,JFrog 工件和 MergeList /var/lib/apt/lists "(NewVersion2)" 的问题
- android - Android Studio:等待设备时出错:AVD Pixel_3_API_24 的模拟器进程已终止。在配备 M1 芯片的 Mac Book Pro 上