Throughout the 20th century, the area became continuously more irrigated and transformed into an agricultural hotspot. Now, there are over 460,000 and 70,000 acres of irrigated agricultural land in the Imperial and Coachella Valleys respectively. As the area became more agricultural, pesticide use began to dominate the region. While they have declined over time, usage rates are still disproportionately high, with the region falling into the 90th percentile (and above) for pesticide use in the state of California.

Pesticide Use Pounds Over Time
Pesticide Use Pounds Over Time

Over time, California droughts have taken a toll on the Salton Sea, and the water levels have continuously declined. Since 2003, the Salton Sea’s surface elevation has dropped by more than 11 feet, and continues to decline to this day, as evidenced in the graphic. The decline in water levels resulted in massive fish die offs. This, in conjunction with the increasing concentrations of pesticides in the sea, contributed to a steep decline in the region’s tourism during the latter half of the 20th century.

Water Levels Over Time
Water Levels Over Time

However, while the smell of rotting fish drove tourists away, many people continued to live and work in the agricultural fields surrounding the sea. The region is now predominantly Hispanic and falls into the 90th percentile for poverty in California, illustrating the environmental justice issues around the Salton Sea. Minority, low income communities tend to live closer to environmental burdens, significantly impacting their quality of life.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.3     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(sf)
## Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
library(leaflet)
library(tidycensus)
library(htmltools)

directory <- 'CalEJ4'
unzip(zipfile = 'calenviroscreen40shpf2021shp.zip', exdir = directory)

CalEJ <- read_sf(dsn = directory)

CalEJ3 <- CalEJ  |>  
  filter(County %in% c('Imperial', 'Riverside')) |> 
  filter(PovertyP >=0) |> 
  st_transform(crs = 4326)

counties <- st_read(dsn = "CA_Counties") %>% 
  filter(NAME %in% c("Imperial", "Riverside")) %>%
  st_transform(crs = 4326)
## Reading layer `CA_Counties_TIGER2016' from data source 
##   `/Users/EvelynMineo/Final Project Turn In/CA_Counties' using driver `ESRI Shapefile'
## Simple feature collection with 58 features and 17 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -13857270 ymin: 3832931 xmax: -12705030 ymax: 5162404
## Projected CRS: WGS 84 / Pseudo-Mercator
Imperial_Poverty <- CalEJ3 %>%
  st_filter(counties)

palPov <- colorNumeric(palette = 'BuPu', domain = Imperial_Poverty$PovertyP, n = 5)

povertymap <- leaflet(data = Imperial_Poverty) |> 
  addProviderTiles(provider = providers$Esri.WorldImagery) |> 
  setView(lat = 33.2, lng = -115.6, zoom = 8.5) |>
  addPolygons(stroke = FALSE,
              fillColor = ~palPov(PovertyP),
              fillOpacity = 0.5,
              label = ~paste0(round(PovertyP, digits = 0),"%")) |> 
  addLegend(pal = palPov, 
            title = 'Poverty (%)', 
            values = ~PovertyP)

# display the map

povertymap

Currently, the region is still experiencing heavy pesticide use. Not surprisingly, the pesticide percentage correlates with farmland regions. While the type of farmland does necessarily affect the levels of pesticide use, pesticide use does tend to increase when two or more types of farmland are stacked on top of each other.

library(tidyverse)
library(sf)
library(leaflet)
library(tidycensus)
library(htmltools)

# Data Import
## Farmland

farmland <- st_read(dsn = 'AgLand.geojson')
## Reading layer `AgLand' from data source 
##   `/Users/EvelynMineo/Final Project Turn In/Agland.geojson' using driver `GeoJSON'
## Simple feature collection with 14729 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -119.478 ymin: 32.65257 xmax: -114.4952 ymax: 35.05472
## Geodetic CRS:  WGS 84
counties <- st_read(dsn = "CA_Counties") %>% 
  filter(NAME %in% c("Imperial", "Riverside")) %>%
  st_transform(crs = 4326)
## Reading layer `CA_Counties_TIGER2016' from data source 
##   `/Users/EvelynMineo/Final Project Turn In/CA_Counties' using driver `ESRI Shapefile'
## Simple feature collection with 58 features and 17 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -13857270 ymin: 3832931 xmax: -12705030 ymax: 5162404
## Projected CRS: WGS 84 / Pseudo-Mercator
sf_use_s2(FALSE)
## Spherical geometry (s2) switched off
Imperial_Farm <- farmland %>%
  st_filter(counties)
## although coordinates are longitude/latitude, st_intersects assumes that they
## are planar
## Importing CalEJ

directory <- 'CalEJ4'
unzip(zipfile = 'calenviroscreen40shpf2021shp.zip', exdir = directory)

CalEJ <- read_sf(dsn = directory)

CalEJ2 <- CalEJ  |>  
  filter(County %in% c('Imperial', 'Riverside')) |> 
  filter(PesticideP >=0, PovertyP >=0) |> 
  st_transform(crs = 4326)

CalEJ2 <- CalEJ  |>  
  filter(County %in% c('Imperial', 'Riverside')) |> 
  filter(PesticideP >=0) |> 
  st_transform(crs = 4326)

Imperial_Pesticides <- CalEJ2 %>%
  st_filter(counties)
## although coordinates are longitude/latitude, st_intersects assumes that they
## are planar
# Code for Visualization

# Pesticides Map

palAL <- colorNumeric(palette = 'YlOrBr', domain = Imperial_Pesticides$PesticideP, n = 5)

# Farmland Map

palAG <- colorFactor(domain = Imperial_Farm$TYPE, palette = 'Set1')

# Toggle them together, Farmland first then pesticides

leaflet() |> 
  addProviderTiles(provider = providers$Esri.WorldImagery) |> 
  setView(lat = 33.2, lng = -115.6, zoom = 8.5) |> 
  addLayersControl(overlayGroups = c('Farmland', 'Pesticide')) |> 
  addPolygons(data = Imperial_Farm,
              color = ~palAG(TYPE),
              weight = 3,
              label = ~TYPE,
              group = 'Farmland') |>
  addLegend(data = Imperial_Farm,
            title = 'Farmland',
            values = ~TYPE,
            pal = palAG,
            group = 'Farmland') |>
  addPolygons(data = Imperial_Pesticides,
              stroke = FALSE,
              fillColor = ~palAL(PesticideP),
              fillOpacity = 0.5,
              label = ~paste0(round(PesticideP, digits = 0),"%"),
              group = 'Pesticide') |> 
  addLegend(data = Imperial_Pesticides,
            pal = palAL, 
            title = 'Pesticides (%)', 
            values = ~PesticideP,
            group = 'Pesticide')

Unfortunately for the residents of the valley, these events have compounding effects. With declining water levels, pesticide runoff sinks into the drying sea bed. As it continues to dry out and the seabed becomes exposed, these pesticides are released into the air via dust storms. These contaminated particles travel to nearby towns and communities and cause pollution issues.

The air pollution issues in turn increase asthma levels in the region, and thus efforts to divert dust from the Salton Sea floodplain are underway. One initiative the local government has installed are hay bales, which collect dust around the sea. However, residents believe the bales are inefficient, and therefore further solutions need to be implemented.

Hay Bales Dust
Hay Bales Dust