Land Heat Analysis using Google Earth Engine

Google Earth Engine is a platform to combine a multi-petabyte catalog of satellite imagery and geospatial datasets with planetary-scale analysis capabilities and accessible for free. Google Earth Engine only require internet access because all the processes will be executed in the cloud, meaning that it doesn’t take up your hardware space. Unless you wanna export the output into your own computer.

One of the strengths of Google Earth Engine is the Landsat Image Collection. You can access more than thousands of Landsat image from the past until present.

Landsat, in this case of Landsat 8 OLI/TIRS images consist of nine spectral bands with a spatial resolution of 30 meters for Bands 1 to 7 and 9. Thermal bands 10 and 11 are useful in providing surface temperature in the resolution of 100 meters. This article will focus on the usage of Band 10 (Thermal Infrared Sensor) to acquire surface temperature with a study case of a watershed area in Laos.

The flow of executing Google Earth Engine to derive the brightness temperature in Band 10 of Landsat 8:

  1. Add your Area of Interest (AOI):
  • In this case, adding Laos Administrative boundaries is only for display purpose
  • Then there is a shapefile of watershed in one of the region in Laos
  • The shapefile is uploaded into a Google Asset prior to writing the code

2. Filter the image collection

  • Filter by date
  • Filter by area of interest

3. Convert the brightness temperature (Kelvin 0.1) to Celsius

4. Visualize the map

5. Export in GIF. format

Here is the GEE script snippet :

//Display laos admin from shapefile
var laosadmin;
Map.addLayer(laosadmin, {color: ‘green’}, ‘laosadmin’);//import image colllection
var lcCol = ee.ImageCollection(‘LANDSAT/LC08/C01/T1_SR’);//Filter image by date and region of interest
var image2019 = lcCol.filterDate(‘2019–01–01’,’2019–03–01').filterBounds(laoswshed).mosaic();//Convert the brightness temperature (Kelvin 0.1) to Celsius
var tempC2019 =“B10”)
Map.addLayer(tempC2019, {min:0, max:35, palette: [‘lightgreen’,’yellow’,’red’]},’Temp’);//STEP 2 Year 2017
//Filter image by date and region of interest
var image2017 = lcCol.filterDate(‘2017–01–01’,’2017–03–01').filterBounds(laoswshed).mosaic();//Convert the brightness temperature (Kelvin 0.1) to Celsius
var tempC2017 =“B10”)
Map.addLayer(tempC2017, {min:0, max:35, palette: [‘lightgreen’,’yellow’,’red’]},’Temp’);//STEP 3 Year 2015
//Filter image by date and region of interest
var image2015 = lcCol.filterDate(‘2015–01–01’,’2015–03–01').filterBounds(laoswshed).mosaic();//Convert the brightness temperature (Kelvin 0.1) to Celsius
var tempC2015 =“B10”)
Map.addLayer(tempC2015, {min:0, max:35, palette: [‘lightgreen’,’yellow’,’red’]},’Temp’);//Display watershed area
var styling = {color: ‘red’, fillColor: ‘00000000’};
Map.addLayer(;var tempCol = ee.ImageCollection([tempC2015,tempC2017,tempC2019])
print(tempCol)var visArgs = {
max: 35.0,
palette: [‘lightgreen’,’yellow’,’red’]
};// Convert each image to an RGB visualization image by mapping the visualize
// function over the image collection using the arguments defined previously.
var tempColVis = {
return img.visualize(visArgs);
});// Define GIF visualization arguments.
var gifParams = {
‘region’: laoswshed.geometry().bounds(),
‘dimensions’: 600,
//’crs’: ‘EPSG:4678’,
‘framesPerSecond’: 10,
‘format’: ‘gif’
};// Print the GIF URL to the console.
print(tempColVis.getVideoThumbURL(gifParams));// Render the GIF animation in the console.
print(ui.Thumbnail(tempColVis, gifParams));Export.image.toDrive({
image: gifParams,
description: ‘maxPixelsExample’,
scale: 30,
region: laoswshed,
maxPixels: 1e9


This code is trying to analyse the land surface from three different time frame of 2015, 2017, and 2019. The code is repeated for three times for different time frame. This is a single frame analysis, not continuous portrayal of land surface. ‘Var laosadmin’ is the administrative boundaries of Laos and ‘var laoswshed’ is the watershed area.


This article is a simple analysis for land temperature. But this does not categorized as an Urban Heat Island. UHI requires more complex analysis with variety of parameters.

So, here is the GIF. output :

Land surface temperature in Laos watershed in 3 different time frame
Google Earth Engine display for Laos watershed

If you want to open the code in Google Earth Engine, here is the link.


  1. Learn a lot from from this article Urban Heat Island Visualization Via Google Earth EnginePart 1: Spatial


This Post Has 4 Comments

  1. It is very nice,thank you. Can I get how to calculate and display the results in degree celsius,where I tried so many times to convert from brightness in degree celsius. I hope ,you will post code for this.

Leave a Reply