GEE 案例——利用哨兵-2 图像时间序列和谷歌地球引擎云计算自动绘制和监测香港海洋水质参数

目录

简介

结论

代码

结果

APP链接

引用


简介

对沿海水质的持续监测对于水资源管理和海洋生态系统的可持续性至关重要。 遥感数据(如哨兵-2 卫星图像)可提供用于时间序列分析的高分辨率观测数据,而基于云的谷歌地球引擎(GEE)平台则支持简单的图像检索和大规模处理。 本研究以香港沿岸水域为研究区域,利用 GEE (i) 查询和预处理所有与现场测量吻合的哨兵-2 观测数据;(ii) 提取光谱,利用人工神经网络建立水质参数的经验模型;(iii) 利用空间分布图、时间序列图和在线应用程序将结果可视化。 建模工作流程适用于 22 个水质参数,结果表明可以预测若干营养物质和无机成分的水平。 对叶绿素-a、悬浮固体和浊度进行了深入分析,在与独立数据集进行验证时,预测值与观测值之间具有很高的相关性。 选定的输入变量符合光学成分的光谱特征。 由于自动提取了所有可用图像以及不同年份和月份的更多观测数据,因此与同一地区的以往研究相比,结果更为可靠。 除了通过分布图和时间序列图直观显示长期的空间和时间变化外,还可以利用根据历史数据开发的模型捕捉监测期间可能出现的异常情况,包括藻类大量繁殖。 还创建了一个在线应用程序,使新用户能够通过简单的网络界面探索和分析水质趋势。 遥感图像、现场测量和云计算的综合利用为实施有效的监测计划和了解水质动态提供了新的机遇。 虽然获得的精度水平低于预期标准,但考虑到及时提供信息的成本和计算效率,本研究中展示的端到端云计算工作流程应得到进一步研究。

结论

以香港沿海水域为研究区域,本研究利用GEE进行以下工作:(i) 查询和预处理所有与现场测量相符的Sentinel-2观测数据;(ii) 提取光谱以使用人工神经网络(ANN)开发不同水质参数的经验模型;(iii) 使用空间分布图、时间序列图和在线应用程序展示结果。这些功能使新手用户能够发现、分析和可视化遥感图像中的空间和时间模式。本研究表明,Sentinel-2卫星图像、现场测量和GEE云计算平台的整合可以为提供具有成本效益和及时性的水质参数预测提供新的机会。通过分析本研究中的多个水质参数,制图结果可以帮助全面理解研究区域内水质的动态变化,提高对人类活动相关环境变化的认识,并促进合理的管理政策。当未来有更长时间的水质测量记录和可自由获取的地球观测数据可用时,可以开发更综合和稳健的预测模型,以继续为有效的水资源监测框架做出贡献。

代码

