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 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'