当前位置: 首页 > news >正文

GEE学习笔记九十一:栅格影像叠置分析

最近发现好多人都在问一个问题,两张影像如何取其相交区域?其实这个问题简单来讲就是多张栅格影像进行叠加分析。在GEE中栅格影像不像矢量数据那样有直接的函数来做数据分析,需要我们自己手动写一些代码来实现这些操作。要实现这个功能有很多方法,这里简单说一下有几种方式:

第一种:先将栅格影像数据转换为矢量数据,然后在利用矢量数据计算。这种方式想想可以,但是千万别在实际中使用。

第二种:直接使用影像自带的方法mask()和updateMask()实现,这种方法简单快捷,下面我会通过具体的例子来说明一下如何实现这个功能。

    下面通过A:蓝色区域,B:粉色区域,来展示不同叠置分析具体是什么样子,相信大家对下面这个图非常清楚了,就在一一解释,下面通过具体例子来说明影像如何实现这几种情况。

公共代码:

var center = /* color: #0b4a8b */ee.Geometry.Point([115.78080896985244, 37.569622364096226]);
 
var img = ee.Image("LANDSAT/LC08/C01/T1_SR/LC08_123034_20160504")
 
            .multiply(0.0001)
 
            .normalizedDifference(["B5", "B4"])
 
            .rename("NDVI");
 
var vis = {
 
  min: 0,
 
  max: 1,
 
  palette: [
 
    'FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901',
 
    '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01',
 
    '012E01', '011D01', '011301'
 
  ],
 
};
 
Map.centerObject(center, 8);
 
Map.addLayer(img, vis, "NDVI", false);
 
var roi1 =
 
    ee.Geometry.Polygon(
 
        [[[115.58854822766494, 37.72402725521113],
 
          [115.58854822766494, 37.48467189570746],
 
          [115.92912439953994, 37.48467189570746],
 
          [115.92912439953994, 37.72402725521113]]], null, false),
 
    roi2 =
 
    ee.Geometry.Polygon(
 
        [[[115.78630213391494, 37.62185147647586],
 
          [115.78630213391494, 37.36688853978036],
 
          [116.1406112159462, 37.36688853978036],
 
          [116.1406112159462, 37.62185147647586]]], null, false);
 
var imgA = img.clip(roi1);
 
var imgB = img.clip(roi2);
 
Map.addLayer(roi1, {color: "00ffff"}, "roi1", false);
 
Map.addLayer(roi2, {color: "ff00ff"}, "roi2", false);
 
Map.addLayer(imgA, vis, "imgA");
 
Map.addLayer(imgB, vis, "imgB");
 
 

运行结果如下:

1、AB相交,取AB交集

下面的例子计算的就是A和B的交集,然后结果返回的是A的数据结果

  1. //A B交集

  2. var intersection = imgA.updateMask(imgB.mask());

  3. Map.addLayer(intersection, vis, "intersection");

运行结果:

2、AB相交,取AB并集

    取并集可以有很多中方式,下面介绍两种常用的方式,一种是利用mask()和updateMask()来做,另外一种方式则是利用构建ImageCollection方式来做。

第一种方式,需要说明的是下面这个代码返回相交区域结果是两张影像求和的结果

  1. //(1)A B并集

  2. var mask = imgA.mask().or(imgB.mask());

  3. var baseImg = ee.Image.constant(0)

  4.                 .updateMask(mask);

  5. var newImgA = baseImg.where(imgA.mask(), imgA);

  6. var newImgB = baseImg.where(imgB.mask(), imgB);

  7. var union = newImgA.add(newImgB);

  8. Map.addLayer(union, vis, "union");

返回结果如下,点击的是箭头指示的地方,可以看到union的影像是两张影像的和,非相交的地方则是对应自己的结果。

第二种方式,构造ImageCollection,然后计算并集

  1. //(2)A B并集

  2. var imgAB = ee.ImageCollection.fromImages([imgA, imgB]);

  3. var union1 = imgAB.mosaic();

  4. Map.addLayer(union1, vis, "union1");

  5. var union2 = imgAB.sum();

  6. Map.addLayer(union2, vis, "union2");