//定义研究区
var aoi = ee.Geometry.Polygon([[[113.800, 22.570],[113.800, 22.120],[114.514, 22.120],[114.514, 22.570]]]);//影像加载
var Chla = ee.ImageCollection('users/khoyinivan/S2_Chla_ANN');
var vis = {palette: ['#2b83ba', '#abdda4', '#ffffbf', '#fdae61', '#d7191c'],min: 0.2, max: 30.0};var SS = ee.ImageCollection('users/khoyinivan/S2_SS_ANN');
var Tur = ee.ImageCollection('users/khoyinivan/S2_Tur_ANN');//外界安装包
var utils = require('users/gena/packages:utils');
var text = require('users/gena/packages:text');Map.centerObject(aoi, 11);
var bounds = aoi.bounds();//将数据设为 8 位,这是制作视频所必需的
var Chla_video =  Chla.map(function(image){var label = ee.Date(image.get('system:time_start')).format('YYYY-MM-dd');return image.visualize({forceRgbOutput: true,palette: ['#2b83ba', '#abdda4', '#ffffbf', '#fdae61', '#d7191c'],min: 0.2, max: 30.0}).set({label: label});
});// 诠释
var annotations = [{position: 'left', offset: '1%', margin: '1%', property: 'label', scale: Map.getScale() * 5}];Chla_video = Chla_video.map(function(image) {return text.annotateImage(image, {}, bounds, annotations);
});var Chla_list = Chla_video.toList(Chla_video.size());/** 地图图层配置*/// 创建主要的地图
var mapPanel = ui.Map();/** 面板设定*/// 创建一个面板,用于放置标题、介绍文本、图表和图例组件。
var inspectorPanel = ui.Panel({style: {width: '30%'}});// 创建面板进行介绍
var intro = ui.Panel([ui.Label({value: 'Marine Water Quality Inspector - Time Series Estimated From Satellite Image (2015-2021)',style: {fontSize: '20px', fontWeight: 'bold'}}),ui.Label('Refresh the browser if the charts cannot be shown.'),ui.Label('Background of this app can be found in:'),ui.Label('https://github.com/ivanhykwong/Marine-Water-Quality-Time-Series-HK').setUrl('https://github.com/ivanhykwong/Marine-Water-Quality-Time-Series-HK'),ui.Label('Click a location to see its time series of Chlorophyll-a (μg/L).')
]);
inspectorPanel.add(intro);// 创建面板来保存长/纬度值。
var lon = ui.Label();
var lat = ui.Label();
inspectorPanel.add(ui.Panel([lon, lat], ui.Panel.Layout.flow('horizontal')));// 为图表和图例添加占位符。
inspectorPanel.add(ui.Label('[Chart]'));
inspectorPanel.add(ui.Label('[Legend]'));
inspectorPanel.add(ui.Label('Click a location to see its time series of other indicators.'));
inspectorPanel.add(ui.Label('[Chart-SS]'));
inspectorPanel.add(ui.Label('[Chart-TUR]'));/** 图表设定*/// 为给定坐标生成新的 SST 时间序列图。
var generateChart = function (coords) {// 使用点击事件中的值更新长/纬度面板。lon.setValue('lon: ' + coords.lon.toFixed(2));lat.setValue('lat: ' + coords.lat.toFixed(2));// 为点击的点添加一个点。var point = ee.Geometry.Point(coords.lon, coords.lat);var dot = ui.Map.Layer(point, {color: '000000'}, 'clicked location');// 将点添加为第二层,使其显示在合成层之上。mapPanel.layers().set(1, dot);// 根据时间序列制作图表。var sstChart = ui.Chart.image.series(Chla, point, ee.Reducer.mean(), 50);// 自定义图表。sstChart.setOptions({title: 'Chlorophyll-a: time series',titleTextStyle: {fontSize: 16},vAxis: {title: 'Chlorophyll-a (μg/L)'}, //, viewWindow: { min: 0, max: 30 }hAxis: {title: 'Date', format: 'MM-yyyy', gridlines: {count: 7}},pointSize: 5,legend: {position: 'none'}});// 在固定位置添加图表,以便新图表覆盖旧图表。inspectorPanel.widgets().set(2, sstChart);
};/** 图例设定*/// 根据给定的调色板创建用于图例的色条缩略图。
function makeColorBarParams(palette) {return {bbox: [0, 0, 1, 0.1],dimensions: '100x10',format: 'png',min: 0,max: 1,palette: palette,};
}// 为图例创建颜色条。
var colorBar = ui.Thumbnail({image: ee.Image.pixelLonLat().select(0),params: makeColorBarParams(vis.palette),style: {stretch: 'horizontal', margin: '0px 8px', maxHeight: '24px'},
});// 创建一个包含三个数字的图例面板。
var legendLabels = ui.Panel({widgets: [ui.Label(vis.min, {margin: '4px 8px'}),ui.Label((vis.max / 2),{margin: '4px 8px', textAlign: 'center', stretch: 'horizontal'}),ui.Label(vis.max, {margin: '4px 8px'})],layout: ui.Panel.Layout.flow('horizontal')
});var legendTitle = ui.Label({value: 'Map Legend: Chlorophyll-a (μg/L)',style: {fontWeight: 'bold'}
});var legendPanel = ui.Panel([legendTitle, colorBar, legendLabels]);
inspectorPanel.widgets().set(3, legendPanel);// 为给定坐标生成新的 SST 时间序列图。
var generateChart_SS = function (coords) {// 为点击的点添加一个点。var point = ee.Geometry.Point(coords.lon, coords.lat);// 根据时间序列制作图表。var sstChart = ui.Chart.image.series(SS, point, ee.Reducer.mean(), 50);// 自定义图表。sstChart.setOptions({title: 'Suspended Solids: time series',titleTextStyle: {fontSize: 16},vAxis: {title: 'Suspended Solids (mg/L)'}, //,viewWindow: { min: 0, max: 30 }hAxis: {title: 'Date', format: 'MM-yyyy', gridlines: {count: 7}},pointSize: 5,legend: {position: 'none'}});// 在固定位置添加图表,以便新图表覆盖旧图表。inspectorPanel.widgets().set(5, sstChart);
};// 为给定坐标生成新的 SST 时间序列图。
var generateChart_TUR = function (coords) {//为点击的点添加一个点。var point = ee.Geometry.Point(coords.lon, coords.lat);// 根据时间序列制作图表。var sstChart = ui.Chart.image.series(Tur, point, ee.Reducer.mean(), 50);// 自定义图表。sstChart.setOptions({title: 'Turbidity: time series',titleTextStyle: {fontSize: 16},vAxis: {title: 'Turbidity (NTU)'}, //, viewWindow: { min: 0, max: 25 }hAxis: {title: 'Date', format: 'MM-yyyy', gridlines: {count: 7}},pointSize: 5,legend: {position: 'none'}});// 在固定位置添加图表,以便新图表覆盖旧图表。inspectorPanel.widgets().set(6, sstChart);
};/** 地图设定*/// 创建一个包含滑块和标签的面板。
var uilabel = ui.Label('Chlorophyll-a time series (1=earliest)');
var DateSlider = ui.Slider({min: 1, max: 120, step: 1,style: {stretch: 'horizontal', width:'500px', fontWeight: 'bold'},onChange: (function(value) {mapPanel.layers().reset();mapPanel.layers().add(ee.Image(Chla_list.get(value - 1)), 'Chl-a');})
});
DateSlider.setValue(120);  // Set a default value.
mapPanel.layers().add(ee.Image(Chla_list.get(0)), 'Chl-a');var uipanel = ui.Panel({widgets: [uilabel, DateSlider],layout: ui.Panel.Layout.flow('horizontal')
});// 将面板添加到地图上。
mapPanel.add(uipanel);// 在默认地图上注册一个回调,以便在点击地图时调用。
mapPanel.onClick(generateChart);
mapPanel.onClick(generateChart_SS);
mapPanel.onClick(generateChart_TUR);// 配置地图。
mapPanel.style().set('cursor', 'crosshair');// 使用测试点进行初始化。
var initialPoint = ee.Geometry.Point(114.10, 22.30);
mapPanel.centerObject(aoi, 11);/** 初始化应用*/// 用包含检查器和地图的 SplitPanel 替换根目录。
ui.root.clear();
ui.root.add(ui.SplitPanel(inspectorPanel, mapPanel));generateChart({lon: initialPoint.coordinates().get(0).getInfo(),lat: initialPoint.coordinates().get(1).getInfo()
});
generateChart_SS({lon: initialPoint.coordinates().get(0).getInfo(),lat: initialPoint.coordinates().get(1).getInfo()
});
generateChart_TUR({lon: initialPoint.coordinates().get(0).getInfo(),lat: initialPoint.coordinates().get(1).getInfo()
});

