专栏名称: 锐多宝
遥感技术教程、资讯与前沿论文
目录
相关文章推荐
51好读  ›  专栏  ›  锐多宝

GEE:栅格计算

锐多宝  · 公众号  ·  · 2024-05-02 21:09

正文

请到「今天看啥」查看全文


本文将介绍在 Google Earth Engine (GEE)平台上进行栅格计算的代码。

原文链接

https://yangleduo.blog.csdn.net/article/details/138350195?spm=1001.2014.3001.5502

示例代码链接

https://code.earthengine.google.com/87226239bba1a9ea6626a25f8b3d2483?noload=true

结果如下图所示,

一、需求

下表列出了几个 ArcGIS 中常用到的栅格计算器公式,我们经常在 ArcGIS 中进行这些操作,但是这些常用到的操作在 GEE 中也可以实现。

二、核心函数

2.1 GEE内置API

2.1.1 比较函数

备注:左操作数和右操作数分别代表需要比较的两个图像。

2.1.2 掩膜操作

2.1.3 布尔运算

2.1.4 数据范围调整

2.2 其他API

2.2.1 设置研究区边界样式

var eevs = require('users/949384116/lib:ImageVisualization/VectorStyle');var roi = geometry; // Geometry 格式研究区边界var roiWithStyle = eevs.setDefaultGeometryStyle(geometry); // Geometry 的默认样式设置
// var roi = table; // FeatureCollection 格式研究区边界// var roiWithStyle = eevs.setDefaultTableStyle(table); // FeatureCollection 的默认样式设置

2.2.2 获取示例NDVI图像

输入:研究区边界 roi,是否显示作者主页 boolAuthHomePageShow ,可填 true 或者 false(默认 false)。

输出:研究区内由2024年4月的 Landsat 中值合成影像生成的 NDVI 图像。

var boolAuthHomePageShow = true;var eesi = require('users/949384116/lib:RasterCalculator/SampleImage');var ndvi = eesi.getExampleNDVIImageFromLandsat(roi, boolAuthHomePageShow);

2.2.2 打印最大最小值

输入:依次为单波段图像 ndvi,波段名,图像名称,研究区边界,分辨率,地理坐标系EPSG编号,bestEffort,tileScale。

输出:一个对象,有最大值和最小值。并可以在控制台打印最大值最小值。

var eesi = require('users/949384116/lib:RasterCalculator/SampleImage');eesi.minMaxValue(ndvi, 'NDVI', 'Original NDVI', roi, 30, "EPSG:4326", true, 5);

2.2.3 绘制像素分布直方图

输入:依次为单波段图像 ndvi,图像名称,研究区边界,分辨率。

输出:像素值分布直方图。并在控制台绘制像素值分布直方图。

var eesi = require('users/949384116/lib:RasterCalculator/SampleImage');eesi.histogramOfImage(ndvi, 'Original NDVI', roi, 30);

三、示例代码链接

https://code.earthengine.google.com/87226239bba1a9ea6626a25f8b3d2483?noload=true

四、示例代码详解

4.1 获取示例NDVI图像

var eesi = require('users/949384116/lib:RasterCalculator/SampleImage');var ndvi = eesi.getExampleNDVIImageFromLandsat(roi, true);

4.2 将指定像素设置为空值

4.2.1 将NDVI像素值小于0的像素设置为空值

// 将小于0的像素设置为空值(保留大于0的像素)var mask_NDVI_gte0 = ndvi.gte(0);var ndvi_nullifyUnderThreshold = ndvi.updateMask(mask_NDVI_gte0);

4.2.1 将DEM小于150的NDVI图像的像素设置为空值

// 将DEM小于150的NDVI图像的像素设置为空值var mask_DEM_gt150 = ee.Image("USGS/SRTMGL1_003").gt(150).clip(roi);var ndvi_nullifyUnderDEMThreshold = ndvi.updateMask(mask_DEM_gt150);

4.2.3 将合并掩膜区域的NDVI图像的像素设置为空值

// 将NDVI小于0且DEM小于150的像素值设置为空值var composite_mask = mask_DEM_gt150.and(mask_NDVI_gte0);var ndvi_nullifyUnderCompositeMask = ndvi.updateMask(composite_mask);

4.3 将空值像素赋值为指定值

// 将空值像素赋值为指定值,比如0var ndvi_replaceNullWithZero = ndvi_nullifyUnderCompositeMask.unmask(0);

4.4 将符合条件的像素设置为指定像素值

4.4.1 将NDVI小于0的像素设置为0

// 将符合条件的像素设置为指定像素值// 将NDVI小于0的像素设置为0var mask_ndvi_lt0 = ndvi.lt(0);var ndvi_modifyValuesByCondition = ndvi.where(mask_ndvi_lt0, 0);

4.4.2 将DEM小于150的NDVI图像的像素设置为0

// 将DEM小于150的NDVI图像的像素设置为0var mask_DEM_lt150 = ee.Image("USGS/SRTMGL1_003").lt(150).clip(roi);var ndvi_modifyValuesByElevationThreshold = ndvi.where(mask_DEM_lt150, 0);

4.4.3 将ndvi小于0且DEM小于150的NDVI图像的像素设置为0

// 将ndvi小于0且DEM小于150的NDVI图像的像素设置为0var composite_mask_2 = mask_DEM_lt150.or(mask_ndvi_lt0);Map.addLayer(composite_mask_2, visParams, 'Composite Mask 2', false);var ndvi_modifyValuesByCompositeMask2 = ndvi.where(composite_mask_2, 0);

4.5 NDVI图像像素值离散化(重分类)

// NDVI图像像素值离散化(重分类)// 比如,NDVI小于0的像素赋值为1,[0, 0.3]的赋值为2,大于0.3的赋值为2var discrete_ndvi = ndvi.where(ndvi.lt(0), 1)    .where(ndvi.gte(0).and(ndvi.lte(0.3)), 2)    .where(ndvi.gt(0.3), 3);

4.6 将图像中每个像素的值限制在一个给定的范围内

4.6.1 clamp()

// clamp(low, high)将所有像素值变为 [low, high]// 低于 low 的像素值变为 low,高于 high 的像素值变为 high// 比如,ndvi像素值大于1,就给它赋值1,小于0的,都给它赋值0var ndvi_LimitValuesWithinRange = ndvi.clamp(0, 1);

4.6.2 unitScale()

// unitScale(low, high):将输入的像素值范围 [low, high] 缩放到 [0, 1] 的范围内var ndvi_rescaleToUnitInterval = ndvi.unitScale(-1, 1);

4.6.3 手动实现最大最小值归一化

// 手动实现最大最小值归一化var Min = -0.9970119595527649;// MIn,Max分别是最小值和最大值,需要提前计算好填进来var Max = 0.9034250974655151;var image_d = ndvi.subtract(Min);var ndvi_normalizeMinMax = image_d.divide(Max - Min);

4.6.4 手动实现等比例映射

// 手动实现等比例映射// 将数据的值域等比例变换到指定值域// 比如,将 [min, max] 的值域映射到 [0, 255]var a = 255 - 0;var b = Max - (Min);var scale = a / b;var ndvi_manualRatioScale = ndvi.subtract(Min).multiply(scale);var manualRatiovisParams = { min0max255, palette: palette };

​​








请到「今天看啥」查看全文