GEE:栅格计算

news/2024/10/18 9:20:44/

作者:CSDN @ _养乐多_

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

结果如下图所示,


文章目录

      • 一、需求
      • 二、核心函数
        • 2.1 GEE内置API
          • 2.1.1 比较函数
          • 2.1.2 掩膜操作
          • 2.1.3 布尔运算
          • 2.1.4 数据范围调整
        • 2.2 其他API
          • 2.2.1 设置研究区边界样式
          • 2.2.2 获取示例NDVI图像
          • 2.2.2 打印最大最小值
          • 2.2.3 绘制像素分布直方图
      • 三、示例代码链接
      • 四、示例代码详解
        • 4.1 获取示例NDVI图像
        • 4.2 将指定像素设置为空值
          • 4.2.1 将NDVI像素值小于0的像素设置为空值
          • 4.2.1 将DEM小于150的NDVI图像的像素设置为空值
          • 4.2.3 将合并掩膜区域的NDVI图像的像素设置为空值
        • 4.3 将空值像素赋值为指定值
        • 4.4 将符合条件的像素设置为指定像素值
          • 4.4.1 将NDVI小于0的像素设置为0
          • 4.4.2 将DEM小于150的NDVI图像的像素设置为0
          • 4.4.3 将ndvi小于0且DEM小于150的NDVI图像的像素设置为0
        • 4.5 NDVI图像像素值离散化(重分类)
        • 4.6 将图像中每个像素的值限制在一个给定的范围内
          • 4.6.1 clamp()
          • 4.6.2 unitScale()
          • 4.6.3 手动实现最大最小值归一化
          • 4.6.4 手动实现等比例映射


一、需求

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

