import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import geopandas as gpd
import xarray as xr
import rioxarray
import contextily as ctxClick Here to Github Repository
About
Figure1. Palisades Fire as seen from Downtown Los Angeles (Image captured via PTZ Camera/ VMS system)
The Eaton and Palisades Fires that occurred in early January 2025 devastated thousands of homes, displaced tens of thousands of residents, and caused severe ecological and infrastructural damage. Using a combination of geospatial and tabular datasets, this notebook explores fire scars through false-color imagery derived from remote sensing data. Specifically, it uses Landsat Collection 2 Level-2 atmospherically corrected surface reflectance data collected by the Landsat 8 satellite and provided in NetCDF format, along with fire perimeter vector data in Shapefile format. Additionally, this analysis examines the social dimensions of the Eaton and Palisades Fires using the 2024 Environmental Justice Index (EJI) data for California, provided in geodatabase format.
The analysis centers on four critical technical aspect required for data integration:
Data harmonization through coordinate reference systsem (CRS), which requires reprojecting spatial objects to align all geospatial layers.
Vector-to-raster integration using the fire perimeter shapefile to spatially clip the mutidimensional Landsat NetCDF data.
Mutli-band visulaization, focusing on generating a true-color image (RGB) by selecting and robustly scaling the correct spectral bands from the NetCDF structure.
Geospatial data cleaning, which involves identifying
NaNvalues to ensure data integrity and resolve plotting errors.
About the Data:
- Landsat Collection 2 Level-2:
Atmospherically corrected surface reflectance data, collected by Landsat 8 satellite. Data retrieved from Microsof Planetary Computer data catalogue and clipped to an area surrounding the fire perimeters. For visualization and educational purposes.
- Dissolved Eaton and Palisades Fire Perimeters:
Features layers are publicly available from LA County REST web ArcGIS Hub. Contain heat perimeters for the Palisades and Eaton Fires.
- EJI Data
The 2024 EJI geodatabase data for California is publicly available in Agency for Toxic Substance Disease Registery (ATSDR) and contains environmental, economic, and demographic data at the census track level.
Import the following necessary packages:
Data Loading and Intergration for Wildfire Impact Analysis
The following code loads three key geospatial datasets for analyzing the January 2025 Southern California wildfires:
- Wildfire Perimeter Data:
- Imports shapefiles containing the mapped boundaries of the Eaton and Palisades fires as of January 21, 2025, using GeoPandas for vector geometry handling.
- Satellite Imagery:
- Loads Landsat 8 multispectral satellite data (NetCDF format) captured on February 23, 2025, covering both fire-affected areas using
xarrayfor efficient multidimensional array processing.
- Environmental Justice Index (EJI):
- Imports California’s 2024 Environmental Justice Index data from a geodatabase, which provides socioeconomic and environmental health vulnerability metrics at the census tract level.
Together, these datasets enable spatial analysis that combining fire extent, post-fire satellite observations, and community vulnerability indicators to assess how wildfire impacts vary across different populations.
# Load wildfire perimeter data for the Eaton and Palisades fires (January 21, 2025)
eaton = gpd.read_file(
os.path.join("data","eaton_perimeter",
"Eaton_Perimeter_20250121.shp"))
palisades = gpd.read_file(
os.path.join("data","palisades_perimeter",
"Palisades_Perimeter_20250121.shp"))
# Import the NetCDF Landsat data using xr.open_dataset()
fp= os.path.join("data","landsat8-2025-02-23-palisades-eaton.nc" )
landsat8 = xr.open_dataset(fp)
# Import the EJI geodtabase data
cali_eji = gpd.read_file(os.path.join("data", "EJI_2024_California/EJI_2024_California.gdb"))Data Exploration and Wrangling
The following code performs initial data inspection to understand the structure and contents of the loaded datasets:
- Fire Perimeter Metadata:
- Displays the
DataFramestructure for both Eaton and Palisades fire shapefiles, including column names, data types, non-null counts, and memory usage to verify successful data loading and understand available attributes.
- NetCDF Dimension Analysis:
- Examines the Landsat 8 dataset’s organizational structure by printing its dimensions (spatial and temporal extents), coordinate systems (x, y coordinates and potentially time), and available data variables (spectral bands and derived products).
- Environmental Justice Index Structure:
- Reviews the California EJI
geodatabasestructure, including census tract identifiers, vulnerability indicators, and demographic attributes to understand available metrics for analyzing disproportionate wildfire impacts on vulnerable communities.
This exploratory step is essential for understanding data organization before performing spatial analysis, ensuring the datasets are properly formatted and identifying which attributes and bands are available for subsequent wildfire impact assessment.
# Display DataFrame structure and metadata for both fire perimeters
print(f"\nEaton Fire Perimeter: ")
eaton.info()
print(f"\nPalisades Fire Perimeter:")
palisades.info()
# NetCDF exploration
print(f"\nNetCDF Dimension Analysis:\n")
print("Dimensions:", landsat8.dims)
print("Coordinates:", list(landsat8.coords))
print("Data variables:", list(landsat8.data_vars))
# Display California EJI structure
print(f"\nCalifornia Environmental Justice Index:\n")
cali_eji.info()
Eaton Fire Perimeter:
<class 'geopandas.geodataframe.GeoDataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 OBJECTID 20 non-null int32
1 type 20 non-null object
2 Shape__Are 20 non-null float64
3 Shape__Len 20 non-null float64
4 geometry 20 non-null geometry
dtypes: float64(2), geometry(1), int32(1), object(1)
memory usage: 852.0+ bytes
Palisades Fire Perimeter:
<class 'geopandas.geodataframe.GeoDataFrame'>
RangeIndex: 21 entries, 0 to 20
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 OBJECTID 21 non-null int32
1 type 21 non-null object
2 Shape__Are 21 non-null float64
3 Shape__Len 21 non-null float64
4 geometry 21 non-null geometry
dtypes: float64(2), geometry(1), int32(1), object(1)
memory usage: 888.0+ bytes
NetCDF Dimension Analysis:
Dimensions: FrozenMappingWarningOnValuesAccess({'y': 1418, 'x': 2742})
Coordinates: ['y', 'x', 'time']
Data variables: ['red', 'green', 'blue', 'nir08', 'swir22', 'spatial_ref']
California Environmental Justice Index:
<class 'geopandas.geodataframe.GeoDataFrame'>
RangeIndex: 9109 entries, 0 to 9108
Columns: 174 entries, OBJECTID to geometry
dtypes: float64(147), geometry(1), int32(15), object(11)
memory usage: 11.6+ MB
The above outputs show the Eaton and Palisades fire perimeter datasets stored as GeoDataFrames containing 20 and 21 spatial features, respectively, representing mapped fire boundary components. Each dataset includes geometric information along with attributes describing feature type and measurements of area and perimeter length, confirming that both datasets are well-structured for spatial analysis of fire extent. The remote sensing data are provided in NetCDF format and consist of a two-dimensional spatial grid with 1,418 rows and 2,742 columns, along with multiple spectral bands including visible, near-infrared, and shortwave infrared—that are commonly used to assess burn severity and vegetation change. Together, these bands enable the creation of false-color composites and other raster-based analyses of post-fire conditions.
In addition, the California Environmental Justice Index dataset contains over 9,000 geographic features and an extensive set of demographic and environmental variables, making it suitable for evaluating how wildfire impacts intersect with social vulnerability. Combined, these datasets provide complementary spatial, spectral, and socioeconomic information necessary to analyze both the physical footprint of the fires and their potential environmental justice implications.
Coordinate Reference System (CRS) Verification and Standardization:
A key step when working with spatial data is making sure the coordinate reference systems match for accurate spatial analysis. Here vector data (fire parameters & census tracts) will be combined with raster data (satellite imagery).
The following code checks and standardizes the CRS’s across all datasets to ensure spatial compatibility:
- CRS Inspection:
- Prints the current CRS for each dataset (fire perimeters, EJI data, and Landsat imagery) to identify any coordinate system mismatches that would prevent accurate spatial operations.
- CRS Standardization:
- Reprojects all datasets to a common coordinate reference system, ensuring that spatial overlays, intersections, and distance calculations are geometrically valid for integrated wildfire impact analysis.
# Check CRS for all datasets
print("\nCoordinate Reference Systems:")
print(f"Eaton Fire CRS: {eaton.crs}")
print(f"Palisades Fire CRS: {palisades.crs}")
print(f"California EJI CRS: {cali_eji.crs}")
print(f"Landsat 8 CRS: {landsat8.rio.crs}")
Coordinate Reference Systems:
Eaton Fire CRS: EPSG:3857
Palisades Fire CRS: EPSG:3857
California EJI CRS: PROJCS["USA_Contiguous_Albers_Equal_Area_Conic",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["latitude_of_center",37.5],PARAMETER["longitude_of_center",-96],PARAMETER["standard_parallel_1",29.5],PARAMETER["standard_parallel_2",45.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["ESRI","102003"]]
Landsat 8 CRS: None
Notice: the landsat8 NetCDF produced a None output. This means the xarray.Dataset is not currently geospatial referenced.
The following steps will have to done before standardizing the CRS’s:
Use
spatial_ref.crs_wktto recover the geospatial information and reveal the dataset is EPSG: 32611.Use
rio.write_crs()to assign the recovered CRS metadata to the Landsat dataset, making it a properly georeferenced object for spatial operations. Then,reproject the California EJI data to match the Palisades fire perimeter’s CRS (EPSG:3857). Reproject the Landsat data from its native UTM Zone 11N to the same reference system as well.
The code below standardizes the CRS by using the Palisades fire perimeter as the reference CRS:
Reference CRS Selection:
Palisades fire perimeter’s CRS (EPSG:3857) set as the standard coordinate system for all subsequent spatial analysis.
- EJI Reprojection:
Transforms the California EJI data from its native Albers Equal Area Conic projection (ESRI:102003) to match the fire perimeter CRS, ensuring geometric compatibility for spatial operations like intersections and overlays.
- Raster Data Reprojection:
Assigns the appropriate CRS to the Landsat 8 data (if missing) and reprojects it to match the reference CRS, ensuring all datasets share a common coordinate system for integrated spatial analysis.
This approach first recovers the Landsat’s native CRS from its metadata, then harmonizes all datasets to ensure spatial compatibility.
# Recover embedded spatial reference information
print('\nSpatial reference (CRS_WKT):')
print(landsat8.spatial_ref.crs_wkt)
# Assign the recovered CRS to the dataset
landsat8 = landsat8.rio.write_crs(landsat8.spatial_ref.crs_wkt)
# Verify CRS assignment
print('\nCRS after recovery:', landsat8.rio.crs)
# Set reference CRS from Palisades fire perimeter
crs_reference = palisades.crs
print(f'\nReference CRS for harmonization: {crs_reference}')
# Reproject vector data to reference CRS
cali_eji = cali_eji.to_crs(crs_reference)
# Reproject Landsat to match reference CRS
landsat8 = landsat8.rio.reproject(crs_reference)
# Verify final CRS alignment
print(f'\nFinal CRS verification:')
print(f'Eaton Fire CRS: {eaton.crs}')
print(f'Palisades Fire CRS: {palisades.crs}')
print(f'California EJI CRS: {cali_eji.crs}')
print(f'Landsat 8 CRS: {landsat8.rio.crs}')
Spatial reference (CRS_WKT):
PROJCS["WGS 84 / UTM zone 11N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32611"]]
CRS after recovery: EPSG:32611
Reference CRS for harmonization: EPSG:3857
Final CRS verification:
Eaton Fire CRS: EPSG:3857
Palisades Fire CRS: EPSG:3857
California EJI CRS: EPSG:3857
Landsat 8 CRS: EPSG:3857
Creating a False Color Image to Visualize Fire Damage
This section demonstrates how to create a false color image that highlights burned areas and overlay fire perimeters for spatial context.
Step 1: Fill Missing Values
Replace any NaN (missing) values in the dataset with zeros to prevent plotting errors:
- Satellite imagery often contains NaN values where data collection failed (due to clouds, sensor issues, etc.). These NaN values cause warnings and conversion errors during plotting. Filling them with zero ensures clean visualization without interrupting the color scaling.
Step 2: Align Coordinate Systems
- Here we will have to change the fire perimeters to match the Landsat imagery’s CRS for accurate overlay.
Step 3: Create False Color Composite Map
Combine shortwave infrared, near-infrared, and red bands to create a false color image that makes burned areas stand out, then overlay fire perimeters:
landsat8[["swir22", "nir08", "red"]]- Selects the three specific spectral bands in order.to_array()- Converts the selected bands into a format suitable for RGB plotting.plot.imshow()- Creates the image visualizationrobust=True- Handles outliers (like bright clouds) by using percentile-based scaling instead of absolute min/max values, preventing extreme values from washing out the rest of the imageax=ax- Plots on our created axis so we can add fire perimeters on top
Why these bands? This combination (SWIR2-NIR-Red) creates a false color composite where:
Healthy vegetation appears bright red (high NIR reflection)
Burned areas appear dark brown/black (low reflection across all bands)
Urban areas appear gray-green
Water appears very dark or black
In this composite, healthy vegetation appears bright red, burned areas appear dark brown/black, and urban areas appear gray-green, making fire damage easily visible.
fig, ax = plt.subplots(figsize= (8, 10))
# Plot false color image swir22/nir08/red
bands = landsat8[["swir22", "nir08", "red"]].to_array().fillna(0)
bands.plot.imshow(
ax = ax, # assign axis
robust= True) # removes cloud cover
# Set Fire perimeter legend format
eaton_patch = mpatches.Patch(facecolor = "#E66100",
edgecolor = "black", label= "Eaton")
palisades_patch = mpatches.Patch(facecolor = "#5D3A9B",
edgecolor = "black", label= "Palisades Fire" )
# Plot fire perimeters with edgecolor representation
eaton.plot(ax=ax, facecolor= 'none',
edgecolor= '#E66100',
linewidth= 2,
label= 'Eaton Fires')
palisades.plot(ax=ax, facecolor= 'none',
edgecolor= '#5D3A9B',
linewidth= 2,
label= 'Palisades Fires')
# add legend if not using name lables
ax.legend(handles = [eaton_patch, palisades_patch],
loc='upper left', fontsize= 10)
# Set title
ax.set_title('Eaton and Palisades Fires - False Color Composite\n(SWIR2-NIR-Red)',
fontsize= 14, fontweight='bold')
# Turn axis off for readability
ax.set_axis_off()
plt.tight_layout()
# Print map
plt.show()
False Color Composition Map Description
The map features a false-color composite created from Landsat 8 data, depicting the regions affected by the Eaton and Palisades Fires. By combining SWIR, NIR, and red spectral bands, the image accentuates differences between healthy vegetation and burned terrain. Areas with intact vegetation appear bright green due to strong NIR reflectance, while fire-damaged zones appear in shades of reddish brown. Yellow and red outlines mark the Eaton and Palisades fire perimeters, clearly showing the extent of each fire. This type of false-color imagery is widely used to assess burn severity and understand how landscapes recover over time.
Identifying Affected Communities Using Spatial Analysis
This section demonstrates how to identify which census tracts were impacted by each fire and visualize socioeconomic vulnerability patterns in the affected areas.
Step 1: Spatial Join
Finding Intersecting Census Tracts Use a spatial join to identify which census tracts intersect with each fire perimeter:
gpd.sjoin()performs a spatial join to match features from two datasets based on their geographic relationshippredicate="intersectsmeans “include any census tract that touches or overlaps the fire boundary”
This returns complete census tracts, even if only a small portion overlaps the fire
# CRS do not match; reproject to match palisades CRS
crs_reference = palisades.crs
eji = cali_eji.to_crs(crs_reference)
# Only include EJI census tracts that intersect the Palisades fire perimeter
eji_palisades = gpd.sjoin(eji, palisades, predicate = "intersects")# Define figure and axis dimensions
fig, ax = plt.subplots(figsize = (10,8))
# Plot intersection of eji census tracts with palisades perimeter
eji_palisades.plot(ax= ax, edgecolor = "black", facecolor = "lightblue", linewidth = 3)
# Plot palisades perimeter (outlined in red) for reference
palisades.plot(ax = ax, color = "none", edgecolor = "red", linewidth = 3)
# Set title
ax.set_title("Census Tracts Affected by the Palisades Fire in LA County")
# Turn of axis ticks
ax.set_xticks([])
ax.set_yticks([])
# Call plot
plt.show
The resulting geopandas.GeoDataFrame (eji_palisades) spans a larger territory than the actual Palisades Fire perimeter because it includes the full boundaries of any census tract that intersects the fire boundary. This expansion occurs because the intersects predicate selects all tracts that either touch or partially overlap the fire area, thus extending the overall dataset coverage beyond the immediate burn zone.
# CRS do not match; reproject to match Eaton CRS
crs_reference = eaton.crs
eji = cali_eji.to_crs(crs_reference)
# Only include EJI census tracts that intersect the Eaton fire perimeter
eji_eaton = gpd.sjoin(eji, eaton, predicate = "intersects")# Define figure and axis dimensions
fig, ax = plt.subplots(figsize = (10,8))
# Plot intersection of eji census tracts with eaton perimeter
eji_eaton.plot(ax= ax, edgecolor = "black", facecolor = "lightblue", linewidth = 3)
# Plot eaton perimeter (outlined in red) for reference
eaton.plot(ax = ax, color = "none", edgecolor = "red", linewidth = 3)
# Set title
ax.set_title("Census Tracts Affected by the Eaton Fire in LA County")
# Turn of axis ticks
ax.set_xticks([])
ax.set_yticks([])
# Call plot
plt.show
Similarly, the geopandas.GeoDataFrame (eji_eaton) encompasses a substantially larger region than the Eaton Fire itself. This is a consequence of how geographic data frames are generated: using the intersects predicate selects the complete boundaries of every census tract that touches or crosses the fire perimeter, causing the final data extent to exceed the exact fire scar.
Step 2: Precise Fire Impact Areas
Clip the census tracts to show only the portions actually within each fire perimeter:
Clipping (
.clip) cuts the census tract geometries at the fire boundary, showing only the affected portionsSpatial join (
.sjoin) includes entire census tracts, which can overestimate the impacted areaFor visualizing communities directly affected by fire, clipping provides more accurate spatial representation
Step 3: Visualize
- Map of clipped areas showing the precise areas affected by each fire.
# Find census tracts that intersect with Palisades fire
eji_palisades = gpd.sjoin(cali_eji, palisades, predicate="intersects")
# Find census tracts that intersect with Eaton fire
eji_eaton = gpd.sjoin(cali_eji, eaton, predicate="intersects")
# Clip census tracts to Palisades fire boundary
eji_palisades_clip = gpd.clip(cali_eji, palisades)
# Clip census tracts to Eaton fire boundary
eji_eaton_clip = gpd.clip(cali_eji, eaton)
# Palisades Fire clipped census tracts
fig, ax = plt.subplots(figsize=(8, 10))
eji_palisades_clip.plot(ax=ax, facecolor="lightblue", edgecolor="black", linewidth=1, alpha=0.6)
palisades.plot(ax=ax, color="none", edgecolor="darkred", linewidth=3)
ax.set_title("Census Tracts Affected by the Palisades Fire")
ax.set_xticks([])
ax.set_yticks([])
plt.show()
# Eaton Fire clipped census tracts
fig, ax = plt.subplots(figsize=(8, 10))
eji_eaton_clip.plot(ax=ax, facecolor="lightblue", edgecolor="black", linewidth=1, alpha=0.6)
eaton.plot(ax=ax, color="none", edgecolor="darkred", linewidth=3)
ax.set_title("Census Tracts Affected by the Eaton Fire")
ax.set_xticks([])
ax.set_yticks([])
plt.show()