结果

APP链接

 https://khoyinivan.users.earthengine.app/view/marine-water-quality-hk

 

引用

Kwong, I. H. Y., Wong, F. K. K., & Fung, T. (2022). Automatic mapping and monitoring of marine water quality parameters in Hong Kong using Sentinel-2 image time-series and Google Earth Engine cloud computing. Frontiers in Marine Science, 9, 871470. doi: 10.3389/fmars.2022.871470

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Redis4:Redis的Java客户端

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

基于Java Web的传智播客crm企业管理系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

【Eclipse系列】eclipse安装与常规配置(含插件)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、下载与安装 二、常规设置 1.1.设置工作空间(workspace) 1.2.设置字体和字体大小 ​编辑 1.3.设置编码 1.4.去除验证(validation) 1.5.去除单词验证(spelli…

抗辐照MCU芯片工艺解析:如何保障芯片的可靠性

行星探索、轨道飞行器任务和空间研究在内的太空项目需要创新的航天器系统技术提供通信与处理功能。随着商业航天的发展,对于航天电子系统需要考虑高可靠与高性能的同时,还需要考虑降低开发成本和缩短上市时间。 以MCU芯片AS32A401为例,该芯片…

qt QKeySequence详解

1、概述 QKeySequence 是 Qt 框架中的一个类,用于表示和处理键盘快捷键序列。它提供了一种方便的方式来解析、存储和比较键盘快捷键,这些快捷键通常用于触发应用程序中的特定操作或命令。QKeySequence 支持多种格式的快捷键表示,包括单个按键…

【RMA】基于知识注入和模糊学习的多模态歧义分析

abstract 多模态情感分析(MSA)利用互补的多模态特征来预测情感极性,主要涉及语言、视觉和音频三种模态。现有的多模态融合方法主要考虑不同模态的互补性,而忽略了模态之间的冲突所导致的歧义(即文本模态预测积极情绪&…

移动取证和 Android 安全

当今的数字时代已经产生了许多技术进步,无论是智能手机还是虚拟现实、人工智能和物联网 (IoT) 等下一代基础技术。 智能手机已不再只是奢侈品,而是我们生存所必需的东西。根据各种统计数据,如今全球有超过 50% 的人使用手机。 由于数据存储…

【Linux】简易版shell

文章目录 shell的基本框架PrintCommandLineGetCommandLineParseCommandLineExecuteCommandInitEnvCheckAndExecBuildCommand代码总览运行效果总结 shell的基本框架 要写一个命令行我们首先要写出基本框架。 打印命令行获取用户输入的命令分析命令执行命令 基本框架的代码&am…

Java 枚举

目录 枚举是什么 常用方法 构造方法 枚举的优缺点 枚举和反射 实现单例模式 枚举是什么 枚举(enum):是一种特殊的类,用于定义一组常量,将其组织起来。枚举使得代码更具有可读性和可维护性,特别是在处…

【梯度下降法优化】随机梯度下降、牛顿法、动量法、Nesterov、AdaGrad、RMSprop、Adam

本文理论参考王木头的视频: “随机梯度下降、牛顿法、动量法、Nesterov、AdaGrad、RMSprop、Adam”,打包理解对梯度下降法的优化_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1r64y1s7fU/?spm_id_from333.999.0.0&vd_sourceecbdfcacb078d0…

五个高质量伤感视频素材资源站,帮你快速找到完美创作素材

在制作短视频、MV或者广告时,伤感主题的视频素材往往能触动观众的情感,让作品更具共鸣。无论是表达分手、离别,还是展现孤独与失落,合适的伤感素材对情感类创作至关重要。为帮助创作者找到优质的视频素材,以下推荐5个高…

天正建筑T20V8

链接: https://pan.baidu.com/s/1k-PcXJxHWPh3-6yAIfcaPg提取码: dvyn

JavaScript 实现文本转语音功能

全篇大概2000 字(含代码),建议阅读时间10分钟。 引言 我将向大家展示如何使用 JavaScript 和 Web Speech API 快速实现一个“文本转语音”的 Web 应用。通过这个教程,你将了解如何让浏览器将输入的文本朗读出来。 预览效果 一、…

DNS域名详细解析详解

文章目录 DNS域名详细解析详解一、引言二、DNS域名解析过程1、DNS解析概述1.1、DNS解析的基本步骤 2、代码示例 三、DNS查询类型1、递归查询2、迭代查询 四、总结 DNS域名详细解析详解 一、引言 在互联网的世界里,域名和IP地址是两个不可或缺的概念。IP地址是计算…

函数计算——文档与网页数据提取工具(MinerU)应用实践

1 引言 在信息爆炸的时代,AI研究者面临着从海量文档中提取高质量数据的挑战。随着大语言模型在各个领域的广泛应用,有效地处理和整合文档信息成为了基础性的任务。这些文档形式多样,包括学术文献、行业报告、会议PPT、课本、说明书及合同单据…

【网络】应用层——HTTP协议

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是HTTP协议。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! > 专栏选自:网络 &g…

计算生物学与生物信息学漫谈-5-mapping算法

之前的文章我们介绍了参考基因组,也介绍了一些基本概念,具体可以看之前的博客: 计算生物学与生物信息学漫谈-4-参考基因组与Mapping准备_基因组的map-CSDN博客 这次我们讲如何将read map到基因组上所用到的各种算法: 目录 1.1 …

qsqlmysql.lib的编译和使用

文章目录 打开源码 打开源码 打开qt源码安装路径 src相对路径下的文件Src\qtbase\src\plugins\sqldrivers\mysql 比如我是5.9.9版本我的路径就是:D:\Qt5.9.9\5.9.9\Src\qtbase\src\plugins\sqldrivers\mysql 可以看到待编译的mysql驱动文件 使用IDE打开pro文件进…

leetcode 693.交替位二进制数

1.题目要求&#xff1a; 2.题目代码: class Solution { public:bool hasAlternatingBits(int n) {int num n;//设置数组存入二进制位vector<int> array;while(num){array.push_back(num % 2); num num / 2;}//把数组颠倒就能得到此数真正二进制位reverse(array.begin…

IP协议知识点总结

IP协议主要分为三个 1. 地址管理 每个网络上的设备, 要能分配一个唯一的地址 2. 路由选择 小A 给小B 发消息, 具体应该走什么路线 3. 地址管理 IP 地址. 本质上是一个 32 位的整数 通常将, 32 位的整数使用点分十进制来表示, 如 192.168.1.1 一共可以表示 42 亿 9 千万个地址…