【GEE实践应用】统计遥感数据像元的观测值数量以及良好观测值数量

        下面我们以贵州省毕节市2016年8月1号至2018年7月31号两年间像元的观测值数量以及良好的观测值数量为例,统计结果以图像形式进行输出,如图1所示:

// 1. 定义研究区域
var studyArea = table;

// 获取 Landsat 和 Sentinel-2 数据集
var landsatCollection = ee.ImageCollection("LANDSAT/LE07/C01/T1_TOA")
  .merge(ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA"))
  .filterBounds(studyArea)
  .filterDate('2016-08-01', '2018-07-31');

var sentinelCollection = ee.ImageCollection("COPERNICUS/S2")
  .filterBounds(studyArea)
  .filterDate('2016-08-01', '2018-07-31');

// 定义 Landsat 的云掩蔽函数
var landsatCloudMask = function(image) {
  // 使用 FMask 算法进行云掩蔽
  var fmask = image.select('BQA').bitwiseAnd(1 << 4).eq(0); // FMask quality band
  return image.updateMask(fmask);
};

// 定义 Sentinel-2 的云掩蔽函数
var sentinelCloudMask = function(image) {
  // 使用 QA60 带进行云掩蔽
  var cloudMasked = image.select('QA60').lt(20); // Sentinel-2 cloud probability band
  return image.updateMask(cloudMasked);
};

// 对 Landsat 和 Sentinel-2 数据集应用云掩蔽算法
var cloudFreeLandsat = landsatCollection.map(landsatCloudMask);
var cloudFreeSentinel = sentinelCollection.map(sentinelCloudMask);

// 统计每个像素的总观测数
var countTotal = function(image) {
  return ee.Image.constant(1).rename('total_observations');
};

// 统计每个像素的良好质量观测数
var countGoodQuality = function(image) {
  var goodQualityObservations = image.reduce(ee.Reducer.count());
  return ee.Image.constant(1).rename('good_quality_observations').multiply(goodQualityObservations);
};

// 统计 Landsat 数据集每个像素的总观测数和良好质量观测数
var totalLandsatObservations = cloudFreeLandsat.map(countTotal).sum();
var goodQualityLandsatObservations = cloudFreeLandsat.map(countGoodQuality).sum();

// 统计 Sentinel-2 数据集每个像素的总观测数和良好质量观测数
var totalSentinelObservations = cloudFreeSentinel.map(countTotal).sum();
var goodQualitySentinelObservations = cloudFreeSentinel.map(countGoodQuality).sum();

// 自定义调色板,根据观测数的不同数量显示不同的颜色
var palette = ['white', 'blue', 'green', 'yellow', 'orange', 'red'];

// 显示 Landsat 数据集的总观测数
var visParams = {
  min: 0,
  max: 500, // 根据数据的范围进行调整
  palette: palette // 使用自定义调色板
};

Map.centerObject(studyArea, 7);
Map.addLayer(totalLandsatObservations.clip(studyArea), visParams, 'Total Observations Landsat');

// 显示 Sentinel-2 数据集的总观测数
Map.addLayer(totalSentinelObservations.clip(studyArea), visParams, 'Total Observations Sentinel');

// 显示 Landsat 数据集的良好观测数
Map.addLayer(goodQualityLandsatObservations.clip(studyArea), visParams, 'Good Quality Observations Landsat');

// 显示 Sentinel-2 数据集的良好观测数
Map.addLayer(goodQualitySentinelObservations.clip(studyArea), visParams, 'Good Quality Observations Sentinel');

// 打印结果
print("Total Observations Landsat:", totalLandsatObservations);
print("Total Observations Sentinel:", totalSentinelObservations);
print("Good Quality Observations Landsat:", goodQualityLandsatObservations);
print("Good Quality Observations Sentinel:", goodQualitySentinelObservations);

// 将结果图像转换为浮点型
var resultImageFloatLandsat = totalLandsatObservations.toFloat();
var resultImageFloatSentinel = totalSentinelObservations.toFloat();
var resultImageFloatLandsatGood = goodQualityLandsatObservations.toFloat();
var resultImageFloatSentinelGood = goodQualitySentinelObservations.toFloat();

// 将结果图像导出为 GeoTIFF 格式
Export.image.toDrive({
  image: resultImageFloatLandsat,
  description: 'observations_image_total_landsat', // 输出文件的描述
  folder: 'GEE_exports', // 输出文件的目标文件夹
  region: studyArea.geometry(), // 输出的区域
  scale: 30, // 输出的分辨率
  maxPixels: 1e9 // 最大像素数
});

Export.image.toDrive({
  image: resultImageFloatSentinel,
  description: 'observations_image_total_sentinel', // 输出文件的描述
  folder: 'GEE_exports', // 输出文件的目标文件夹
  region: studyArea.geometry(), // 输出的区域
  scale: 30, // 输出的分辨率
  maxPixels: 1e9 // 最大像素数
});

Export.image.toDrive({
  image: resultImageFloatLandsatGood,
  description: 'observations_image_good_landsat', // 输出文件的描述
  folder: 'GEE_exports', // 输出文件的目标文件夹
  region: studyArea.geometry(), // 输出的区域
  scale: 30, // 输出的分辨率
  maxPixels: 1e9 // 最大像素数
});

Export.image.toDrive({
  image: resultImageFloatSentinelGood,
  description: 'observations_image_good_sentinel', // 输出文件的描述
  folder: 'GEE_exports', // 输出文件的目标文件夹
  region: studyArea.geometry(), // 输出的区域
  scale: 30, // 输出的分辨率
  maxPixels: 1e9 // 最大像素数
});

图1  统计结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/547136.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第九届少儿模特明星盛典 全球赛首席体验官『韩嘉滢』精彩回顾

2024年1月30日-2月1日&#xff0c;魔都上海迎来了龙年第一场“少儿形体行业美育春晚”&#xff01;由IPA模特委员会主办的第九届少儿模特明星盛典全球总决赛圆满收官&#xff01;近2000名少儿模特选手从五湖四海而来&#xff0c;决战寒假这场高水准&#xff0c;高人气&#xff…

前端上传照片压缩 (适合 vue vant组件的)

为什么要这样做&#xff1f; &#xff08;减小服务器压力 提升用户体验上传照片和加载照片会变快&#xff09; 最近有一个需求&#xff0c;通过手机拍照后上传图片到服务器&#xff0c;大家应该都知道&#xff0c;现在的手机像素实在是太高了&#xff0c;随便拍一张都是10M以上…

物联网的核心价值是什么?——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网&#xff0c;这个词汇在当今的科技领域已经变得耳熟能详。但当我们深入探索物联网的核心价值时&#xff0c;我们会发现它远不止是一个简单的技术概念&#xff0c;而是一种能够彻底改变我们生活方式和工作方式的革命性力量。 物联网…

Django之rest_framework(三)

一、GenericAPIView的使用 rest_framework.generics.GenericAPIView 继承自APIVIew,主要增加了操作序列化器和数据库查询的方法,作用是为下面Mixin扩展类的执行提供方法支持。通常在使用时,可搭配一个或多个Mixin扩展类 1.1、属性 serializer_class 指明视图使用的序列化器…

JVM之JVM栈的详细解析

Java 栈 Java 虚拟机栈&#xff1a;Java Virtual Machine Stacks&#xff0c;每个线程运行时所需要的内存 每个方法被执行时&#xff0c;都会在虚拟机栈中创建一个栈帧 stack frame&#xff08;一个方法一个栈帧&#xff09; Java 虚拟机规范允许 Java 栈的大小是动态的或者是…

npm配置阿里镜像库

1、配置阿里云镜像源 #查看当前使用的镜像地址命令 npm config get registry#设置阿里镜像源 npm config set registry http://registry.npmmirror.com 这里要注意下&#xff0c;之前的镜像源地址 https://registry.npm.taobao.org/ 已经不能用了&#xff0c;这里要更改为新…

Grok-1.5 Vision 预览 将数字世界与物理世界连接起来,首款多模态模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

android 创建module

文章目的&#xff1a; 快速创建module并使用 创建步骤&#xff1a; 1 创建module 2 修改module下的build.gradle文件 3 修改清单文件中MainActivity属性&#xff0c;否则APP会因为有多个启动界面而崩溃 4 在主项目build.gradle引用该object Module 至此&#xff0c;可在APP中…

golang 迷宫回溯算法(递归)

// Author sunwenbo // 2024/4/14 20:13 package mainimport "fmt"// 编程一个函数&#xff0c;完成老鼠找出路 // myMap *[8][7]int 地图&#xff0c;保证是同一个地图&#xff0c;因此是引用类型 // i,j表示对地图的哪个点进行测试 func SetWay(myMap *[8][7]int, …

【ARM 裸机】汇编 led 驱动之烧写 bin 文件

1、烧写概念 bin 文件烧写到哪里呢&#xff1f;使用 STM32 的时候烧写到内部 FLASH&#xff0c;6ULL 没有内部 FLASH&#xff0c;是不是就不能烧写呢&#xff1f;不&#xff0c;6ULL 支持 SD卡、EMMC、NAND FLASH、NOR FLASH 等方式启动&#xff0c;在裸机学习的工程中&#x…

参会记录|全国多媒体取证暨第三届多媒体智能安全学术研讨会(MAS‘2024)

前言&#xff1a;2024年4月13日上午&#xff0c;我与实验室的诸位伙伴共聚江西南昌的玉泉岛大酒店&#xff0c;参加了为期一天半的全国多媒体取证暨第三届多媒体智能安全学术研讨会&#xff08;MAS’2024&#xff09;。本届学术研讨会由江西省计算机学会、江西省数字经济学会主…

【学习笔记十七】波次管理、自动波次和WOCR介绍及配置

一、手工维护波次 波次是控制仓库活动(如拣配)的仓库请求项目(通常是出库交货订单项目)的分组。这些分组随后在后续流程中一起处理,例如,将分配到波次的所有仓库请求项目传输到仓库任务创建。 注意:仓库请求是出库交货订单、过账更改、库存转储(用于仓库中的内部移动)或入库…

最短网络kruskal算法

题目描述 农民约翰被选为他们镇的镇长&#xff01;他其中一个竞选承诺就是在镇上建立起互联网&#xff0c;并连接到所有的农场。当然&#xff0c;他需要你的帮助。约翰已经给他的农场安排了一条高速的网络线路&#xff0c;他想把这条线路共享给其他农场。为了用最小的消费&…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果 一、简单介绍 二、简单给视频添加水印图片效果实现…

【保姆级讲解Element UI】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

负载均衡器如何工作,为什么如此重要?

现代应用程序和网站处理大量流量。负载均衡器是保证大型系统平稳运行的主要工具之一。 负载平衡器负责跨多个服务器路由客户端请求以分配负载并防止出现瓶颈。 这有助于最大限度地提高吞吐量、减少响应时间并优化资源使用。 负载均衡器的运行情况&#xff1a; (1).客户端请…

面试算法-176-验证二叉搜索树

题目 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左 子树 只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#x…

C++内存管理与模版(用法详解)

C/C中程序内存区域划分 内核空间&#xff08;用户代码不能读写&#xff09;栈&#xff08;函数中存放的变量&#xff09;内存映射段堆&#xff08;重点&#xff09;数据段&#xff08;静态区&#xff09;全局变量 / 静态变量代码段&#xff08;常量区&#xff09; 试分析下列…

大模型用到的位置编码汇总(面试)

不同于RNN、CNN等模型&#xff0c;对于Transformer模型来说&#xff0c;位置编码的加入是必不可少的&#xff0c;因为纯粹的Attention模块是无法捕捉输入顺序的&#xff0c;即无法区分不同位置的Token。为此我们大体有两个选择&#xff1a;想办法将位置信息融入到输入中&#x…

OpenHarmony轻量系统开发【12】OneNET云接入

12.1 OneNET云介绍 通常来说&#xff0c;一个物联网产品应当包括设备、云平台、手机APP。我将在鸿蒙系统上移植MQTT协议、OneNET接入协议&#xff0c;实现手机APP、网页两者都可以远程&#xff08;跨网络&#xff0c;不是局域网的&#xff09;访问开发板数据&#xff0c;并控制…