基于pie engine做的Landsat8遥感影像温度反演报错 Dn0.devide is not a function
```clike
var roi = pie.FeatureCollection("NGCC/CHINA_CITY_BOUNDARY")
.filter(pie.Filter.eq("name", "聊城市"))
.first()
.geometry();
Map.centerObject(roi, 6);
Map.addLayer(roi, { color: "ff0000", fillColor: "00000000", width: 3 }, "聊城市");
//按区域、时间筛选影像
var img = pie.ImageCollection("LC08/01/T1")
.filterBounds(roi)
.filterDate("2014-07-26", "2014-07-28")
.select(["B1", "B2", "B3","B4", "B5","B6","B7","B8","B10","B11","BQA"])
.mean()
.clip(roi);
print("img", img);
Map.addLayer(img, { min: 0, max: 3000, bands: ["B2", "B3", "B4","B5", "B6", "B7","B8","B10","B11","BQA"] }, "img", false);
//计算影像的NDVI植被指数
var nir = img.select("B5");
var red = img.select("B4");
var NDVI = nir.subtract(red).divide(nir.add(red)).rename("NDVI");
var qa = img.select("BQA");
var cloudMask = qa.bitwiseAnd(1 << 4).eq(0);
NDVI = NDVI.updateMask(cloudMask);
//归一化植被指数计算
var maxNDVI = pie.Number(NDVI.reduceRegion(pie.Reducer.max(), roi, 1000).get('NDVI'))
var minNDVI = pie.Number(NDVI.reduceRegion(pie.Reducer.min(), roi, 1000).get('NDVI'))
var NDVI_1=NDVI.divide(maxNDVI.subtract(minNDVI))
var visParamNDVI = {
min: -0.2,
max: 0.8,
palette: ['FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901',
'66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01',
'012E01', '011D01', '011301']
};
//加载聊城市NDVI植被指数数据
//var NDVI = img_NDVI.select("NDVI").mosaic().clip(roi);
Map.addLayer(NDVI, visParamNDVI, "NDVI", false);
//植被覆盖度
var ndvi_min = NDVI.reduceRegion(pie.Reducer.min(), roi, 1000).get("NDVI");
ndvi_min = pie.Number(ndvi_min);
var ndvi_max = NDVI.reduceRegion(pie.Reducer.max(), roi, 1000).get("NDVI");
ndvi_max = pie.Number(ndvi_max);
var fvc = (NDVI.subtract(ndvi_min)).divide(ndvi_max.subtract(ndvi_min));
//地表辐射率
var e = fvc.multiply(0.004).add(0.986);
Map.addLayer(e, {min:0.9, max:1}, "e", false);
var visParamNDVI = {
min: -0.2,
max: 0.8,
palette: ['FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901',
'66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01',
'012E01', '011D01', '011301']
};
//6、地面亮温计算
var B10 = img.select("B10")
var Dn0=B10.subtract(3.05).add((e.subtract(1.0)).multiply(3.0875))
var Dn1=e.multiply(0.65)
var Dn=Dn0.devide(Dn1)
var tempVis = {
min: 15,
max: 40,
palette: ['#091497','#28609B','#47997E','#8B9835','#9D6415','#97050B']
};
Map.addLayer(Dn.subtract(273.15), tempVis, "地表亮温", false);
//7、地表温度计算 Ts=Dn/(1+(λ*Dn/ρ)lnε)
var Ts = (1321.08).divide(((774.89).devide(Dn).add(1)).log);
var LST=Ts.subtract(273.5).rename("LST");
//归一化温度指数计算
var maxLST= pie.Number(LST.reduceRegion(pie.Reducer.max(), roi, 1000).get('LST'))
var minLST = pie.Number(LST.reduceRegion(pie.Reducer.min(), roi, 1000).get('LST'))
var LST_1=LST.divide(maxLST.subtract(minLST))
Map.addLayer(LST, tempVis, "地表温度");
在代码中,第38行中有一个错误,将Dn.devide(Dn1)
改为Dn.divide(Dn1)
,因为devide
不是一个有效的函数。以下是修改后的代码:
var B10 = img.select("B10")
var Dn0 = B10.subtract(3.05).add((e.subtract(1.0)).multiply(3.0875))
var Dn1 = e.multiply(0.65)
var Dn = Dn0.divide(Dn1)
var tempVis = {
min: 15,
max: 40,
palette: ['#091497','#28609B','#47997E','#8B9835','#9D6415','#97050B']
};
Map.addLayer(Dn.subtract(273.15), tempVis, "地表亮温", false);
//7、地表温度计算 Ts=Dn/(1+(λ*Dn/ρ)lnε)
var Ts = (1321.08).divide(((774.89).divide(Dn).add(1)).log());
var LST = Ts.subtract(273.5).rename("LST");
//归一化温度指数计算
var maxLST= pie.Number(LST.reduceRegion(pie.Reducer.max(), roi, 1000).get('LST'))
var minLST = pie.Number(LST.reduceRegion(pie.Reducer.min(), roi, 1000).get('LST'))
var LST_1=LST.divide(maxLST.subtract(minLST))
var visParamLST = {
min: 0.2,
max: 1,
palette: ['FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901',
'66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01',
'012E01', '011D01', '011301']
};
Map.addLayer(LST_1, visParamLST, "LST", false);
另外,由于地表辐射率的计算使用了fvc
,fvc
的计算又使用了NDVI
,因此必须确保在计算地表辐射率之前先计算fvc
,即将计算地表辐射率的代码放在计算fvc
的代码之后。