Google Earth Engine(地表参量计算)

2022-04-29 08:32:01 浏览数 (2)

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对地表参量进行计算(地表蒸散)。下一期,我们将会讲到,如何利用经纬度提取数据并导出。

0 人点赞