需求公式
将空值赋予某一特定的数值(如100)CON(ISNULL(“raster”),100,“raster”)
将某个特定的栅格值(100)赋值为0Con(“raster”==-100,0,“raster”)
将某一特定的栅格值(如100)赋值为空值setnull(“raster”==100,“raster”)
将栅格数值在某一条件范围内(如大于100)赋值为0Con(“raster” >100,0,“raster”)
使目标影像中的多个栅格数值赋予无效值SetNull(("raster == 100)
栅格计算器中的平方和开方运算(1)Power(raster,2),Power(raster,0.5)
(2)Squre(),SquareRoot()

二、核心函数

GEEAPI_33">2.1 GEE内置API
2.1.1 比较函数
函数名称意义image1 (Image)image2 (Image)返回值
image1.eq(image2)判断对应像素值是否相等。左操作数所取的图像右操作数所取的图像Image
image1.neq(image2)判断对应像素值是否不相等。左操作数所取的图像右操作数所取的图像Image
image1.lt(image2)判断对应像素值是否左值小于右值。左操作数所取的图像右操作数所取的图像Image
image1.lte(image2)判断对应像素值是否左值小于等于右值。左操作数所取的图像右操作数所取的图像Image
image1.gt(image2)判断对应像素值是否左值大于右值。左操作数所取的图像右操作数所取的图像Image
image1.gte(image2)判断对应像素值是否左值大于等于右值。左操作数所取的图像右操作数所取的图像Image

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

2.1.2 掩膜操作
函数名称意义返回值参数名参数说明
updateMask()更新图像的掩膜,保留现有掩膜不为零的位置。Imageimage (Image)输入图像。
mask (Image)图像的新掩膜,范围在[0, 1]之间的浮点值(无效=0,有效=1)。如果此图像只有一个波段,则用于输入图像的所有波段;否则,必须与输入图像具有相同数量的波段。
函数名称意义返回值参数名参数说明
unmask()在输入掩膜为零的所有位置,使用另一个图像的掩膜和值替换输入图像的掩膜和值。Imageinput (Image)输入图像。
value (Image)输入图像的掩码像素的新值和掩膜。如果未指定,则默认为处处有效的常量零图像。
sameFootprint (Boolean)如果为true(或未指定),输出保留输入图像的足迹。如果为false,则输出的足迹是输入足迹与值图像的足迹的并集。
2.1.3 布尔运算
函数名称意义image1 (Image)image2 (Image)返回值
image1.and(image2)如果对应的像素值在image1和image2的每个匹配的波段中都为非零,则返回1。左操作数所取的图像右操作数所取的图像Image
image1.or(image2)如果对应的像素值在image1和image2的每个匹配的波段中至少有一个为非零,则返回1。左操作数所取的图像右操作数所取的图像Image
2.1.4 数据范围调整
函数名称意义返回值参数名参数说明
where(test, value)执行条件替换值。对于输入图像中的每个波段中的每个像素,如果 ‘test’ 中的对应像素为非零,则输出 ‘value’ 中的对应像素,否则输出输入像素。Imageinput (Image)输入图像。
test (Image)测试图像。决定返回哪些输入像素。如果这是单波段,则用于输入图像的所有波段。这不能是数组图像。
value (Image)在测试不为零时使用的输出值。如果这是单波段,则用于输入图像的所有波段。
函数名称意义返回值参数名参数说明
clamp(low, high)将图像中所有波段的值夹在指定范围内。Imageinput (Image)要夹紧的图像。
low (Float)范围中允许的最小值。
high (Float)范围中允许的最大值。
函数名称意义返回值参数名参数说明
unitScale(low, high)缩放输入,使输入值的范围 [low, high] 变为 [0, 1]。Imageinput (Image)要缩放的图像。
low (Float)映射到 0 的值。
high (Float)映射到 1 的值。
2.2 其他API
2.2.1 设置研究区边界样式
javascript">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 图像。

javascript">var boolAuthHomePageShow = true;
var eesi = require('users/949384116/lib:RasterCalculator/SampleImage');
var ndvi = eesi.getExampleNDVIImageFromLandsat(roi, boolAuthHomePageShow);
2.2.2 打印最大最小值

输入:依次为单波段图像 ndvi,波段名,图像名称,研究区边界,分辨率,地理坐标系EPSG编号,bestEffort,tileScale。
输出:一个对象,有最大值和最小值。并可以在控制台打印最大值最小值。

javascript">var eesi = require('users/949384116/lib:RasterCalculator/SampleImage');
eesi.minMaxValue(ndvi, 'NDVI', 'Original NDVI', roi, 30, "EPSG:4326", true, 5);
2.2.3 绘制像素分布直方图

输入:依次为单波段图像 ndvi,图像名称,研究区边界,分辨率。
输出:像素值分布直方图。并在控制台绘制像素值分布直方图。

javascript">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图像
javascript">var eesi = require('users/949384116/lib:RasterCalculator/SampleImage');
var ndvi = eesi.getExampleNDVIImageFromLandsat(roi, true);
4.2 将指定像素设置为空值
4.2.1 将NDVI像素值小于0的像素设置为空值
javascript">// 将小于0的像素设置为空值(保留大于0的像素)
var mask_NDVI_gte0 = ndvi.gte(0);
var ndvi_nullifyUnderThreshold = ndvi.updateMask(mask_NDVI_gte0);
4.2.1 将DEM小于150的NDVI图像的像素设置为空值
javascript">// 将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图像的像素设置为空值
javascript">// 将NDVI小于0且DEM小于150的像素值设置为空值
var composite_mask = mask_DEM_gt150.and(mask_NDVI_gte0);
var ndvi_nullifyUnderCompositeMask = ndvi.updateMask(composite_mask);
4.3 将空值像素赋值为指定值
javascript">// 将空值像素赋值为指定值,比如0
var ndvi_replaceNullWithZero = ndvi_nullifyUnderCompositeMask.unmask(0);
4.4 将符合条件的像素设置为指定像素值
4.4.1 将NDVI小于0的像素设置为0
javascript">// 将符合条件的像素设置为指定像素值
// 将NDVI小于0的像素设置为0
var mask_ndvi_lt0 = ndvi.lt(0);
var ndvi_modifyValuesByCondition = ndvi.where(mask_ndvi_lt0, 0);
4.4.2 将DEM小于150的NDVI图像的像素设置为0
javascript">// 将DEM小于150的NDVI图像的像素设置为0
var 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
javascript">// 将ndvi小于0且DEM小于150的NDVI图像的像素设置为0
var 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图像像素值离散化(重分类)
javascript">// NDVI图像像素值离散化(重分类)
// 比如,NDVI小于0的像素赋值为1,[0, 0.3]的赋值为2,大于0.3的赋值为2
var 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()
javascript">// clamp(low, high)将所有像素值变为 [low, high]
// 低于 low 的像素值变为 low,高于 high 的像素值变为 high
// 比如,ndvi像素值大于1,就给它赋值1,小于0的,都给它赋值0
var ndvi_LimitValuesWithinRange = ndvi.clamp(0, 1);
4.6.2 unitScale()
javascript">// unitScale(low, high):将输入的像素值范围 [low, high] 缩放到 [0, 1] 的范围内
var ndvi_rescaleToUnitInterval = ndvi.unitScale(-1, 1);
4.6.3 手动实现最大最小值归一化
javascript">// 手动实现最大最小值归一化
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 手动实现等比例映射
javascript">// 手动实现等比例映射
// 将数据的值域等比例变换到指定值域
// 比如,将 [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 };

http://www.ppmy.cn/news/1448451.html

相关文章

【软测学习笔记】MySQL入门Day01

🌟博主主页:我是一只海绵派大星 📚专栏分类:软件测试笔记 📚参考教程:黑马教程❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、SQL 语言介绍 二、SQL 语言基础 1、SQL 语言中的注释 2、MySQL 常…

Mac 上安装多版本的 JDK 且实现 自由切换

背景 当前电脑上已经安装了 jdk8; 现在再安装 jdk17。 期望 完成 jdk17 的安装,并且完成 环境变量 的配置,实现自由切换。 前置补充知识 jdk 的安装路径 可以通过查看以下目录中的内容,确认当前已经安装的 jdk 版本。 cd /Library/Java/Java…

蓝桥杯练习系统(算法训练)ALGO-952 简易编辑器

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 你要实现一个简易文本编辑器,每个字符是一个整数,程序要完成一下操作:   P 光标左移&…

问题集锦三

1.简述static和final的用法? static:修饰属性,方法,代码块 (1)静态属性:也可叫类变量 类名.属性名 来访问 (共有的类变量与对象无关,只和类有关) 注意&am…

Vue 组件化开发、根组件

Vue开发的两种方式: 核心包传统开发模式:基于html/css/js文件,直接引入核心包,开发Vue工程化开发模式:基于构建工具的环境中开发Vue 这里选择Vue cli脚手架 进行开发,搜索教程自行下载。 组件化开发 一个页…

SpringBoot日志管理

一.Logback SpringBoot默认使用Logback组件作为日志管理。 Logback是log4j创始人设计的一个开源日志组件。在SpringBoot中已经整合了Logback的依赖,所以我们不需要额外的添加其他依赖,这些日志格式在我们开发过程中是不需要开发人员自己写的,直接cv拿过来…

leetcode40

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 1: 输入: candidates [10,1,2,7,6…

ElasticSearch教程入门到精通——第四部分(基于ELK技术栈elasticsearch 7.x新特性)

ElasticSearch教程入门到精通——第四部分(基于ELK技术栈elasticsearch 7.x新特性) 1. Elasticsearch进阶1.1 核心概念1.1.1 索引Index1.1.1.1 索引创建原则1.1.1.2 Inverted Index 1.1.2 类型Type1.1.3 文档Document1.1.4 字段Field1.1.5 映射Mapping1.…