Conversion to At-Satellite Brightness Temperature
http://landsat.usgs.gov/Landsat8_Using_Product.php
TIRS band data can be converted from spectral radiance to brightness temperature using the thermal constants provided in the metadata file:
T = K2 ln( K1 +1) Lλ where:
T = At-satellite brightness temperature (K)
Lλ = TOA spectral radiance (Watts/( m2 * srad * μm))
K1 = Band-specific thermal conversion constant from the metadata
(K1_CONSTANT_BAND_x, where x is the thermal band number)
K2 + Band-specific thermal conversion constant from the metadata
(K2_CONSTANT_BAND_x, where x is the thermal band number)
Standard Landsat 8 data products provided by the USGS EROS Center
consist of quantized and calibrated scaled Digital Numbers (DN)
representing multispectral image data acquired by both the Operational
Land Imager (OLI) and Thermal Infrared Sensor (TIRS).
This is the tutorial. This website provided a full step-by-step tutorial.
https://blogs.esri.com/esri/arcgis/2014/01/06/deriving-temperature-from-landsat-8-thermal-bands-tirs/
You would then need to convert to land temperature using https://www.youtube.com/watch?v=uDQo2a5e7dM
In the last answer, he forgot to do the image reduction. For a better result use this code:
//cloud mask
function maskL8sr(col) {
// Bits 3 and 5 are cloud shadow and cloud, respectively.
var cloudShadowBitMask = (1 << 3);
var cloudsBitMask = (1 << 5);
// Get the pixel QA band.
var qa = col.select('pixel_qa');
// Both flags should be set to zero, indicating clear conditions.
var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
.and(qa.bitwiseAnd(cloudsBitMask).eq(0));
return col.updateMask(mask);
}
//vis params
var vizParams = {
bands: ['B5', 'B6', 'B4'],
min: 0,
max: 4000,
gamma: [1, 0.9, 1.1]
};
var vizParams2 = {
bands: ['B4', 'B3', 'B2'],
min: 0,
max: 3000,
gamma: 1.4,
};
//load the collection:
{
var col = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
.map(maskL8sr)
.filterDate('2018-01-01','2018-12-31')
.filterBounds(geometry);
}
print(col, 'coleccion');
//imagen reduction
{
var image = col.median();
print(image, 'image');
Map.addLayer(image, vizParams2);
}
//median
{
var ndvi = image.normalizedDifference(['B5',
'B4']).rename('NDVI');
var ndviParams = {min: -1, max: 1, palette: ['blue', 'white',
'green']};
print(ndvi,'ndvi');
Map.addLayer(ndvi, ndviParams, 'ndvi');
}
//select thermal band 10(with brightness tempereature), no calculation
var thermal= image.select('B10').multiply(0.1);
var b10Params = {min: 291.918, max: 302.382, palette: ['blue',
'white', 'green']};
Map.addLayer(thermal, b10Params, 'thermal');
// find the min and max of NDVI
{
var min = ee.Number(ndvi.reduceRegion({
reducer: ee.Reducer.min(),
geometry: geometry,
scale: 30,
maxPixels: 1e9
}).values().get(0));
print(min, 'min');
var max = ee.Number(ndvi.reduceRegion({
reducer: ee.Reducer.max(),
geometry: geometry,
scale: 30,
maxPixels: 1e9
}).values().get(0));
print(max, 'max')
}
//fractional vegetation
{
var fv =(ndvi.subtract(min).divide(max.subtract(min))).pow(ee.Number(2)).rename('FV');
print(fv, 'fv');
Map.addLayer(fv);
}
//Emissivity
var a= ee.Number(0.004);
var b= ee.Number(0.986);
var EM=fv.multiply(a).add(b).rename('EMM');
var imageVisParam3 = {min: 0.9865619146722164, max:0.989699971371314};
Map.addLayer(EM, imageVisParam3,'EMM');
//LST in Celsius Degree bring -273.15
//NB: In Kelvin don't bring -273.15
var LST = thermal.expression(
'(Tb/(1 + (0.00115* (Tb / 1.438))*log(Ep)))-273.15', {
'Tb': thermal.select('B10'),
'Ep': EM.select('EMM')
}).rename('LST');
Map.addLayer(LST, {min: 20.569706944223423, max:29.328077233404645, palette: [
'040274', '040281', '0502a3', '0502b8', '0502ce', '0502e6',
'0602ff', '235cb1', '307ef3', '269db1', '30c8e2', '32d3ef',
'3be285', '3ff38f', '86e26f', '3ae237', 'b5e22e', 'd6e21f',
'fff705', 'ffd611', 'ffb613', 'ff8b13', 'ff6e08', 'ff500d',
'ff0000', 'de0101', 'c21301', 'a71001', '911003'
]},'LST');
Best Answer
Check the thumbnails and the metadata before you download.
You've downloaded a tile that contains only a tiny amount of data in the bottom corner from the edge of a Landsat path. If you want data for that tile, you'll need to choose a different date.
Additionally, that image is stated to have 100% cloud cover.
The data is in degrees Kelvin, but you need to apply the scale factor and offset per the documentation, i.e.
DN * 0.00341802 + 149.0
.Lastly you are presented with the "Select Transformation" popup because your QGIS Project has the map CRS set to EPSG:2263 (NAD83 / New York Long Island) and the tile is in a different projection and requires a datum transformation to display. I don't know why you set your map CRS to one that is appropriate for an area on the opposite side of the continent.