javascript - 地球引擎:在 ee.ImageCollection 上映射会返回 ee.FeatureCollection
问题描述
我正在尝试使用以下脚本从 Sentinel-2 图像集合中删除带有云的图像:
// Remove images with clouds
var cloud_removal = function(image){
// save the quality assessment band QA60 as a variable
var cloud_mask = image.select('QA60');
// calculate the sum of the QA60-Band (because QA60 != 0 means cloud or cirrus presence)
var cloud_pixels = cloud_mask.reduceRegion( // reduceRegion computes a single object value pair out of an image
{reducer:ee.Reducer.sum(), // calculates the sum of all pixels..
geometry:aoi, // inside the specified geometry
scale:60}) // at this scale (matching the band resolution of the QA60 band)
.getNumber('QA60'); // extracts the values as a number
return ee.Algorithms.If(cloud_pixels.eq(0), image);
};
var s2_collection_noclouds = s2_collection_clipped.map(cloud_removal, true);
print('The clipped Sentinel-2 image collection without cloudy images: ', s2_collection_noclouds);
问题是输出(“s2_collection_noclouds”)是一个ee.FeatureCollection。我已经尝试将输出转换为图像集合,但它仍然是一个特征集合:
var s2_collection_noclouds = ee.ImageCollection(s2_collection_clipped.map(cloud_removal, true));
我错过了什么?
解决方案
结果对象确实是一个图像集合,并且可以显示在地图上。例如:
var visualization = {
min: 0,
max: 3000,
bands: ['B4', 'B3', 'B2'],
};
Map.addLayer(s2_collection_noclouds.median(), visualization, "Sentinel-2")
旁注:我确实看到地球引擎代码编辑器控制台将对象类型标记为“FeatureCollection”,并且该集合包含图像对象的特征。这似乎是因为映射函数中的 ee.Algorithms.If() 为多云图像返回了一个空对象。如果您改为返回蒙版图像:
return ee.Algorithms.If(cloud_pixels.eq(0), image, image.mask(0));
那么该集合被正确地描述为一个 ImageCollection。
推荐阅读
- vue.js - nativescript axios - 我在哪里可以在调试模式下看到我的 XHR 请求
- python - python每周导入csv
- neo4j - Neo4j:查询以查找具有最多关系的节点
- javascript - 如何允许用户更改他们的游戏密钥?
- ios - SwiftUI:将视图与其父级的中心对齐
- python - 如何检查discord.py中是否已存在角色
- mysql - 通过google代理连接本地spring boot app到google cloud SQL
- macos - CGEventPost 无法在 Catalina (Mac OSX 10.15) 下将键盘事件传递给另一个进程
- blazor - Blazor 中的 InputNumber 绑定转换器
- wpf - 使用 wpf devexpress 在手风琴控制中更改 SVG 的颜色