GEE:栅格计算

本文将介绍在 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 = { min: 0, max: 255, palette: palette };

​​

GEEer成长日记

分享GEE(Google earth engine)与Python等方面的学习记录,一起探讨交流学习心得。共同进步

150篇原创内容

公众号

锐多宝

锐多宝的地理空间 原名:遥感之家

189篇原创内容

公众号

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值