我是一名研究生,刚开始学习地理信息系统和地理信息系统。对于与我的博士研究相关的工作,我看的是一个沿海地区的行星图像。我试图只看低洼盐沼的区域,所以我一直试图掩盖某一海拔以下的像素--但没有效果。
我现在有三个图像,并一直在使用美国3 3DEP的海拔数据,它的形式是一个ImageCollection。加载图像,可视化它们和掩蔽零很好。
var us3DEP = ee.ImageCollection('USGS/3DEP/1m');
var us3DEPvis = {
min: 0,
max: 3000,
palette: [
'3ae237', 'b5e22e', 'd6e21f', 'fff705', 'ffd611', 'ffb613', 'ff8b13',
'ff6e08', 'ff500d', 'ff0000', 'de0101', 'c21301', '0602ff', '235cb1',
'307ef3', '269db1', '30c8e2', '32d3ef', '3be285', '3ff38f', '86e26f'
],
};
var im1 = ee.Image('/20220114_151633_65_245c_3B_Visual')
var im2 = ee.Image('/20220114_151635_96_245c_3B_Visual')
var im3 = ee.Image('/20220114_151638_26_245c_3B_Visual')
//mask zero values
var mask1 = im1.select('b1').neq(0)
var maskim1 = im1.updateMask(mask1)
var mask2 = im2.select('b1').neq(0)
var maskim2 = im2.updateMask(mask2)
var mask3 = im3.select('b1').neq(0)
var maskim3 = im3.updateMask(mask3)然而,我似乎无法找到一种方法,将收集到的高程数据集成到我图像中的一个波段中。到目前为止,我已经能够从高程图像集合中剪切出一幅图像的区域,但这就给我留下了一幅包含多个波段高程数据的图像:
var im1geo = maskim1.geometry()
var inter1 = us3DEP.filterBounds(im1geo)
var bands1 = inter1.toBands()
var over1 = bands1.clip(im1geo)我试着用ee.Reducer.allNonZero在所有的波段上制作一个面具,但这似乎删除了整个图像(或者只是因为超出我的原因而不能工作,但没有出现错误)。
我做错了吗?我的目标是能够匹配每个像素的海拔数据和每个像素的图像数据,所以也许我不应该担心添加一个波段--但我不知道该如何去做。
谢谢!
发布于 2022-10-19 21:16:55
想想你需要什么。您希望将的高程与您的数据进行比较。因此,toBands()不是正确的操作,因为它为集合USGS/3DEP/1m中的每一幅图像创建了一个频带--这是一组来自不同区域的图像,很少有空间重叠。所以,你只会有许多乐队,大多是蒙面。
相反,您需要为您感兴趣的区域提供一个带有高程数据的图像。如果ROI由3DEP中的一个映像覆盖,那么执行us3DEP.filterBounds(im1geo).first()就足够了,但是更可靠的答案(如果您接近图像边界)是创建所有可用数据的复合映像:us3DEP.filterBounds(im1geo).mean()。
(在许多情况下,也应该使用日期范围进行筛选,但这个集合似乎没有历史数据。)
一旦你有了仰角图像,它应该是简单的使用它作为一个面具。
var elevation = us3DEP.filterBounds(im1geo).mean();
var maxElevation = 30;
var elevationMask = elevation.lt(maxElevation);然后,只需.mask(elevationMask)您想要处理的图像。
https://stackoverflow.com/questions/74129912
复制相似问题