其中:union1是普通的拼接而得到的结果,每一个像素结果都是唯一的;union2是求和计算拼接的结果,运算结果和第一种方式类似。

3、AB相交,AB的交集取反

    计算这个关键就是如何删除交集,主要逻辑就是考虑清楚下面代码mask2就可以,这个是交集的掩膜,那么只要对这个掩膜取反就可以了。

  1. // AB的交集取反

  2. var mask = imgA.mask().or(imgB.mask());

  3. var baseImg = ee.Image.constant(0)

  4.                 .updateMask(mask);

  5. var newImgA = baseImg.where(imgA.mask(), imgA);

  6. var newImgB = baseImg.where(imgB.mask(), imgB);

  7. var mask2 = imgA.mask().and(imgB.mask());

  8. var symmetricDifference = newImgA.add(newImgB)

  9.                                  .updateMask(mask2.not());

  10. Map.addLayer(symmetricDifference, vis, "symmetricDifference");

运行结果如下:

4、AB相交,取属于A但非B

具体代码如下:

  1. //取属于A但非B

  2. var difference = imgA.updateMask(imgB.mask().not());

  3. Map.addLayer(difference, vis, "difference");

运行结果:

    总结一下就是影像要实现叠置分析,最关键就是明白影像中的mask()、updateMask()、unmask()等方法使用,通过这些方法结合and、or、not等逻辑判断就可以实现自己想要的各种结果。

来源请引用:地理遥感生态网科学数据注册与出版系统

相关文章:

GEE学习笔记九十一:栅格影像叠置分析

最近发现好多人都在问一个问题,两张影像如何取其相交区域?其实这个问题简单来讲就是多张栅格影像进行叠加分析。在GEE中栅格影像不像矢量数据那样有直接的函数来做数据分析,需要我们自己手动写一些代码来实现这些操作。要实现这个功能有很多方…...

linux系统编程入门

一、搭建环境 1、安装 Linux 系统(虚拟机安装、云服务器) https://releases.ubuntu.com/bionic/ 2、安装 XSHELL、XFTP https://www.netsarang.com/zh/free-for-home-school/ 3、安装 visual studio code https://code.visualstudio.com/ 4、Linu…...

JS代码安全防护常见的方式

文章目录1. 常量的混淆1.1 十六进制字符串1.2 unicode字符串1.3 字符串的ASCII码混淆1.4 字符串常量加密1.5 数值常量加密2. 增加逆向分析难度2.1 数组混淆2.2 数组乱序2.3 花指令2.4 jsfuck3. 代码执行流程的防护3.1 流程平坦化3.2 逗号表达式4. 其他代码防护方案4.1 eval加密…...

PHP(13)HTTP协议

PHP(13)HTTP协议一、HTTP请求1. 请求行2. 请求头3. 请求体二、HTTP响应1. 响应行2. 响应头三、设置HTTP响应四、模拟HTTP请求一、HTTP请求 1. 请求行 请求行独占一行。形式:请求方式 资源路径 协议版本号 GET /index.php HTTP/1.1 2. 请求…...

基于支持向量机 (SVM) 用php实现预测气温

Windows 10自带的天气应用有一个基于历史数据预测气温的功能,有一定的参考价值。那么如何去实现这一功能呢?本文采用php进行实现。 使用机器学习方法实现预测当日气温的算法需要涵盖许多的步骤,以下是一种基于支持向量机 (SVM) 的算法的简化…...

MySQL(五)

通过索引进行优化 索引基本知识 索引的优点 1、大大减少了服务器需要扫描的数据量2、帮助服务器避免排序和临时表3、将随机io变成顺序io 索引的用处 1、快速查找匹配WHERE子句的行2、从consideration中消除行,如果可以在多个索引之间进行选择,mysql通常会使用找到…...

Linux常用命令2

目录1.查找find(1)普通用法(2)组合用法2.xargs命令3.管道符4.查看文件内容(1)查看两个文件的差别:diff file1 fille2(2)正序查看文件内容cat(3)倒序查看文件内容tac(4)分页查看文件内容more(5)分页查看文件内容less(6)…...

『C/C++养成计划』Visual Studio Code编辑器配置(外观通用型扩展Minmal)