Step 4:Geographic Context
With
Basemapadd a real-world basemap to show where the fires occurred in LA CountyProvides real-world geographic context (roads, cities, landmarks)
Makes it easier to understand where fires occurred relative to populated areas
This where
contextilybecome neededctxautomatically fetches map tiles that match your data’s extent and CRS
# Create figure
fig, ax = plt.subplots(figsize=(8, 10))
# Create legend patches
palisades_patch = mpatches.Patch(facecolor="darkorange", edgecolor="black", label="Palisades Fire")
eaton_patch = mpatches.Patch(facecolor="darkred", edgecolor="black", label="Eaton Fire")
# Plot fire perimeters
palisades.plot(ax=ax, facecolor="darkorange", edgecolor="black", alpha=0.6, linewidth=2)
eaton.plot(ax=ax, facecolor="darkred", edgecolor="black", alpha=0.6, linewidth=2)
# Add OpenStreetMap basemap
ctx.add_basemap(ax, source=ctx.providers.OpenStreetMap.Mapnik)
# Add legend and title
ax.legend(handles=[eaton_patch, palisades_patch], loc="upper left")
ax.set_title("Extent of Palisades and Eaton Fires in LA County (January 2025)")
ax.axis('off')
plt.tight_layout()
plt.show()
Step 5: Map Socioeconomic Vulnerability
Compare vulnerability indicators between the two fire areas using the Environmental Justice Index data.
To accurately map the socioeconomic vulnerability variable (\(EPL\_POV200\)), the census tract data was clipped to the precise perimeter of each fire. This step ensured that the resulting GeoDataFrame only included data relevant to the affected areas.
Why this matters? These visualization reveals whether the fires disproportionately affected vulnerable communities, which has important implications for:
Resource allocation for recovery efforts.
Identifying communities needing additional support.
Understanding environmental justice dimensions of wildfire impacts.
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 10))
# Select an EJI variable (e.g., poverty percentile)
eji_variable = 'EPL_POV200'
# Find common color scale range for both maps
vmin = min(eji_palisades_clip[eji_variable].min(), eji_eaton_clip[eji_variable].min())
vmax = max(eji_palisades_clip[eji_variable].max(), eji_eaton_clip[eji_variable].max())
# Plot Palisades census tracts colored by poverty level
eji_palisades_clip.plot(
column=eji_variable,
vmin=vmin, vmax=vmax,
legend=False,
ax=ax1,
cmap="inferno"
)
ax1.set_title('Palisades Fire')
ax1.axis('off')
# Plot Eaton census tracts colored by poverty level
eji_eaton_clip.plot(
column=eji_variable,
vmin=vmin, vmax=vmax,
legend=False,
ax=ax2,
cmap="inferno"
)
ax2.set_title('Eaton Fire')
ax2.axis('off')
# Add overall title
fig.suptitle('Poverty Distribution in Fire-Affected Areas')
# Add shared colorbar
sm = plt.cm.ScalarMappable(norm=plt.Normalize(vmin=vmin, vmax=vmax), cmap="inferno")
cbar_ax = fig.add_axes([0.25, 0.08, 0.5, 0.02])
cbar = fig.colorbar(sm, cax=cbar_ax, orientation='horizontal')
cbar.set_label('Poverty Percentile')
plt.show()
Discription of Poverty Distribution Map
The analysis of fire impact across socioeconomic groups showed significant variation between the two events. The Palisades Fire disproportionately affected lower-poverty communities, particularly those closer to the coastline. Conversely, the Eaton Fire impacted a higher overall percentage of low income communities, with the highest-poverty tracts generally located in the mountainous areas. This disparity highlights how wildfire consequences are strongly influenced by the socioeconomic status and geographic location of the affected neighborhoods.
Data References
Bren School of Environmental Science and Management. (2025). landsat8-2025-02-23-palisades-eaton.nc [Dataset]. Accessed November 20, 2025, from https://drive.google.com/drive/u/1/folders/1USqhiMLyN8GE05B8WJmHabviJGnmAsLP
Centers for Disease Control and Prevention and Agency for Toxic Substances Disease Registry. (2024). 2024 Environmental Justice Index. [Dataset]. Accessed December 2, 2025, from https://atsdr.cdc.gov/place-health/php/eji/eji-data-download.html
County of Los Angeles Enterprise GIS. (2025). Palisades and Eaton Dissolved Fire Perimeters (2025) [Dataset]. County of Los Angeles. Accessed November 20, 2025, from https://egis-lacounty.hub.arcgis.com/maps/ad51845ea5fb4eb483bc2a7c38b2370c/about
Microsoft Planetary Computer. (n.d.). Landsat Collection 2 Level-2. Accessed November 20, 2025, from https://planetarycomputer.microsoft.com/dataset/landsat-c2-l2