今天来简单分享下如何在GEE中利用MODIS数据进行水质参数计算
叶绿素a
定义:叶绿素a是最重要的水质参数之一。它能反映水中浮游生物和初级生产力的分布,其含量变化可以反映水体富营养化程度。
特征:叶绿素a吸收的蓝光和红光较多,而绿光较少,因此随叶绿素浓度加,海水的后向散射光谱即海水的颜色从深蓝逐渐转变为绿色。
遥感波谱基础:不同浓度浮游植物光谱曲线在440nm处出现明显的吸收峰,在502nm处出现独立于叶绿素浓度的“节点”。在“节点”处,海面反射率随叶绿素浓度变化不大。在550mn附近,普遍出现反射峰值随水体叶绿素浓度越高,其辐射峰值也越高。
水体透明度(SD)
遥感监测原理:主要依据可见光波段,原理是基于光线对水体的透射。可见光在水体中的衰减系数越小,则其对水体的穿透性就越好。衰减系数和遥感可视水深之间有一定的关系。有效波段在蓝色至黄色之间。
另外SD(湖泊透明度)是描述湖泊水质和湖泊光学特征的一个重要参数,其变化主要受湖水中光学活性组分(藻类、非藻类颗粒物、黄色物质)和纯水自身的影响;同时, SD也是评价湖泊富营养化的一个重要指标,直观反映湖水清澈和混浊程度,是衡量水下光场的重要指标之一。因此,开展湖泊SD的相关研究对湖泊生态修复具有十分重要的理论意义。
营养状态指数(TSI)
营养状态指数(TSI)是评价水生生态系统的重要参数。以往利用遥感数据分析湖泊TSI的研究都是基于间接方法,即首先从遥感数据中提取一个或多个水体营养指标(Chla、SDD、TP和TN),然后计算和评价TSI。
其间接计算公式为:
采用Wj来评估Chla与其他参数之间的紧密性。Wj值可能因湖而异,也可能因季节而异。此次用GEE主要利用TSI(Chla)公式来实现。
2.GEE实现代码:
首先确定研究区和使用的数据集我选择的研究区为渤海湾的部分区域,使用的数据集为NASA/OCEANDATA/MODIS-Aqua/L3SMI
以下是实现代码:
var startDate = '2020-04-01';
var endDate = '2020-10-31';
var MODIS = ee.ImageCollection('NASA/OCEANDATA/MODIS-Aqua/L3SMI');
var FC = MODIS.filterDate(startDate, endDate).filterBounds(geometry);
print(FC, '可用数据')
// chlor_a叶绿素 a 浓度
var chlor_a = FC.select('chlor_a');
// SD水体透明度
var SD = ee.ImageCollection(FC.map(secchi).copyProperties(FC, ['system:time_start']))
// TSI 营养状态指数(TSI)是评价水生生态系统的重要参数。
var TSI = SD.map(trophicState);
////// 定义运算函数 //////
function secchi(img){
var Rrs_488 = img.select('Rrs_488')
var Rrs_667 = img.select('Rrs_667')
var ln_blueRed = (Rrs_488.divide(Rrs_667)).log()
var lnMOSD = (ee.Image(1.4856).multiply(ln_blueRed)).add(ee.Image(0.2734)); // R2 = 0.8748 with Anthony's in-situ data
var MOSD = ee.Image(10).pow(lnMOSD);
var SD = (ee.Image(0.1777).multiply(MOSD)).add(ee.Image(1.0813));
return(SD.set('system:time_start', img.get('system:time_start')))
}
function trophicState(img){
var TSI = ee.Image(60).subtract((ee.Image(14.41)).multiply((img.log())));
return(TSI.set('system:time_start', img.get('system:time_start')))
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 时间序列
var chlorTimeSeries = ui.Chart.image.seriesByRegion(
chlor_a, geometry, ee.Reducer.mean())
.setChartType('ScatterChart')
.setOptions({
title: '平均叶绿素 a 浓度',
vAxis: {title: 'chlor_a (ug / L)'},
lineWidth: 1,
pointSize: 4,
});
var sdTimeSeries = ui.Chart.image.seriesByRegion(
SD, geometry, ee.Reducer.mean())
.setChartType('ScatterChart')
.setOptions({
title: '平均透明度',
vAxis: {title: 'Zsd [m]'},
lineWidth: 1,
pointSize: 4,
});
var tsiTimeSeries = ui.Chart.image.seriesByRegion(
TSI, geometry, ee.Reducer.mean())
.setChartType('ScatterChart')
.setOptions({
title: '平均营养状态指数(TSI)',
vAxis: {title: 'TSI value)'},
lineWidth: 1,
pointSize: 4,
});
print(chlorTimeSeries)
print(sdTimeSeries)
print(tsiTimeSeries)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Map.centerObject(geometry, 5)
Map.addLayer(chlor_a.mean().clip(geometry), {min:0, max: 100, palette: ['darkblue','blue','limegreen','yellow','orange', 'orangered', 'darkred']}, '平均叶绿素 a 浓度', true)
Map.addLayer(SD.mean().clip(geometry), {min:0, max: 2, palette: ['red','orangered','orange','yellow','limegreen', 'blue', 'darkblue']}, '平均透明度', true)
Map.addLayer(TSI.mean().clip(geometry), {min:30, max: 80, palette: ['darkblue','blue','limegreen','yellow','orange', 'orangered', 'red']}, '平均营养状态指数(TSI)', true)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Export.image.toDrive({
image: chlor_a.mean().clip(geometry),
description: '平均叶绿素 a 浓度',
scale: 250,
region: geometry
});
Export.image.toDrive({
image: SD.mean().clip(geometry),
description: '平均透明度',
scale: 250,
region: geometry
});
Export.image.toDrive({
image: TSI.mean().clip(geometry),
description: '平均营养状态指数(TSI)',
scale: 250,
region: geometry
});
结果显示:
代码完整链接请在微信公众号后台私信
11.26水质参数计算
感谢关注,欢迎转发!
声明:仅供学习使用!
希望关注的朋友们转发,如果对你有帮助的话记得给小编点个赞或者在看!
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...