google-earth - 如何在地球引擎中找到一个区域(以 polgon 为界)中的所有湖泊?
问题描述
问题陈述是给出了一个感兴趣的区域。
我需要使用水体的 NDWI 指数找到多边形有界区域中的所有湖泊,这些湖泊的高度超过 1500m。然后在 Google Earth Engine 中以表格形式显示从 1984 年到 2018 年以 2 年为间隔的湖泊地表水面积的变化。我使用了 Landsat 5 和 7 数据。
我创建了以下代码: 地球引擎代码
现在我需要以如下格式在表格结构中显示多边形标记区域中的结果:-行-(Lake 1、Lake 2、Lake 3...Lake n)列-(1984 年的表面积,Surface 1986 年面积,....2018 年)
我该怎么做呢?
解决方案
我就评论中发布的代码回答了这个问题,希望问题会随着评论中发布的代码更新。
过滤:好的。
只是一个评论,我不会用 name 命名图像集合变量img
,这让我很困惑,但变量名称取决于你。
var mf = ee.Filter.calendarRange(10, 12, 'month');
var img1 = ee.ImageCollection(l5
.filterDate('1984-01-01','1999-12-31')
.filterBounds(roi)
.filter(mf));
var img2 = ee.ImageCollection(l7
.filterDate('2000-01-01','2018-12-31')
.filterBounds(roi)
.filter(mf));
添加 NDWI:这是您的代码:
var addNDWI = function(image){
var ndwi = image.normalizedDifference(['B2', 'B4']).rename('NDWI');
var ndwiMask = ndwi.gte(0.3);
return image.addBands(ndwi);
};
var image1 = img1.map(addNDWI);
var image2 = img2.map(addNDWI);
您没有保存ndwiMask
,因此您将无法在此功能之外使用它。同样,我不会命名它们image
,因为它们不是图像而是图像集合。
高程掩码:您必须选择elevation
波段:
var elevMask = elevation.select('elevation').gt(1500)
此蒙版图像将具有高程大于 1500 的图像,而没有高程的图像为零。
应用掩码:在这部分你必须记住 Earth Engine 使用函数式编程,所以对象是不可变的,这意味着你不能使用方法更新对象的状态,你必须捕获你正在调用的方法的输出. 这里需要 ndwi 掩码,所以必须用 NDWI 波段计算。
var mask = function(image){
var ndwiMask = image.select('NDWI').gt(0.3)
var ndwi_masked = image.updateMask(ndwiMask);
return ndwi_masked.updateMask(elevMask);
};
var maskedImg = image1.map(mask); // ImageCollection!
var maskedImg2 = image2.map(mask); // ImageCollection!
可视化:结果是ImageCollection
,当您将其添加到地图时,EE 会制作马赛克,这就是您所看到的。请记住这一点以进行进一步处理。
var ndwiViz = {bands: ['NDWI'], min: 0.5, max: 1, palette: ['00FFFF', '0000FF']};
Map.addLayer(maskedImg, ndwiViz, 'Landsat 5 masked collection');
推荐阅读
- java - 为什么即使没有错误,我的 Android Studio 代码也会随机出现红色下划线?
- python - Python无法识别路径
- azure - 在本地使用 azure 搜索
- angular - 泛型类型 ElementRef
需要 2 个类型参数 angular 6 - c# - 谁使用 NotifyCollectionChangedEventArgs 的功能?
- php - 如何在不使用 SQL 查询的情况下在 codeigniter 中组合两个 SQL 表?
- android - Android 中的多个导航图和深度链接
- javascript - com.facebook.react.common.JavascriptException:未定义不是对象(评估'f.seed'),堆栈:
@939:615 - java - 尝试使用变量时 Android 应用程序崩溃
- java - 宁静剧本模式-上传文件