Google Earth Engine(地表参量计算)
本期我们讲一下如何利用GEE对地表参量(以地表蒸散为例)进行计算。地表蒸散的计算不光会用到遥感数据还会用到一些气象数据。这里的气象数据我们可以使用再分析数据。
GEE上有许多的再分析数据,一般可以满足我们的研究需要。
本次,我们用Landsat-8和再分析数据对北京区域的蒸散发进行计算。
landsat-8蒸散发计算
数据:Landsat-8,再分析数据
研究区域:北京
模型:王开存老师在2008年提出的一种经验模型
其中,ET为地面蒸散值,Rn为净辐射(GEE没有净辐射,就用净长波加短波),Ta为气温,DT为一天的温差。
我们本次利用Landsat-8计算了北京在6月份到10月份的平均蒸散发值,并且与MODIS官方产品(MOD16)进行比较。发现与官方产品差异不大,说明效果还是可以的。 代码:
代码语言:javascript复制var table = ee.FeatureCollection("users/boyxiaozheng/feature/beijing");
function cal_ndvi(image){
var mask=ee.Algorithms.Landsat.simpleCloudScore(image).select(['cloud']).lte();
var ndvi=image.normalizedDifference(['B5', 'B4']).updateMask(mask).rename('NDVI');
return image.addBands(ndvi);
}
var ndvi_image= ee.ImageCollection("LANDSAT/LC08/C01/T1_RT")
.filterBounds(table.geometry())
// .filter(ee.Filter.lt('CLOUD_COVER',10))
.filterDate('2017-06-01','2017-10-01')
.map(cal_ndvi);
var img_list=ndvi_image.toList();
var et_list=[];
for (var i=;i<;i ){
var img=img_list.get(i);
var s_t=ee.Date(ee.Image(img).get('DATE_ACQUIRED'));
var ndvi=ee.Image(img).select('NDVI');
var era5=ee.ImageCollection("ECMWF/ERA5/DAILY")
.filterDate(s_t,ee.Date(s_t).advance(,'day'))
.mean();
var gldas=ee.ImageCollection("NASA/GLDAS/V021/NOAH/G025/T3H")
.filterDate(s_t,ee.Date(s_t).advance(,'day'))
.mean();
var cons1=ee.Image.constant(0.1440);
var cons2=ee.Image.constant(0.6495);
var cons3=ee.Image.constant(0.009);
var cons4=ee.Image.constant(0.0163);
var l_rn=gldas.select('Lwnet_tavg');
var s_rn=gldas.select('Swnet_tavg');
var max_ta=era5.select('maximum_2m_air_temperature').subtract(ee.Image.constant(273.15));
var min_ta=era5.select('minimum_2m_air_temperature').subtract(ee.Image.constant(273.15));
var mean_ta=era5.select('mean_2m_air_temperature').subtract(ee.Image.constant(273.15));
var et_wang=l_rn.add(s_rn).multiply(cons1.add(cons2.multiply(ndvi).add(cons3.multiply(mean_ta).add(cons4.multiply(max_ta.subtract(min_ta)))))).rename('wang_LE');
et_list.push(et_wang);
}
var et_list2=ee.List(et_list)
var et_year=ee.ImageCollection.fromImages(et_list2).mean().clip(table.geometry());
var mod16=ee.ImageCollection("MODIS/006/MOD16A2")
.filterDate('2017-06-01','2017-10-01')
.filterBounds(table.geometry())
.mean()
.clip(table.geometry())
.select('LE');
var visparam = {
min: ,
max: ,
palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,'
'3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'
};
var visParam2 = {
min: ,
max: ,
palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,'
'3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'
};
Map.centerObject(et_year,);
Map.addLayer(et_year,visparam);
//Map.addLayer(mod16,visparam);
结果:
验证结果:
wang_LE(W/m^2)为本次计算的值,LE为MOD16官方产品的值。由于单位不一样,并且MOD16要乘上一个比例系数,因此要把MOD16除以8.64才可以和我们计算的结果比较。可以看出来两个值还是差不多的。
本次计算没有考虑水体的蒸散计算与陆面蒸散计算的差异,可以继续完善。同时,由于再分析数据分辨率较粗,所以计算的结果里面会有网格,可以对再分析数据进行插值进行改善。
本次我们讲了如何运用GEE对地表参量进行计算(地表蒸散)。下一期,我们将会讲到,如何利用经纬度提取数据并导出。