Arcpy Tool:
Land Surface Temperature from Landsat 8 Bands

Eric Samson | 5.17.2021

I was working with some Landsat 8 imagery the other day and thought, "How great would it be if I was able to visualize the land surface temperature using this data?" I started looking into the process of estimating the land surface temperature (LST) from landsat 8 bands and found many resources offering instructions. The steps are a little cumbersome, but I noticed quickly that the entire process could be automated pretty easily. 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 Natural Color image of California's central valley. The bottom images in the slider are the output rasters from the LST tool. The tool outputs both an NDVI raster and an LST raster.

The images above serve as a good example. Having access to land surface temperatures can be hugely beneficial for the agricultural industry. The top image shows a region of fields in the central valley of California. The blue fields could be areas that were recently heavily watered/flooded, or areas that have a lot of vegetation. 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 ArcPy 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"). This can be found on the tool's github page. The 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