Visual Studio Code编辑器配置(外观&通用型扩展&Minmal)! 文章目录 一. vscode配置外观|通用型扩展1.1. 色彩主题配置扩展(GitHub Theme)1.2. 图标主题扩展(Material Icon Theme)1.3. 代码高亮扩展(better-comments)1.4. 错误警告扩展(error lens)1.5. 执行代码扩展(c…...

设计模式(适配器模式)

设计模式(适配器模式) 第二章 设计模式之适配器模式(Adapter) 一、Adapter模式介绍 适配器模式位于实际情况和需求之间,填补两者之间的差距。 二、示例程序1(使用继承的适配器) 1.示例程序示…...

在基于全志D1s的芒果派麻雀上运行国产开源rt-smart系统

想必RT-Thread系统大家不陌生了,RT-Thread Smart(简称 rt-smart)是基于 RT-Thread 操作系统衍生的新分支,面向带 MMU,中高端应用的芯片,例如 ARM Cortex-A 系列芯片,MIPS 芯片,带 MM…...

【代码随想录训练营】【Day15】第六章|二叉树|层序遍历|226.翻转二叉树|101.对称二叉树

层序遍历 题目详细:LeetCode.102 层序遍历与上一节讲的三种遍历方式有所不同,层序遍历是指按从上到下,从左到右的顺序,逐层地遍历二叉树的节点。 从其节点的遍历顺序上观察,我们可以发现其跟广度优先遍历&#xff0…...

基于圆展开自适应三边测量算法的室内定位

基于圆展开自适应三边测量算法的室内定位 具有无线通信功能的移动设备的日益普及刺激了室内定位服务的增长。室内定位用于实时定位设备位置,方便访问。然而,由于大量障碍物,与室外定位相比,室内定位具有挑战性。全球定位系统非常适…...

使用中断子系统实现对LED灯的控制

中断顶半部:不允许耗时操作 代码流程: 1、基于字符设备驱动的注册(手动/自动) 2、基于设备树文件的自定义完成(myled, myirq) 2、基于GPIO子系统实现led的点亮(流水/测试文件控制) 3、中断子系统操作流程 …...

《爆肝整理》保姆级系列教程python接口自动化(十五)--参数关联接口(详解)

简介 我们用自动化新建任务之后,要想接着对这个新建任务操作,那就需要用参数关联了,新建任务之后会有一个任务的Jenkins-Crumb,获取到这个Jenkins-Crumb,就可以通过传这个任务Jenkins-Crumb继续操作这个新建的任务。 …...

【JDK8】MyBatis源码导入Idea

1.背景 为了更好的将MyBatis的开发设计思想带到日常开发工作,将MyBatis源码导入到本地开发工具中(idea)。我自己在导入的时候碰到几个问题,耽误了自己一点时间,这里我把它们记下来,后边的小伙伴可不要踩我的坑。 Java版本&#x…...

三层交换机DHCP中继

关于中继,我们需要有一个对比。正常情况下我们是不是需要配置单臂路由然后开启DHCP地址池,然就设置网段网关以及DNS。这样的话考验 的其实是命令功底。但是为了方便,我们 可以添加服务器,将这个服务给到服务器去配置,这…...

C++之RALL机制

RALL是Resource acquisition is initialization的缩写,意思是“资源获取即初始化”,其核心思想是利用C对象生命周期的概念来控制程序的资源。它的技术原理很简单,如果希望对某个重要资源进行跟踪,那么创建一个对象,并将…...

回溯算法章末总结

组合问题的特点 (1)abba 选中a之后,就不再选了 (2)找出所有的组合 (长度可以不相等) 组合问题模板 做回溯题步骤 (0)判断问题类型 (1)树状图 …...

【SpringBoot】为异步任务规划线程池

一、线程池的作用 防止资源占用无限的扩张调用过程省去资源的创建和销毁所占用的时间 在上一节中,我们的一个异步任务打开了一个线程,完成后销毁。在高并发环境下,不断的分配新资源,可能导致系统资源耗尽。所以为了避免这个问题…...

SAP ABAP 输出结果带有空格

方法一: 字段内容前增加空格,需使用全角空格,使用半角空格时,ALV显示无效,空格无法显示, 全角与半角的切换方法:shift空格切换, 如下的标记部分,要想通过ALV显示空格&…...

PCIe均衡参数测量实战:从8GT/s到32GT/s,示波器上的电压怎么量?

PCIe均衡参数测量实战:从8GT/s到32GT/s的示波器操作指南 在高速串行通信领域,PCIe接口的均衡参数测量是确保信号完整性的关键环节。随着数据传输速率从8GT/s跃升至32GT/s,工程师面临的测量挑战也呈指数级增长。本文将深入探讨如何利用示波器准…...

microeco:微生物组学分析工具的终极指南,让数据分析变得简单快速

microeco:微生物组学分析工具的终极指南,让数据分析变得简单快速 【免费下载链接】microeco An R package for downstream data analysis of microbiome omics data 项目地址: https://gitcode.com/gh_mirrors/mi/microeco 面对海量的微生物组学数…...

【其他】Obsidian笔记Remotely Save插件中国科技云数据胶囊 配置免费的笔记同步

目录 一 注册中国科技云数据胶囊 二 插件下载 & 配置 三 同步测试 一 注册中国科技云数据胶囊 【1】搜索“中国科技云”,找到“数据胶囊”选项,实名注册可以领取20G的容量: 【2】选择“新数据空间”,输入库的标题&#xf…...

告别GUI!用RTKLIB的rnx2rtkp命令行工具批量处理GNSS数据(附VS2019编译避坑指南)

从GUI到命令行:RTKLIB高效数据处理全攻略 在GNSS数据处理领域,RTKLIB作为开源工具链的标杆,其图形界面rtkpost虽然直观易用,但在处理大批量数据时效率低下。本文将带您深入探索命令行工具rnx2rtkp的完整工作流,从编译避…...

嵌入式Linux SPI屏驱动踩坑实录:fbtft模块加载失败与dmesg排错指南

嵌入式Linux SPI屏驱动深度排错指南:从dmesg到硬件配置的全链路解析 当你在树莓派或全志H3开发板上折腾那块SPI接口的TFT屏幕时,是否经历过这样的绝望时刻?设备树配置看起来完美无缺,insmod命令执行后却只收获一片漆黑的屏幕和满屏…...

别再只调分辨率了!手把手教你用VESA时序搞定1080P显示器驱动(附Verilog代码)

从VESA标准到FPGA实战:构建1080P显示驱动的完整逻辑链 在数字显示技术领域,驱动一块19201080分辨率的屏幕远不止是配置几个参数那么简单。当我第一次尝试用FPGA驱动高清显示器时,发现大多数教程都停留在"设置分辨率"的层面&#xf…...

热潮下的冷思考:从OpenClaw“龙虾”困境看AI Agent的理性选择与国产平替

2026年初,开源AI智能体项目OpenClaw(俗称“小龙虾”)以一种近乎野蛮的方式闯入大众视野。两天内GitHub星标突破17万,线下排队安装,甚至催生了“代装龙虾”的灰色产业。然而,这场技术狂欢的B面,却…...

手把手教你用Makerbase VESC遥控你的电机:从硬件连接到APP配置的保姆级避坑指南

Makerbase VESC遥控电机全流程实战:从硬件对接到信号调优的深度指南 第一次拿到Makerbase VESC套件时,看着密密麻麻的接口和参数选项确实让人头皮发麻。作为过来人,我完全理解那种既兴奋又忐忑的心情——兴奋在于终于可以亲手打造自己的智能…...

Perplexity接入Google Scholar的5大避坑指南:实测失效率下降87%的权威配置方案

更多请点击: https://intelliparadigm.com 第一章:Perplexity接入Google Scholar的整合背景与价值定位 学术信息检索正经历从“关键词匹配”向“语义理解可信溯源”的范式跃迁。Perplexity 作为基于大语言模型的实时问答引擎,其核心优势在于…...

【HAL库实战】STM32F407通过I2C驱动MPU6050全解析

1. 硬件连接与CubeMX配置 第一次用STM32F407驱动MPU6050时,我对着开发板愣了半天——为啥官方例程用的PB6/PB7引脚,我的模块却要接PB8/PB9?后来才发现这是I2C引脚重映射的典型场景。先看硬件接线要点: 物理连接:MPU6…...