基于pie engine做的Landsat8遥感影像温度反演

基于pie engine做的Landsat8遥感影像温度反演报错 Dn0.devide is not a function

img


请问怎么解决


```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);

另外,由于地表辐射率的计算使用了fvcfvc的计算又使用了NDVI,因此必须确保在计算地表辐射率之前先计算fvc,即将计算地表辐射率的代码放在计算fvc的代码之后。