Arcpy Tool:
Land Surface Temperature from Landsat 8 Bands

Eric Samson | 5.17.2021

I was working with some Landsat 8 data the other day and thought, "I wonder if I could calculate the land surface temperature using these bands?" I started up the google machine and found that estimating the land surface temperature (LST) from landsat 8 bands is totally possible. I found many resources offering instructions, but the steps seemed a little cumbersome. I noticed that the entire process could be automated pretty easily, so decided to create a tool that would automate the process. I’ve outlined the three basic steps below:

1.) Find and retrieve variables within a Landsat metadata file.
2.) Use bands 4 and 5 to create an NDVI layer.
3.) Make a series of raster calculations using the variables gathered from the metadata file, information from the NDVI layer, and bands 10 and 11.

The top image is a Landsat 8 image of California's central valley. The bottom images in the slider are a couple output rasters from the LST tool. The tool outputs an NDISI raster and an LST raster, and optionally outputs an NDVI or MNDWI raster.

The images above serve as a good example of the value land surface temperature data can deliver to the agricultural industry. The top image shows a region of fields in the central valley of California. By using the tool I created, users can quickly create a land surface temperature raster visualizing fields that might be suffering drought stress or fields that are being over watered.

The tool is capable of calculating the following products: NDISI (Normalized Difference Impervious Surface Index), MNDWI (Modified Normalized Difference Water Index), NDVI (Normalized Difference Vegetation Index), and LST (Land Surface Temperature).

After doing the process manually a number of times, I started writing the python script as an ArcGIS pro tool:

As shown above, the tool will need a path to the folder holding the Landsat 8 bands and metadata. Optionally, it will also take a mask geometry. It is best to mask the rasters to the area of interest before the tool is run, or by using the mask option within the tool itself. I have included an empty polygon feature class for quick polygon creation within the folder (see zip of "MaskFeature_Sample.gdb") on the github page. The output LST raster will be in degrees Celsius. The output names will appear as: 'LST_184457GMT_20200403', which stands for 'Land Surface Temperature_Time Image Acquired in GMT_Date Acquired'

Test Example:
Download the ArcGIS toolbox from my github:

Email me