9 EJ - Praxis and Visualization
Today we will focus on a bit of theory, a story about warehouses, and then engage in the practice of data driven visualization.
The EPA and California EPA both agree that this is the definition of Environmental Justice (EJ).
9.1 Data Categories in EJ Tools
As discussed, in the previous lesson, there are a few broad categories of data that are currently used in Environmental Justice (EJ) tools. Let’s recap them here.
- Pollution Burden - negative environmental indicators of either pollution exposure, built environment, or environmental effects (e.g., ozone, PM, traffic, drinking water contaminants, toxic release facilities)
- Socioeconomic indicators - demographic and economic indicators of population
- Health vulnerability - an indicator of population level health-effect data such as asthma, cancer, diabetes, cardiovascular, and low birth-weight
As we noted in the last class, these visualizations are more about identifying or screening for locations experiencing environmental injustice than about achieving or visualizing Environmental Justice.
9.1.1 Discussion 1
- What data is needed to understand the fair treatment principle of Environmental Justice?
- What data is needed to understand the meaningful involvement principle of Environmental Justice?
- How does data availability limit our understanding and ability to visualize Environmental Justice?
9.2 Not Data - Not Available
Meaningful involvement is a very nebulous and hard-to-measure concept. Within the context of EJ, it indicates public participation with stakeholders and the influence to shape decision-making.
The EPA has a resource on public participation in decision-making.
Public participation is a process, not a single event. It consists of a series of activities and actions by a sponsor agency over the full lifespan of a project to both inform the public and obtain input from them. Public participation affords stakeholders (those that have an interest or stake in an issue, such as individuals, interest groups, communities) the opportunity to influence decisions that affect their lives.
A large part of that framework is based on a schematic as shown in Figure 9.1 of the different possible levels of involvement by stakeholders in decision-making. The schematic is from the International Association of Public Participation.
Quantifying meaningful involvement in a public participation process of decision-making is complicated and difficult to track. It is also a subjective judgement, although one could have systematic criteria for evaluating it. Moreover, the issue is probably better described as one in which the involvement levels are unequal between different stakeholder groups. In other words, developers and industry stakeholders are provided greater opportunity to shape policy and decision-making compared to residential and environmental stakeholders.
9.2.1 Discussion 2.
- How does a lack of data shape our ability to communicate and visualize an issue?
- How could one collect information to visualize meaningful involvement?
9.3 Case Study - SoCal Warehouses - March JPA West Campus Upper Plateau
I have been doing work with the Redford Conservancy on warehouses in the Inland Empire. As part of that work, I have developed a few mapping tools to visualize warehouse information.
The primary tool is called WarehouseCITY. WarehouseCITY is intended to provide a means for the public to easily access the impact of existing warehouses on their community. The code repository is located on github.
A secondary tool provides a visualization of the existing and planned warehouse growth along the 215/60 freeways around the March Air Reserve Base in Riverside County (my backyard)
9.3.2 Warehouse Visualization is Easy
9.3.2.1 Load libraries
9.3.2.2 Acquire data
We will also pull warehouse data for the first time! New data incoming!
Also note that I made this dataset smaller by using the filter()
function to only include data from Riverside County; this removes about 7,500 warehouses from LA and San Bernardino counties.
WH.url <- 'https://raw.githubusercontent.com/RadicalResearchLLC/WarehouseMap/main/WarehouseCITY/geoJSON/finalParcels.geojson'
warehouses <- st_read(WH.url) %>%
filter(county == 'Riverside') %>%
st_transform("+proj=longlat +ellps=WGS84 +datum=WGS84")
Reading layer `finalParcels' from data source
`https://raw.githubusercontent.com/RadicalResearchLLC/WarehouseMap/main/WarehouseCITY/geoJSON/finalParcels.geojson'
using driver `GeoJSON'
Simple feature collection with 8606 features and 11 fields
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: -118.8037 ymin: 33.43325 xmax: -114.4085 ymax: 35.55527
Geodetic CRS: WGS 84
Check to see what the warehouses
dataset looks like.
head(warehouses)
Simple feature collection with 6 features and 11 fields
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: -117.5982 ymin: 33.87729 xmax: -117.5314 ymax: 33.97309
CRS: +proj=longlat +ellps=WGS84 +datum=WGS84
apn shape_area class type year_built county
1 115060057 212480 warehouse/dry storage warehouse 1980 Riverside
2 115050036 343303 warehouse/dry storage warehouse 2000 Riverside
3 115670012 73597 warehouse/dry storage warehouse 1999 Riverside
4 144010061 161133 warehouse/dry storage warehouse 2018 Riverside
5 144010065 90555 warehouse/dry storage warehouse 1980 Riverside
6 144010064 93164 warehouse/dry storage warehouse 2018 Riverside
year_chr floorSpace.sq.ft yr_bin size_bin exclude
1 unknown 116864.2 <NA> 100,000 to 250,000 0
2 2000 188816.6 1992 - 2001 100,000 to 250,000 0
3 1999 40478.4 1992 - 2001 28,000 to 100,000 0
4 2018 88623.2 2012 - 2023 28,000 to 100,000 0
5 unknown 49805.3 <NA> 28,000 to 100,000 0
6 2018 51240.0 2012 - 2023 28,000 to 100,000 0
geometry
1 POLYGON ((-117.5532 33.8775...
2 POLYGON ((-117.5447 33.8807...
3 POLYGON ((-117.5314 33.8813...
4 POLYGON ((-117.5976 33.9730...
5 POLYGON ((-117.5954 33.9714...
6 POLYGON ((-117.5946 33.9717...
9.3.2.3 Basic Visualization
This is geospatial data, so we should put it in an interactive leaflet
map to do an initial visualization. Figure 9.2 shows a very basic polygon leaflet map.
leaflet() %>%
addTiles() %>%
addPolygons(data = warehouses)
9.3.2.4 Improve the Visualization
The setView()
function allows us to set the zoom level and the centerpoint of the map using the arguments lng
, lat
, and zoom
.
Within the addPolygons()
function, I set the color
to brown and the weight
of the line to 1.
Figure 9.3 shows the result for my neighborhood in Riverside.
leaflet() %>%
addTiles() %>%
addPolygons(data = warehouses,
color = 'brown',
weight = 1) %>%
setView(lng = -117.24, lat = 33.875, zoom = 12) #%>%
Let’s add two more helpful things to orient viewers at a glance.
- Let’s change the underlying tile to satellite/aerial imagery using
addProviderTiles()
- Let’s add a mini-map to orient the viewer to where this is using
addMiniMap()
.
Figure 9.4 shows the resulting map - note I changed the color to darkred because brown has low salience in satellite imagery of SoCal.
leaflet() %>%
addTiles() %>%
addPolygons(data = warehouses,
color = 'darkred',
weight = 1) %>%
setView(lng = -117.24, lat = 33.875, zoom = 12) %>%
addProviderTiles(provider = providers$Esri.WorldImagery) %>%
addMiniMap(position = 'bottomleft')