# Load libraries
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
import numpy as np
import os
import xarray as xr
import contextily as ctx
from matplotlib_scalebar.scalebar import ScaleBarExploring the extent and impact of the Eaton and Palisades fires in Los Angeles County
Use of false-color imagery and Landsat data to assess impacts of fire.

Photo of homes burning right next to the ocean.
Photo credit: Cal-Fire.
Link: https://commons.wikimedia.org/wiki/File:Palisades_Fire_(54253581167).jpg
Background
The Eaton and Palisades fires in Los Angeles County started in January 7, 2025 and subsequently burned over 20,000 acres, devastating local communities, damaging thousands of homes and many acres of ecological habitat, and leaving deep scars in both the communities they affected and the land itself. In this study, we will visualize the extents and impacts of the Eaton and Palisades fires using false color imagery through Landsat data and known perimeters of both fires, and focus in on an environmental justice metric to assess the community’s potential response to wildfire.
To learn more about false color images and landsats, see the following resources:
Why is that Forest Red and that Cloud Blue? How to Interpret a False-Color Satellite Image
What are the band designations for the Landsat satellites?
Common Landsat Band Combinations
Analysis Highlights
In this study, we will highlight the following skills:
- Examining rioxarrays and NetCDF files to pull, transform, and manipulate spatial data.
- Map true and false color images from NetCDF files.
- Map census tracts that intersect the Eaton and Palisades fires to explore potential injustices.
Datasets:
Landsat data are from Microsoft Planetary Computer data catalogue. These data contain bands for red, green, blue, near-infrared and shortwave infrared, from the Landsat Collection 2 Level-2 collected by Landsat-8. Our data is cropped to areas surrounding the extent of the fires.
Perimeter data are from Los Angeles County Dissolved Fire Perimeter Data. These data originate from data containing daily snapshots of perimeters, but are dissolved into one layer for these data.
Fire perimeter data: https://geohub.lacity.org/maps/ad51845ea5fb4eb483bc2a7c38b2370c/about Landsat data: https://planetarycomputer.microsoft.com/dataset/landsat-c2-l2
EJI data are from the Environmental Justice Index (EJI), a national tool to measure environmental burden. The EJI ranks tracts for 36 different factors developed from data from many different sources.
Repository:
All code and output for this blogpost are housed on GitHub.
Begin by loading all necessary libraries and data.
# Load data
# Read in NetCDF file
fp_landsat = os.path.join("data", "landsat8-2025-02-23-palisades-eaton.nc")
landsat = xr.open_dataset(fp_landsat)
# Read in perimeter data
fp_eaton = os.path.join("data", "Eaton_Perimeter", "Eaton_Perimeter_20250121.shp")
fp_palisades = os.path.join("data", "Palisades_Perimeter", "Palisades_Perimeter_20250121.shp")
eaton_perimeter = gpd.read_file(fp_eaton)
palisades_perimeter = gpd.read_file(fp_palisades)
# Import CA EJI gdb
fp = os.path.join("data", "EJI_2024_California", "EJI_2024_California.gdb")
eji_california = gpd.read_file(fp)Part 1: Visualize extent of fires using false color imagery
Multispectral mages can be with a combination of three bands of color: red, green, and blue (RGB). A true color image (like most images we see on a computer) have the correctly assigned bands to each of these three channels: the red band in the red channel, green band in the green channel, and blue band in the blue channel. False color imagery is the process of assigning the “wrong” bands to corresponding RGB channels. This can help the viewer view bands not usually visible to the human eye (e.g near infrared or short-wave infrared), and also to better highlight aspects of topography of interest for remote sensing needs such as monitoring floods or vegetation loss. In this project, we will be using false color imagery to highlight areas that have had extensive damage due to fires by assigning short wave infrared (SWIR) and near infrared (NIR) to our RGB channels.
First we will check the crs of our perimeter data and make sure they match our Landsat data and are projected so we can map them. We will transform our perimeter data to match our Landsat data’s CRS of EPSG:32611.
print(f"CRS before: {palisades_perimeter.crs}")
print(f"CRS before: {eaton_perimeter.crs}")
# Update CRS to match the landsat data
palisades_perimeter = palisades_perimeter.to_crs('epsg:32611')
eaton_perimeter = eaton_perimeter.to_crs('epsg:32611')
# Check the transformation worked
print(f"CRS after: {palisades_perimeter.crs}")
print(f"CRS after: {eaton_perimeter.crs}")CRS before: EPSG:3857
CRS before: EPSG:3857
CRS after: epsg:32611
CRS after: epsg:32611
We need to restore geospatial information to our Landsat data as it is currently stored in the spatial_ref attribute.
# Pull out the CRS information by accessing that attribute
landsat.spatial_ref.crs_wkt
# Assign the correct crs to the data
landsat.rio.write_crs(32611, inplace = True)
# Check crs is correctly applied
print(landsat.rio.crs)EPSG:32611
fig, ax = plt.subplots()
# Plot the false color landsat map
landsat[['swir22', 'nir08', 'red']].fillna(0).to_array().plot.imshow(robust = True)
# Plot perimeters overlayed on the false color map
palisades_perimeter.plot(ax=ax, color = 'none', edgecolor='red')
eaton_perimeter.plot(ax=ax, color = 'none', edgecolor='red')
# Set title
ax.set_title("False Color Image: Extent of Palisades and Eaton Fires")
# Add labels for each fire
plt.figtext(x = .65,
y = .68,
s ="Eaton Fire",
weight = 'bold',
bbox=dict(facecolor='lightgray', edgecolor='black'))
plt.figtext(x = .2,
y = .53,
s ="Palisades Fire",
weight = 'bold',
bbox=dict(facecolor='lightgray', edgecolor='black'))
# Remove axes ticks
ax.set_xticks([])
ax.set_yticks([])
# Remove axes labels
ax.set_xlabel("")
ax.set_ylabel("")
plt.show()_files/figure-html/cell-6-output-1.png)
Here we are visualizing landsat data from Los Angeles County, focusing on the areas encompassing the Palisades and Eaton fires from January 2025. This is a false color image, with short-wave infrared assigned to red, near-infrared assigned to blue, and red assigned to green. Short-wave infrared highlights recently burned areas, and near-infrared highlights areas of healthy vegetation. With this method, we are able to easily identify fire scars left behind from the large fires, identified by the red color on the map. Overlayed are known perimeters of each fire, and we can see the perimeters and scars identified by landsat are very similar.
Now we will dive deeper into the socioeconomic attributes of the communities affected by each fire.
_files/figure-html/cell-9-output-1.png)
_files/figure-html/cell-10-output-1.png)