首先感谢ENVI-IDL技术殿堂在ENVI平台下的指导,原文链接,现将其在GEE平台实现。不同的是,该博文称使用原始DN值计算NDVI对反演影响不大,但通过实践发现还是有差异,所以代码采用了经过大气校正的地表反射率产品进行NDVI的计算。
注意的地方:代码中44和45行需要自行替换,也可以通过filter过滤功能进行查找得到。另一个需要注意的是原博文中提到的三个变量参数还是需要自己去NASA获取,获取地址,中心经纬度可以通过自己在地图上添加geometry得到。
体谅的地方:接触GEE才开始接触Javascript,所以格式可能不规范,尽量多学习。GEE里面好像不能通过1.divide(image)这样来对图像求倒数,所以很笨的用image.divide(image.multiply(image))这样的方式来实现。
代码基于辐射传输方程实现(如果后期有时间学习分裂窗算法,将再次更新):
/*
* Calculate Land Surface Temperature
* Based on Radiative Transfer Equation
* from Landsat-8 Surface Reflectance Product
* and Landsat-8 Raw Scenes Product
*
* Rember to Replace the Name of Products
* in Line 44 and Line 45
*
* Author: Deserts Tsung, Nov 18,2018
* Chengdu University of Information Technology
*
*/
// Function to Get Land Surface Emissivity(LSE)
// from Landsat-8 Surface Reflectance Product
var LSECalculation = function(SRImage) {
var NDVI = SRImage.normalizedDifference(['B5','B4']),
greaterPart = (NDVI.gt(0.7)).multiply(1),
lessPart = (NDVI.lt(0.05)).multiply(0),
middlePart = (((NDVI.lte(0.7)).gte(0.05)).multiply(NDVI)).subtract(0.05).divide(0.65),
vegCvgRat = lessPart.add(greaterPart).add(middlePart),
lse = vegCvgRat.multiply(0.004).add(0.986);
return lse;
};
// Function to Get Radiance of Blackbody(BBR) at The Same Temperatue
// from LSE and Radiance of B10
var BBRCalculation = function(t,up,down,lse,rad) {
var temp = lse.multiply(-1).add(1).multiply(down).multiply(t),
bbrad = rad.subtract(up).subtract(temp).divide(lse.multiply(t));
return bbrad;
};
// Function to Get Land Surface Temperature(LST)
// from BBR
var LSTCalculation = function(bbrad) {
var temp = bbrad.multiply(774.89).divide(bbrad).divide(bbrad).add(1).log(),
lst = temp.multiply(1321.08).divide(temp).divide(temp).subtract(273);
return lst;
};
var l8lsr = ee.Image('LANDSAT/LC08/C01/T1_SR/LC08_129038_20170501'),/*Replace Here*/
l8raw = ee.Image('LANDSAT/LC08/C01/T1/LC08_129038_20170501'),/*Replace Here*/
lse = LSECalculation(l8lsr),
rad = ee.Algorithms.Landsat.calibratedRadiance(l8raw).select('B10');
var t = 0.76, // Get from http://atmcorr.gsfc.nasa.gov
up = 1.95, // Get from http://atmcorr.gsfc.nasa.gov
down = 3.2, // Get from http://atmcorr.gsfc.nasa.gov
bbrad = BBRCalculation(t,up,down,lse,rad);
var lst = LSTCalculation(bbrad);
生涯第一篇博客,记下格言:人类进化,世界大同。