---
title: "Unlocking Smart Growth: The Effects of a Proposed Transit-Oriented Development Law on the Puget Sound Region"
subtitle: "Exploring the Potential Impact of the Community and Transit-Oriented Housing Development Bill HB 2160 Across Washington State's Central Puget Sound Region"
author:
  - name: Tiernan Martin
    corresponding: true
    email: tiernan@futurewise.org
    roles:
      - Investigation
      - Software
      - Visualization
    affiliations:
      - Futurewise
  - name: Alex Brennan
    corresponding: false
    email: alex@futurewise.org
    roles:
      - Investigation
      - Review
    affiliations:
      - Futurewise
keywords:
  - Transit-Oriented Development
  - Growth Management Act
  - Central Puget Sound Region
  - Washington State 2024 Legislative Session
abstract: |
  During the 2024 legislative session in Washington State, members of the House of Representatives introduced House Bill 2160, aiming to promote community and transit-oriented housing development. The bill would have required cities to allow developments of a specified scale within defined distances from high-capacity transit stops. This study assesses how the proposed increases in development capacity by the bill compare to existing allowances. The results show that while the typical developable station area parcel already permits more development capacity than HB 2160 would have, a significant amount of land would be affected by the bill. Specifically, for developable land currently zoned for a lower development capacity than the bill's requirements, the estimated average capacity change would be an additional 1.79 floor area ratio (FAR). If adopted, this bill could have increased the development capacity of land near the region's public transit network by as much as 1.8 billion square feet.
 
plain-language-summary: |
  In 2024, the Washington State Legislature considered a bill aimed at making it easier to build homes near public transit areas, like light rail stations and bus rapid transit stops. This bill would require cities to allow taller, denser buildings in these areas. Our study looked at how much more development could happen under these new laws compared to what's currently allowed. We found that, if these laws pass, there would be a lot more room for building new homes and apartments near transit stops.
key-points:
  - "Washington State Legislature's HB 2160 from the 2024 legislative session would substantially increase development capacity for most of the land within walking distance of high-capacity transit stops"
date: last-modified
bibliography: references.bib
citation:
  container-title: Futurewise
number-sections: true
include-in-header:
  text: |
    <style type="text/css">
    .footer {
      font-size: 0.85em;
      left: 0;
      bottom: 0;
      width: 100%;
      text-align: center;
      padding: 20px;
      background-color: #f2f2f2; /* Light grey background */
      color: #666; /* Dark grey text */
    }
    </style>
include-after-body:
  text: |
    <footer class="footer">Copyright © March 2024. Futurewise. Permission is granted for reproduction of this file, with attribution to Futurewise.
    </footer>
---

```{r}
#| label: setup
#| include: false
library(tidyverse)
library(tidycensus)
library(glue)
library(scales)
library(readxl)
library(janitor)
library(here)
library(sf)
library(knitr)
library(gt)
library(gtsummary)
library(kableExtra)
library(latex2exp)
library(mapview)
library(RColorBrewer)
library(targets)
library(patchwork)
mapviewOptions(platform = "leaflet")

```

```{r}
#| label: load-targets
#| include: false

tar_load(
  c(
    pop_hu_region_list
  )
)

```

```{r}
#| label: utility-functions
#| include: false

source("R/functions.R")


```

## About Futurewise {.unnumbered}

[![](images/Futurewise%20Logo.png){style="float: left; margin-right: 20px; margin-bottom: 20px;" fig-alt="Futurewise logo" fig-align="left" width="150"}](https://futurewise.org/)

Futurewise is a nonprofit organization that works throughout Washington State on the implementation of the Growth Management Act (GMA). We partner with local communities to support land use policies that encourage healthy, equitable and opportunity-rich communities, and that protect our most valuable farmlands, forests and water resources. We have members across the state including the central Puget Sound region. For more information about our organization, visit our website at <https://futurewise.org/>.

## Acknowledgments {.unnumbered}

The authors wish to express their gratitude for the support received during the preparation of this article.

No financial assistance was provided for the research, authorship, or publication of this work.

Thanks to Yonah Freemark of the Urban Institute for the provision of zoning district data. Thanks to Lauren Engel, Carol Naito, and Robin Koskey from the Puget Sound Regional Council for their generosity in sharing the agency's public transit data and for their analysis of Washington State House Bill 2160. We are grateful to Noha Mahgoub from the Office of Governor Jay Inslee for her valuable feedback and guidance. Additionally, our thanks to Dan Bertolet of the Sightline Institute for his review and feedback on our manuscript.

## Introduction

![Central Puget Sound \| Photo courtesy of [Clemens Vasters from Viersen, Germany](#0), [CC BY 2.0](#0), via Wikimedia Commons](images/seattle-aerial-wikicommons.jpg){fig-alt="An aerial photo of Mercer Island, Seattle, and Kitsap County" fig-align="center"}

### Growth in the Central Puget Sound Region

The Puget Sound metropolitan region is one of North America's major growth centers for people, jobs, and housing. Between 2010 and 2023, the central Puget Sound's four-county region (King, Kitsap, Pierce, and Snohomish counties) added more residents and housing units than the rest of Washington state combined.[^1] According to forecasts by the Puget Sound Regional Council, the region's population is expected to grow to 5.8 million people living within 2.8 million households by 2050 [@pugetsoundregionalcouncil2018].

[^1]: The source of these statistics are the author's analysis of postcensial estimates by the Washington State Office of Financial Management. The central Puget Sound population grew by `r pop_hu_region_list$pugetsound_pop_change` people (`r pop_hu_region_list$pugetsound_pop_change_pct`) between 2010 and 2023, while the rest of the state's population grew by `r pop_hu_region_list$outside_pop_change` people (`r pop_hu_region_list$outside_pop_change_pct`). During the same period, `r pop_hu_region_list$pugetsound_hu_change` housing units (`r pop_hu_region_list$pugetsound_hu_change_pct`) were added in the this region, while `r pop_hu_region_list$outside_hu_change` units (`r pop_hu_region_list$outside_hu_change_pct`) were created elsewhere in the state.

As the region grows, it faces challenges that come with that growth. One such challenge is high, rising housing costs. The Puget Sound Regional Council's *Housing Stability Strategy: 2023 Monitoring Report* provides several sobering statistics about the region's housing costs. According to the report, during the decade between 2010 and 2020, the region added only one housing unit for every three new people that were born or moved there. Between July 2015 and July 2023, the median rent cost increased by 50%[^2] and the annual income required to purchase the area's median priced home was \$160,000 [@pugetsoundregionalcouncil2023]. In 2020, an estimated 11,751 people experienced homelessness within King County alone—a 5% increase from the county's 2019 estimate [@allhome2020]. Despite the efforts by both public and private housing developers to tackle the shortage of affordable housing, researchers estimate that the central Puget Sound region will experience a shortfall of approximately 140,000 units over the next 20 years [@freemark2023a].

[^2]: This estimate includes three of the four central Puget Sound counties: King, Pierce, and Snohomish.

Another challenge that the region faces is climate change. In 2009, the Climate Impacts Group at the University of Washington developed a climate model that projected several series climate-related impacts over the coming decades. Those impacts include water shortages in the Yakima Basin, loss of salmon habitat due to elevated stream temperatures, increased wildfire risk, and more human deaths caused by heat events and poor air quality [@climateimpactsgroup2009].

### Transit-Oriented Development

One potential solution to the Puget Sound region's challenges is to concentrate urban growth in existing urban areas while investing in climate-friendly forms of transportation. During the 1980s, sharp increases in sprawling, low-density residential and commercial development in Washington State resulted in many unintended consequences, including ecological disruption, traffic congestion, urban disinvestment, and loss of agricultural lands [@trohimovich2002]. This led the Washington State Legislature to adopt the Growth Management Act (GMA), a law requiring cities and counties to plan to accommodate growth within designated areas (urban growth areas or UGAs). Many of the GMA's planning goals align with a transit-oriented development (TOD) strategy to accommodating population growth within existing urban places.[^3]

[^3]: The first four goals of [*RCW 36.70A.020 Planning goals*](https://app.leg.wa.gov/rcw/default.aspx?cite=36.70a.020) are:

    > \(1\) Urban growth. Encourage development in urban areas where adequate public facilities and services exist or can be provided in an efficient manner. (2) Reduce sprawl. Reduce the inappropriate conversion of undeveloped land into sprawling, low-density development. (3) Transportation. Encourage efficient multimodal transportation systems that will reduce greenhouse gas emissions and per capita vehicle miles traveled, and are based on regional priorities and coordinated with county and city comprehensive plans. (4) Housing. Plan for and accommodate housing affordable to all economic segments of the population of this state, promote a variety of residential densities and housing types, and encourage preservation of existing housing stock.

The region's metropolitan planning organization, the [Puget Sound Regional Council](https://www.psrc.org/) (PSRC), incorporates TOD into its regional growth strategy. *VISION 2050* defines regional growth centers—the places where most of the region's growth should occur—as compact, walkable, mixed use communities centered around high-quality transit systems. This plan also adopts greenhouse gas emission reduction goals set by the [Puget Sound Clean Air Agency](https://pscleanair.gov/), including reducing greenhouse to 50% below 1990 levels by 2030 and to80% below 1990 levels by 2050. PSRC lists multiple strategies for achieving these goals, including the reduction of vehicle miles traveled by planning for transit-oriented development [@pugetsoundregionalcouncil2023a; @pugetsoundregionalcouncil2022].

### House Bill 2160

House Bill 2160 (HB 2160) of the 2023-2024 Washington State Legislative Session proposed changes to the GMA intended to promote community and transit-oriented housing development.[^4] These changes, which would apply to all cities planning under the GMA, included the following:

[^4]: This study uses the Second Substitute of House Bill 2160 as the basis for its analysis.

-   Prohibiting cities from preventing the siting of multifamily housing on residential land within transit station areas

-   Prohibiting cities from enacting maximum floor area ratio (FAR) regulation under the following thresholds: 3.5 FAR for station areas of light rail, commuter rail, or streetcars; 2.5 FAR for station areas of bus rapid transit

-   Categorically exempting residential or mixed-use projects within station areas from the State Environmental Policy Act (SEPA)

The bill also proposed several requirements of residential development built within station areas, including making at least 10% of its residential units affordable.[^5]

[^5]: The bill defines "Affordable housing" as:

    > \[R\]esidential housing whose monthly costs, including utilities other than telephone, do not exceed 30 percent of the monthly income of a household whose income is: (a) For rental housing, 60 percent of the median household income-adjusted for household size, for the county where the household is located, as reported by the United States department of housing and 5urban development; or (b) For owner-occupied housing, 80 percent of the median household income adjusted for household size, for the county where 8the household is located, as reported by the United States department of housing and urban development [@reed2024].

HB 2160 defines the floor area ratio (FAR) as "a measure of development intensity equal to the building square footage divided by the developable property square footage" [@reed2024]. This metric merges two commonly used regulatory tools—maximum building height and maximum lot coverage—into a single ratio. It offers developers design flexibility and allows local governments to establish a maximum level of development intensity within a zoning district. Refer to @fig-far for an illustration of how this tool permits various development configurations while ensuring a consistent amount of building floor area.

![Illustrations of FAR Limits \| Source: *Accessory Dwelling Unit Final EIS*, City of Seattle, 2018](images/seattle-far-diagram.png){#fig-far fig-alt="A diagram showing different ways that a development could arrange 1.0 FAR on a lot: 1 story, 2 stories, 3 stories" fig-align="left" width="400"}

### Research Questions

The purpose of this study is to provide information about the effects of the proposed HB 2160. Specifically, we seek to answer the following questions:

1.  What are the characteristics of the current land uses of the transit station areas as defined in the bill?

2.  Would this bill have an effect on the allowed development capacity of transit station areas?

3.  What is the size of any effect this bill may have?

4.  How are the bill's effects distributed between the two station area types that it defines?

5.  What patterns are present in the cities that would be significantly impacted by the bill?

## Data & Methods {#sec-data-methods}

### Approach

We employ a quantitative methodology to address our research questions. First we evaluate the impact of House Bill 2160 across the entire study area, specifically the central Puget Sound region, and then proceed to analyze several individual cities as case studies.

### Methods

HB 2160 would increase community and housing development capacity by requiring cities to adopt maximum FAR requirements no more restrictive than those specified in the bill. While some cities use maximum FAR to regulate development, many cities use other measures, the most common of which is a combination of maximum building height and maximum lot coverage. In order to accurately compare development capacity across the study area, we create a standardized measurement of development capacity which we define as follows:

$$
\text{SDC}_i = 
\begin{cases} 
\text{FAR}_i & \text{if parcel } i \text{ uses FAR} \\
(\text{MBF}_i \times \text{MLC%}_i) & \text{if parcel } i \text{ does not use FAR}
\end{cases}
$$ {#eq-sdc}

Where:

-   $\text{SDC}_i$: Standardized Development Capacity for parcel $i$

-   $\text{FAR}_i$: Floor Area Ratio for parcel $i$

-   $\text{MBF}_i$: Maximum Building Floors for parcel $i$

-   $\text{MLC%}_i$: Maximum Lot Coverage Percentage for parcel $i$

We use net development capacity (${NDC}$) to represent the effect of the bill on development capacity at the scale of individual tax parcels. We define ${NDC}$ as follows:

$$
NDC_i = SDC_{new,i} - SDC_{old,i}
$$ {#eq-ndc} Where:

-   $SDC_{old,i}$: parcel $i$'s current (standarized) maximum development capacity.
-   $SDC_{new,i}$: the (standardized) maximum development capacity that would apply to parcel $i$ if HB 2160 became law.

To quantify the impact of the proposed bill on a geographic scale larger than an individual parcel, we employ two metrics: an absolute metric, the total net development capacity ($T_{NDC}$), and a relative metric, the area-weighted mean of net development capacity ($AWM_{NDC}$).

#### Total Net Development Capacity ($T_{NDC}$) {.unnumbered}

The total net development capacity ($T_{NDC}$) is calculated as the sum of the net development capacity for each parcel, adjusted by the parcel's area and eligibility based on specific criteria. We define it as follows:

$$
T_{NDC} = \sum_{i}(NDC_i \cdot A_i \cdot I_i)
$$

Where:

-   $NDC_i$: the net development capacity for parcel $i$.
-   $A_i$: the geometric area of parcel $i$.
-   $I_i$: an indicator function that equals 1 if parcel $i$ satisfies all of the following conditions: it is within a station area, it lies within a zoning district where residential use is permitted, and it is within an urban growth area; otherwise, $I_i$ equals 0.

This formula ensures that only parcels meeting all specified conditions contribute to the total net development capacity. The indicator function ($I_i$) serves as a filter, excluding parcels not suited for development under the proposed bill's guidelines.

#### Area-Weighted Mean of Net Development Capacity ($AWM_{NDC}$) {.unnumbered}

To calculate the mean net development capacity, weighted by the proportion of the area that each parcel occupies within the eligible region, we use the following formula:

$$
AWM_{NDC} = \frac{\sum_{i}(NDC_i \cdot A_i \cdot I_i)}{\sum_{i}(A_i \cdot I_i)}
$$ {#eq-awm-ndc}

This calculation divides the sum of the net development capacity of each parcel, adjusted by its area and eligibility, by the total eligible area. This method results in a weighted mean that reflects the proportional impact of each parcel, with larger parcels having a greater influence on the overall metric.

In a region where cities employ various tools to regulate development intensity, our method introduces two metrics for assessing changes in development capacity, irrespective of the regulatory tool in use. It also enables us to summarize the bill's effect at different geographic levels, including station areas, cities, and regions. This approach allows us to describe individual geographies (for example, a specific station area) and to compare them with one another (for example, several cities in comparison to the region as a whole).

### Data Collection

The study uses several data sets from a variety of different sources. The following table summarize the study's data:

| Data                                | Description                                                                                                                                 | Citation                       |
|------------------|-----------------------------------|------------------|
| Current Parcels (2023)              | A statewide data set of tax parcels                                                                                                         | @washingtonstateparcelsproject |
| Transit Stations                    | Transit station locations for light rail, commuter rail, streetcar, and existing bus rapid transit routes in the central Puget Sound Region | @pugetsoundregionalcouncil2024 |
| Puget Sound Zoning Districts (2023) | Zoning and land use regulations collected from central Puget Sound local governments' land use codes and maps                               | @urbaninstitute                |
| Urban Growth Areas                  | Urban growth areas for the central Puget Sound region (King, Snohomish, Kitsap, and Pierce counties)                                        | @pugetsoundregionalcouncil     |
| City Boundaries                     | Boundaries of city jurisdictions with the central Puget Sound region                                                                        | @pugetsoundregionalcouncil     |

### Data Analysis

The study uses a combination of a relational database and statistical software to conduct its analysis. The relational database, [PostgreSQL](https://www.postgresql.org/) with the [PostGIS](https://postgis.net/) extension, is used to perform spatial filters and spatial joins on the Current Parcel data set. The [R](https://www.r-project.org/) programming language is used to perform aggregations and calculate summary statistics on the filtered and augmented parcel data set. R is also also used to produce summary tables and visualizations. Construction of the study data set and analysis of its data are coordinated using the [targets](https://docs.ropensci.org/targets/) pipeline tool (see @landau2021).

Data sets containing information relevant to HB 2160 are combined through spatial filtering and spatial joining to produce a data set of all parcels within the station areas. The refined parcel data are augmented with zoning and land use regulation information from the zoning districts. A maximum FAR baseline is estimated for all parcels, then the new maximum FAR that would be introduced by HB 2160 is estimated. For each parcel, the net difference between the current (old) and new FAR is calculated. For parcels where the current zoning allows development greater than the new FAR, the effect of the bill is considered to be zero additional FAR; for parcels where the current zoning is more restrictive that the new FAR, the effect is calculated in terms of additional FAR allowed. The bill's effect on each parcel is then aggregated by station area, jurisdiction, and region, and summarized using the area-weight mean.[^6]

[^6]: Parcels that do not allow residential uses are characterized as "not developable" and are not included in the area-weighted mean statistic; however, these parcels are included in the study's analysis for other purposes such as describing and quantifying the characteristics of land within each station area or jurisdiction.

### Limitations

Our method is subject to several limitations that are important to consider when interpreting our findings:

-   **Changing Development Regulations:** The study uses zoning and land use data collected in 2023. While Puget Sound jurisdictions will be required to update their development regulations to comply with [recent changes](https://www.commerce.wa.gov/serving-communities/growth-management/growth-management-topics/planning-for-middle-housing/) to the GMA by mid-2025, the study focuses on current development regulations.

-   **FAR Averaging**: While this study assumes that the bill's maximum FAR standards would be uniformly applied across all eligible parcels in every station area, the Second Substitute House Bill 2160 language would allow the new FAR to be calculated as an average of the station area. Additional implementation details would be needed to accurately assess the impact that this flexibility would have on the bill's effect.

-   **Additional Restrictions on Development**: The analysis does not account for other significant restrictions, including those that prevent development from being sited within critical areas, shoreline environments, or on sites with landmark designations. Such restrictions can materially impact development possibilities but are not reflected in the study.[^7]

-   **Measurement of Transit Proximity**: Transit walksheds are calculated using Euclidean distance, measuring straight lines to the center of parcels, rather than using network distances that reflect actual walking paths. This method may overestimate or underestimate the true accessibility of parcels to transit services.

-   **Lot Coverage Assumptions**: In cases where specific regulations on maximum building footprint or FAR are not provided, the study assumes that 100% lot coverage is permissible. This assumption may not align with actual zoning regulations, potentially leading to over-estimations of development capacity.

-   **Omission of Other Development Regulations**: The estimated FAR metric does not incorporate other development regulations, such as setbacks, which can significantly impact the buildable area on a parcel.

-   **Homeowner Association (HOA) Restrictions**: The analysis does not consider HOA restrictions that might limit allowed density on parcels, which could reduce the impact of bill in station areas where restrictive HOA's exist.

[^7]: HB 2160 would exclude "public facilities and portions of lots with critical areas and critical area buffers as designated in RCW 36.70A.060, except for critical aquifer recharge areas where a single-family detached house is an allowed use provided that any requirements to maintain aquifer recharge are met." [@reed2024]

Further research, data collection, and methodological refinements could help address these limitations in future analyses.

## Results

```{r}
#| label: results-objects
#| include: false

tar_load(analysis_study_group)

total_n <- analysis_study_group |> 
  filter(value == "Total") |>
  pluck("n_tbl")

dev_aff_n_pct <- analysis_study_group |> 
  filter(value == "Developable, Affected") |>
  pluck("n_tbl") |> 
  str_extract("\\((.*?)\\)") |>
  str_replace_all("\\(|\\)", "")

dev_aff_area_pct <- analysis_study_group |> 
  filter(value == "Developable, Affected") |>
  pluck("area_tbl") |> 
  str_extract("\\((.*?)\\)") |>
  str_replace_all("\\(|\\)", "")

large_n_pct <- analysis_study_group |> 
  filter(str_detect(value, "Large")) |>
  pluck("n_tbl") |> 
  str_extract("\\((.*?)\\)") |>
  str_replace_all("\\(|\\)", "")

large_area_pct <- analysis_study_group |> 
  filter(str_detect(value, "Large")) |>
  pluck("area_tbl") |> 
  str_extract("\\((.*?)\\)") |>
  str_replace_all("\\(|\\)", "")

large_devcap_pct <- analysis_study_group |> 
  filter(str_detect(value, "Large")) |>
  pluck("devcap_tbl") |> 
  str_extract("\\((.*?)\\)") |>
  str_replace_all("\\(|\\)", "")

dev_cap_total <- analysis_study_group |> 
  filter(str_detect(name, "total")) |> 
  pluck("devcap_tbl") |> 
  str_replace("B", " billion")

```

### Entire Study Area

The study includes approximately 116,600 tax parcels (`r str_c("$","n = ",total_n,"$")`), all within the four central Puget Sound counties, within an Urban Growth Area, and within HB 2160's specified distance thresholds of a qualifying transit stop.

We separate the study data into three analysis groups:

1.  *Not Developable* (${i | I_i = 0}$)\
    Parcels ineligible under HB 2160 criteria. This study applies the HB 2160 criteria by selecting parcels that: a) are located within cities and within a UGA; b) are located in zoning districts permitting residential uses; and c) have current land uses that are suitable for transit-oriented development. To evaluate current land use, we use tax assessor-assigned land use codes to exclude properties with incompatible uses. HB 2160 specifies incompatible uses as streets, roads, highways, sidewalks, lighting systems for streets and roads, traffic signals, domestic water systems, storm and sanitary sewer systems, parks and recreational facilities, and schools [@reed2024]. Although HB 2160 exempts parcels governed by shoreline master programs or critical area ordinances, this study does not exclude these lots due to the lack of comprehensive regional data sets with the required information.

2.  *Developable* (${i | I_i = 1}$)\
    Parcels that meet 2160's eligibility criteria. Within *Developable* parcels, we distinguish the following two subsets:

    A.  *Developable, Not Affected* ($\{i | I_i = 1 \text{ and } NDC_i \leq 0\}$)\
        Parcels that meet the eligibility criteria and have a standardized development capacity equal or greater than the minimum required by HB 2160 and would, therefore, not be affected by the bill.
    B.  *Developable, Affected* ($\{i | I_i = 1 \text{ and } NDC_i \gt 0\}$)\
        Parcels that meet the eligibility criteria and have a standardized development capacity less than the minimum required by HB 2160 and would, therefore, be affected by the bill.

We also divide the parcel data by the type of station area it is within:

1.  *Large (0.5 Mile)\
    *Parcels within a half mile of a light rail station, commuter rail station, or streetcar stop.

2.  *Small (0.25 Mile)\
    *Parcels within a quarter mile of a bus rapid transit stop and not within a *Large* station area

Using HB 2160's definition of station areas, we create two station area types and assign one type to every parcel. Parcels that are within both *Large* and *Small* station area types as classified as part of a *Large* station area.[^8]

[^8]: While many parcels are within more than one type of station area, our analysis sets a limit of one station area type per parcel to ensure that each parcel is only counted once during tabulation and aggregation procedures.

Our study focuses primarily on the third analysis group, *Developable, Affected*, which make up the majority of the station area parcels (`r dev_aff_n_pct`) but constitute only `r dev_aff_area_pct` of the total land area. We find that the total amount of additional development capacity that would be added by HB 2160 to be approximately `r dev_cap_total` ft^2^.[^9]

[^9]: While increasing development capacity is necessary for the production of additional housing units, it is not a sufficient condition.

Our findings suggest that the *Large (0.5 mile)* station areas would account for the majority of the parcels (`r large_n_pct`), land area (`r large_area_pct`), and added development capacity (`r large_devcap_pct`) associated with HB 2160. See @tbl-results-summary-table below.

```{r}
#| label: tbl-results-summary-table
#| output: true
#| message: false
#| tbl-cap: "Summary of Study Data"

tar_load(analysis_study_group)

total_awmndc <- analysis_study_group |> 
  filter(value == "Total") |>
  pluck("awmndc_tbl")

analysis_study_group |> 
  filter(! str_detect(name, "total")) |> # remove the pre-defined summary row 
  gt(groupname_col = "name",
     rowname_col = "value") |> 
  tab_row_group(label = "Station Area Types", rows = 1:2) |>
  tab_row_group(label = "Analysis Groups", rows = 3:5) |>
  cols_label(n_tbl = "Parcels (n)",
             area_tbl = html("Land Area (mi<sup>2</sup>)"),
             devcap_tbl = html("Added Dev. Capacity (ft<sup>2</sup>)"),
             awmndc_tbl = html("AWM<sub>NDC</sub>")) |> 
  grand_summary_rows(
    fns =  list(label = "All Station Area Parcels", id = "totals") ~ gt_custom_summary(., df = analysis_study_group), 
    side = "top"
  ) |> 
  tab_style(
    style = list(
      cell_text(align = "left", indent = px(20))),
    locations = cells_stub()
  ) |> 
  tab_style(
    style = list(
      cell_text(align = "right")),
    locations = cells_body()
  ) |> 
   tab_style(
    locations = cells_grand_summary(),
    style = cell_text(align = "right")
  )
  
  

```

We use the area-weighted mean net development capacity ($AWM_{NDC}$) to summarize HB 2160's effect across geographic scales. The $AWM_{NDC}$ for the central Puget Sound region is `r total_awmndc` FAR. We intrepret this result to mean that, after adjusting for land area, the typical station area parcel is likely to have slightly more development capacity than what HB 2160 would introduce. By plotting the distribution of net development capacity, we can observe that while a significant amount of land would be affected (the histogram bars to the right of the red dashed line), there is a "long tail" of land that is already zoned for high development capacity in these station areas (the bars to the left of the dashed line). See @fig-results-histogram below.

```{r}
#| label: fig-results-histogram
#| output: true
#| message: false
#| fig-cap: "Distribution of Net Development Capacity"
#| fig-height: 4

tar_load(analysis_parcels_ndc)

awmndc_dev_total <- analysis_study_group |> 
  filter(value == "Total") |> 
  pluck("awmndc_tbl")

area_dev_aff_mi <- analysis_study_group |> 
  filter(value == "Total") |> 
  pluck("area_tbl") |> 
  str_extract("^[^\\s]*")

s <- glue("Includes all 'Developable' parcels, $AWM_{{NDC}}$ = {awmndc_dev_total} FAR, land area = {area_dev_aff_mi} $mi^2$.")

subtitle <- TeX(s)

analysis_parcels_ndc |> 
  st_drop_geometry() |> 
  ggplot() +
  aes(x = analysis_ndc,
      weight = area_mi2) + 
  geom_histogram(binwidth = 0.5, color = "grey20", fill= "grey80") +
  geom_vline(xintercept = 0, color = "tomato", linetype = 2) +
  scale_y_continuous(labels = scales::label_comma()) + 
  scale_x_continuous(limits = c(-10,4),
                     breaks = c(-10,-5,0,1,2,3,4)) + 
  labs(title = "Distribution of Net Development Capacity",
       subtitle = subtitle,
       y = expression("Land Area (mi"^2*")"),
       x = "Net Development Capacity (FAR)") 
```


However, for parcels where the current development capacity is less than what HB 2160 would require, we observe that the majority would be significantly impacted by the bill. @fig-results-histogram-affected plots the distribution of net development capacity ($NDC$) for all *Developable, Affected* parcels, revealing that most of the land in this group of station area parcels would be affected by a development capacity increase of 1.5 FAR or greater.

```{r}
#| label: fig-results-histogram-affected
#| output: true
#| message: false
#| fig-cap: "Distribution of Net Development Capacity in Affected Parcels"
#| fig-height: 4

tar_load(analysis_parcels_ndc)

ndc_uni_max <- max(analysis_parcels_ndc$analysis_ndc_uniform, na.rm = TRUE)

awmndc_dev_aff <- analysis_study_group |> 
  filter(value == "Developable, Affected") |> 
  pluck("awmndc_tbl")

area_dev_aff_mi <- analysis_study_group |> 
  filter(value == "Developable, Affected") |> 
  pluck("area_tbl") |> 
  str_extract("^[^\\s]*")

area_dev_aff_pct <- analysis_study_group |> 
  filter(value == "Developable, Affected") |> 
  pluck("area_tbl") |> 
  str_extract("\\((.*?)\\)") |>
  str_replace_all("\\(|\\)", "")

s <- glue("Includes all 'Developable, Affected' parcels, $AWM_{{NDC}}$ = {awmndc_dev_aff} FAR, land area = {area_dev_aff_mi}$mi^2$ ({area_dev_aff_pct} of station area land)")

subtitle <- TeX(s)

analysis_parcels_ndc |> 
  st_drop_geometry() |> 
  ggplot() +
  aes(x = analysis_ndc_uniform,
      weight = area_mi2) + 
  geom_histogram(binwidth = 0.5, color = "grey20", fill= "grey80") +
  scale_y_continuous(labels = scales::label_comma()) + 
  scale_x_continuous(breaks = seq(0, ndc_uni_max, by = 0.5),
                     limits = c(0,ndc_uni_max)) + 
  labs(title = "Distribution of Net Development Capacity in Affected Parcels",
       subtitle = subtitle,
       y = expression("Land Area (mi"^2*")"),
       x = "Net Development Capacity (FAR)") 
```

```{r}
#| label: results-station-area-types-awmndc

tar_load(analysis_station_types_dev_affected)

large_awmndc <- analysis_station_types_dev_affected |> 
  filter(str_detect(analysis_station_area_types, "Large")) |>
  pluck("awmndc_tbl")

small_awmndc <- analysis_station_types_dev_affected |> 
  filter(str_detect(analysis_station_area_types, "Small")) |>
  pluck("awmndc_tbl")

```

In @fig-results-histogram-station-areas, we compare the distribution of $NDC$ for *Developable, Affected* parcels between the two station area types. The $AWM_{NDC}$ for the *Large* station areas is {`r large_awmndc`} FAR and $AWM_{NDC}$ for the *Small* station areas is {`r small_awmndc`} FAR.

```{r}
#| label: fig-results-histogram-station-areas
#| output: true
#| message: false
#| fig-cap: "Station Area Type Comparison"
#| fig-height: 4

s <- glue("Includes all 'Developable, Affected' parcels, Large Station Area $AWM_{{NDC}}$ is {large_awmndc} FAR, Small Station Area $AWM_{{NDC}}$ is {small_awmndc}")

subtitle <- TeX(s)

analysis_parcels_ndc |> 
  st_drop_geometry() |> 
ggplot() +  
  aes(x = analysis_ndc_uniform,
      weight = area_mi2,
      group = analysis_station_area_types) + 
 geom_histogram(binwidth = 0.5, color = "grey20", fill= "grey80") +
  scale_y_continuous(labels = scales::label_comma()) + 
  scale_x_continuous(breaks = seq(0, ndc_uni_max, by = 0.5),
                     limits = c(0,ndc_uni_max)) + 
  facet_wrap(~ analysis_station_area_types, scales = "fixed", ncol = 1) +
  labs(title = "HB 2160's Effect on Net Development Capacity by Station Area Type",
       subtitle = subtitle,
       y = expression("Land Area (mi"^2*")"),
       x = "Net Development Capacity (FAR)") 
```

Summarizing $AWM_{NDC}$ of *Developable, Affected* parcels by station area reveals a more detailed picture of the effects of HB 2160 across the central Puget Sound region:

```{r}
#| label: fig-results-puget-sound-station-map
#| message: false
#| fig-width: 5
#| fig-asp: 1
#| fig-cap: "Transit Station Areas, Central Puget Sound"

tar_load(analysis_stations_awmndc)
tar_load(analysis_transit_walksheds)

t_stop_name <- analysis_transit_walksheds |> 
    mutate(stop_name = as.character(glue("{stop_name} (ID:{row_number()})")))

t_sf <- t_stop_name |> 
  select(stop_name) |> 
  left_join(analysis_stations_awmndc)
  
my_pal <- viridisLite::viridis(n = 6) |> 
  rev() |> 
  set_names(levels(t_sf$without_averaging))

mapview(t_sf, 
        zcol = "without_averaging", 
        layer.name = "Net Dev. Capacity",
        col.region = my_pal)

```

### Case Studies

In order to better understand how the effects of HB 2160 may differ from place to place, we examine four cities as case studies: Kent, Mercer Island, Redmond, and Shoreline. These cities provide a range different contexts under which we can examine the effects of the proposed bill.

```{r}
#| label: tbl-results-case-studies-summary
#| message: false
#| tbl-cap: "Case Studies"

tar_load(pop_hu_change_cities)
tar_load(pop_hu_change_cities_no_water)

case_studies <- c("Shoreline",
                  "Redmond",
                  "Mercer Island",
                  "Kent"
                  )

case_study_cities <- pop_hu_change_cities |> 
  filter(name %in% case_studies) |> 
  st_transform(2926) |> 
  mutate(area = st_area(geometry),
         area_mi2 = as.numeric(convert_to_mi2(area))
)

case_study_cities_no_water <- pop_hu_change_cities_no_water |> 
  filter(name %in% case_studies) |> 
  st_transform(2926) |> 
  mutate(area = st_area(geometry),
         area_mi2 = as.numeric(convert_to_mi2(area))
)

analysis_transit_walksheds |> 
st_join(case_study_cities) |> 
  st_drop_geometry() |> 
  filter(name %in% case_studies) |> 
  group_by(name, mode) |> 
  summarize(.groups = "drop",
            n = n()) |> 
  pivot_wider(names_from = mode,values_from = n,values_fill = 0L) |> 
  mutate(SC = 0L) |> 
  left_join(st_drop_geometry(case_study_cities)) |> 
  select(-geoid, -area) |> 
  select(name, population, housing_units, area_mi2, everything()) |> 
  gt(rowname_col = "name") |> 
   tab_spanner(
    label = "Population, Housing, & Land",
    columns = c(population, housing_units, area_mi2)
  ) |>
  tab_spanner(
    label = "Transit Station Areas",
    columns = c(LR, CR, SC, BRT)
  ) |> 
  fmt_number( 
    decimals = 0,       
    sep_mark = ","
  ) |> 
  cols_label(population = "Population",
             housing_units = "Housing Units",
             area_mi2 = html("Land Area (mi<sup>2</sup>)")) |> 
   tab_source_note(
    source_note = "Sources: American Community Survey, 2022 ACS 5-Year Estimates; authors' analysis of transit stop data from Puget Sound Regional Council 2024"
    )



```

Grouping the study data by city and analysis group, we find that there is a significant amount of variation between the cities. The vast majority of parcels in Redmond and Mercer Island's station areas would see their development capacity increased by the bill. However, by weighting the station areas by the area of land affected, we find that the bill's impact is slightly more modest among the case study cities.

```{r}
#| label: tbl-results-case-studies-analysis-group
#| tbl-cap: "Case Studies by Analysis Group"
#| tbl-cap-location: top

tar_load(analysis_parcels_ndc)

col_names_city <- c("City",
                    "Analysis Group",
                    "Parcels (n)", 
                    "Land Area (sq. miles)")

cs_results_analysis_group <- 
analysis_parcels_ndc |> 
  st_drop_geometry() |> 
  filter(city %in% case_studies) |> 
  group_by(city, analysis_type_uni) |> 
  summarize(.groups = "drop",
            n = n(),
            area = 
              round(digits = 2,
                    sum(area_mi2, na.rm = TRUE))
            ) |> 
  group_by(city) |> 
  mutate(n_total = sum(n),
         area_total = sum(area)) |> 
  group_by(city, analysis_type_uni) |> 
  summarize(
    .groups = "drop",
    n = first(n),
    area = first(area),
    n_total = first(n_total),
    area_total = first(area_total),
    n_pct = percent(n/n_total),
    area_pct = percent(area/area_total),
    n_tbl = glue("{comma(n)} ({percent(n/n_total)})"),
    area_tbl = glue("{area} ({percent(area/area_total)})")
  ) 

cs_results_analysis_group |>
  select(city, analysis_type_uni, ends_with("tbl")) |> 
  gt(rowname_col = "analysis_type_uni" ,
     groupname_col = "city",
     process_md = TRUE) |> 
  cols_label(
    n_tbl = "Parcels (n)",
    area_tbl = html("Land Area (mi<sup>2</sup>)")
  ) |> 
  tab_style(
    style = list(
      cell_text(indent = px(20))),
    locations = cells_stub()
  )

```

Calculating area-weighted mean net development capacity ($AWM_{NDC}$) and total net development capacity (${\sum(NDC)}$) for each of case study city highlights Mercer Island as an outlier—both in terms of its small amount of transit station area land and in terms of the relatively high average increase to net development capacity that would be caused by HB 2160. See @tbl-results-case-studies-results-by-city below.

```{r}
#| label: tbl-results-case-studies-results-by-city
#| tbl-cap: "Results by City"

tar_load(analysis_parcels_ndc)

case_study_results <- analysis_parcels_ndc |> 
  st_drop_geometry() |> 
  filter(city %in% case_studies)|>
  filter(analysis_type_avg %in% "Developable") |> 
  group_by(city) |> 
  summarise(.groups = "drop",
            n = n(),
            area = sum(area_mi2, na.rm = TRUE),
            awm_ndc = weighted_mean(x = analysis_ndc,
                                    w = area_mi2),
            area_ndc_ft2 = sum(analysis_dev_cap_added, na.rm = TRUE)) 

case_study_results |> 
  gt(rowname_col = "city") |> 
  cols_label(
    n = "Parcels (n)",
    area = html("Land Area (mi<sup>2</sup>)"),
    awm_ndc = html("<i>AWM<sub>NDC</sub></i>"),
    area_ndc_ft2 = html("Net Dev. Capacity (ft<sup>2</sup>)")
  ) |> 
  fmt_number( 
    columns = c(2),
    decimals = 0,       
    sep_mark = ","
  ) |> 
  fmt_number( 
    columns = c(3,4),
    decimals = 2
  ) |> 
  fmt_number( 
    columns = c(5),
    decimals = 0,       
    sep_mark = ",",
    n_sigfig = 3,
    suffixing = TRUE
  ) |> 
  tab_footnote(
    footnote = "Area-weighted mean of net development capacity",
    locations = cells_column_labels(
      columns = 4
    )
  ) |> 
  tab_source_note(source_note = "Note: This table summarizes all Developable parcels within each city's station areas; it does not include parcels that would be exempt from HB 2160.")


```

```{r}
#| label: results-case-studies-awmndc 

tar_load(analysis_parcels_ndc)

cs_results_analysis_group_dev <-
analysis_parcels_ndc |> 
  st_drop_geometry() |> 
  filter(city %in% case_studies) |> 
  group_by(city, analysis_type_avg) |> 
  summarize(.groups = "drop",
            n = n(),
            area = 
              round(digits = 2,
                    sum(area_mi2, na.rm = TRUE))
            ) |> 
  group_by(city) |> 
  mutate(n_total = sum(n),
         area_total = sum(area)) |> 
  group_by(city, analysis_type_avg) |> 
  summarize(
    .groups = "drop",
    n = first(n),
    area = first(area),
    n_total = first(n_total),
    area_total = first(area_total),
    n_pct = percent(n/n_total),
    area_pct = percent(area/area_total),
    n_tbl = glue("{comma(n)} ({percent(n/n_total)})"),
    area_tbl = glue("{area} ({percent(area/area_total)})")
  ) 
  
cs_results_analysis_group_devaffected <-
analysis_parcels_ndc |> 
  st_drop_geometry() |> 
  filter(city %in% case_studies) |> 
  filter(analysis_type_uni %in% c("Developable, Affected")) |> 
  group_by(city, analysis_type_uni) |> 
  summarize(.groups = "drop",
            n = n(),
            area = 
              round(digits = 2,
                    sum(area_mi2, na.rm = TRUE))
            ) |> 
  group_by(city) |> 
  mutate(n_total = sum(n),
         area_total = sum(area)) |> 
  group_by(city, analysis_type_uni) |> 
  summarize(
    .groups = "drop",
    n = first(n),
    area = first(area),
    n_total = first(n_total),
    area_total = first(area_total),
    n_pct = percent(n/n_total),
    area_pct = percent(area/area_total),
    n_tbl = glue("{comma(n)} ({percent(n/n_total)})"),
    area_tbl = glue("{area} ({percent(area/area_total)})")
  ) 

cs_results_analysis_group_dev_only <- cs_results_analysis_group_dev |> 
  filter(analysis_type_avg %in% "Developable")

cs_n <- cs_results_analysis_group_dev_only |> 
  (\(x) split(x, x$city))() |> 
  map(\(x) pluck(x,"n") |> comma())

cs_area <- cs_results_analysis_group_dev_only |> 
  (\(x) split(x, x$city))() |> 
  map(\(x) pluck(x,"area"))

cs_n_pct <- cs_results_analysis_group_dev_only |> 
  (\(x) split(x, x$city))() |> 
  map(\(x) pluck(x,"n_pct"))

cs_area_pct <- cs_results_analysis_group_dev_only |> 
  (\(x) split(x, x$city))() |> 
  map(\(x) pluck(x,"area_pct"))


cs_devaff_n <- cs_results_analysis_group_devaffected |> 
  (\(x) split(x, x$city))() |> 
  map(\(x) pluck(x,"n") |> comma())

cs_devaff_area <- cs_results_analysis_group_devaffected |> 
  (\(x) split(x, x$city))() |> 
  map(\(x) pluck(x,"area"))

cs_devaff_n_pct <- cs_results_analysis_group_devaffected |> 
  (\(x) split(x, x$city))() |> 
  map(\(x) pluck(x,"n_pct"))

cs_devaff_area_pct <- cs_results_analysis_group_devaffected |> 
  (\(x) split(x, x$city))() |> 
  map(\(x) pluck(x,"area_pct"))


cs_awmndc <- case_study_results |> 
  split(case_study_results$city) |> 
  map(\(x) pluck(x,"awm_ndc") |> 
        round(digits = 2))

case_studies_by_stationarea_type <-
analysis_parcels_ndc |> 
  st_drop_geometry() |> 
  filter(city %in% case_studies)|>
  group_by(city,
           analysis_type_uni,
           analysis_station_area_types) |> 
  summarise(.groups = "drop",
            n = n(),
            area = sum(area_mi2, na.rm = TRUE),
            awm_ndc = weighted_mean(x = analysis_ndc,
                                    w = area_mi2),
            area_ndc_ft2 = sum(analysis_dev_cap_added, na.rm = TRUE)) |> 
  mutate(awm_ndc = if_else(is.nan(awm_ndc),0,awm_ndc))

max_ndc <- max(na.rm = TRUE, analysis_parcels_ndc$analysis_ndc_uniform)
  

```

```{r}
#| label: results-case-studies-transit-stations

tar_load(analysis_transit_walksheds)

case_studies_transit_stations <- analysis_transit_walksheds |> 
  st_join(case_study_cities) |> 
  transmute(
    name,
    mode = factor(mode,
                  levels = c(
                    "LR",
                    "CR",
                    "SC",
                    "BRT"
                  )),
    stop_name
  )


```

#### Kent

```{r}
#| label: results-case-studies-kent-objects

t_kent <- case_studies_transit_stations |> 
  filter(name %in% "Kent")

# Kent has several non-contiguous parts of the city.
# These will be dropped in order to allow the leaflet map
# to focus on the majority of the city

kent <- 
  case_study_cities |>
  filter(name %in% "Kent") |> 
  st_cast("POLYGON") |> 
  mutate(area_polygon = st_area(geometry)) |> 
  slice_max(area_polygon,n = 1) |> # keep only the main part of Kent
  select(-area_polygon)

p_kent <- analysis_parcels_ndc |> 
  filter(city %in% "Kent") |>   
  filter(analysis_type_avg %in% "Developable") |> 
  select(area_mi2,
         district_name,
         net_dev_capacity = analysis_ndc,
         analysis_type_avg,
         analysis_type_uni)

kent_by_stationarea_type <- 
  case_studies_by_stationarea_type |> 
  filter(city %in% "Kent")

```

![Kent, WA \| Photo courtesy of [Imogen Caroline](https://commons.wikimedia.org/wiki/File:Kent_Washington_Above.jpg), [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0), via Wikimedia Commons](images/kent-aerial.jpg){fig-alt="An aerial photograph of Kent, Washington"}

Kent is a city located in King County, Washington. The city has approximate 135,000 residents. Between 2010 and 2020, the city's population increased by 47.8% [@pugetsoundregionalcouncil2021].

HB 2160 would affect several station areas within Kent's city boundary, including two light rail stations, one commuter rail station, and 15 bus rapid transit stations. See @tbl-appendix-case-studies-kent-stations-table in the appendix for a complete list of the station areas in Kent.

```{r}
#| label: fig-case-studies-kent-stations-map 
#| message: false
#| fig-cap: "Kent Station Areas"

tar_load(mode_pal)

map_kent <- mapview(kent,
        col.regions = "grey",
        alpha.regions = .10,
        legend = FALSE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE)

map_kent_stations_baselayer <- mapview(t_kent,
        zcol = "mode",
        col.regions = mode_pal,
        alpha.regions = 0.2,
        color = "gray",
        legend = TRUE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE,
        layer.name = "Stations") 

map_kent_stations <- map_kent + 
  mapview(t_kent,
          zcol = "mode",
          col.regions = mode_pal,
          legend = TRUE,
          layer.name = "Station Area Type",
          popup = FALSE,
          label = "stop_name")

map_kent_stations

```

We find the area-weighted mean net development capacity ($AWM_{NDC}$) for Kent's station areas to be `r cs_awmndc['Kent']` FAR. This metric summarizes HB 2160's effect on the *Developable* parcels in the city's station areas, which includes `r cs_n_pct['Kent']` of the station area parcels (`r cs_n_pct['Kent']` parcels) and `r cs_area_pct['Kent']` of the station area land (`r cs_area['Kent']` mi^2^).

In @fig-results-case-studies-kent-histogram, we observe the distribution of changes in development capacity that HB 2160 would have on *Developable, Affected* parcels in Kent's station areas.

```{r}
#| label: fig-results-case-studies-kent-histogram
#| output: true
#| message: false 
#| fig-height: 4
#| fig-cap: "Net Development Capacity, Kent"


kent_hist_subtitle <- "Area-weighted mean net development capacity ($AWM_{{NDC}}$) is {cs_awmndc['Kent']} FAR" |> 
  glue() |> 
  TeX()

analysis_parcels_ndc |> 
  filter(city %in% "Kent") |> 
  create_hist_with_inset() +
  plot_annotation(title = "HB 2160's Effect on Net Development Capacity in Kent, WA",
       subtitle = kent_hist_subtitle)
```

Examining the data grouped by station area type, we observe two patterns. First, there are a significant number of *Not Developable* parcels in the half-mile station areas. Second, the *Developable, Affected* parcels in both types of station areas would be substantially affected by HB 2160, as indicated by the relatively large $AWM_{NDC}$ values in @tbl-results-case-studies-kent-station-areas.

```{r}
#| label: tbl-results-case-studies-kent-station-areas
#| message: false
#| tbl-cap: "Station Area Type Summary, Kent"

kent_by_stationarea_type |> 
  select(-city) |> 
  gt(rowname_col = "analysis_type_uni",
     groupname_col = "analysis_station_area_types") |> 
  cols_label(
    n = "Parcels (n)",
    area = html("Land Area (mi<sup>2</sup>)"),
    awm_ndc = html("<i>AWM<sub>NDC</sub></i>"),
    area_ndc_ft2 = html("Net Dev. Capacity (ft<sup>2</sup>)")
  ) |> 
  tab_style(
    style = list(cell_text(indent = px(20))),
    locations = cells_stub()
  ) |> 
  fmt_number( 
    columns = c(4,5),
    decimals = 2,       
    sep_mark = ","
  ) |> 
  fmt_number( 
    columns = c(6),
    decimals = 0,       
    sep_mark = ",",
    n_sigfig = 3,
    suffixing = TRUE
  )
  

```

Displaying the net development capacity of individual parcels reveals a more nuanced pattern around Kent's station areas, as shown in @fig-results-case-studies-kent-maps.

```{r}
#| label: fig-results-case-studies-kent-maps
#| eval: true
#| message: false
#| fig-cap: "Net Development Capacity, Kent Station Areas"


map_kent <- mapview(kent,
        col.regions = "grey",
        alpha.regions = .10,
        legend = FALSE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE)

map_kent_stations_baselayer <- mapview(t_kent,
        zcol = "mode",
        col.regions = mode_pal,
        alpha.regions = 0.2,
        color = "white",
        legend = TRUE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE,
        layer.name = "Stations") 

map_kent_parcels <- map_kent_stations_baselayer +
  mapview(p_kent,
          zcol = "net_dev_capacity",
          legend = TRUE,
          layer.name = "Net FAR",
          popup = "zoning_district_name"
            )

map_kent_parcels

```

The majority of parcels within this city's station areas is zoned as "Single-Family". The total net development capacity for this zoning district would be a significant increase, as shown in @tbl-results-case-studies-kent-by-district.


```{r}
#| label: tbl-results-case-studies-kent-by-district
#| message: false
#| tbl-cap: "Top 5 Zoning Districts by Net Development Capacity, Kent"

 analysis_parcels_ndc |> 
  filter(city %in% "Kent") |>   
  filter(analysis_type_avg %in% "Developable") |> 
  st_drop_geometry() |> 
  group_by(district_name) |> 
summarise(.groups = "drop",
          n = n(),
          area = sum(area_mi2, na.rm = TRUE),
          awm_ndc = weighted_mean(x = analysis_ndc,
                                  w = area_mi2)) |> 
  mutate(area_ndc_mi2 = poss_multiply(area, awm_ndc),
         area_ndc_mi2 = if_else(area_ndc_mi2 <=0,0,area_ndc_mi2),
         area_ndc_ft2 = area_ndc_mi2 * 27878400) |> 
   select(-area_ndc_mi2) |> 
  arrange(desc(area_ndc_ft2)) |> 
   slice_head(n = 5) |> 
   gt(rowname_col = "district_name") |> 
   cols_label(
    n = "Parcels (n)",
    area = html("Land Area (mi<sup>2</sup>)"),
    awm_ndc = html("<i>AWM<sub>NDC</sub></i>"),
    area_ndc_ft2 = html("Net Dev. Capacity (ft<sup>2</sup>)")
  ) |> fmt_number( 
    columns = c(3,4),
    decimals = 2,       
    sep_mark = ","
  ) |> 
  fmt_number( 
    columns = c(5),
    decimals = 0,       
    sep_mark = ",",
    n_sigfig = 3,
    suffixing = TRUE
  )



```

#### Mercer Island

```{r}
#| label: results-case-studies-mercerisland-objects

t_mercerisland <- case_studies_transit_stations |> 
  filter(name %in% "Mercer Island") 

mercerisland <- 
  case_study_cities_no_water |>
  filter(name %in% "Mercer Island") 

p_mercerisland <- analysis_parcels_ndc |> 
  filter(city %in% "Mercer Island") |>   
  filter(analysis_type_avg %in% "Developable") |> 
  select(area_mi2,
         district_name,
         net_dev_capacity = analysis_ndc,
         analysis_type_avg,
         analysis_type_uni)

mercerisland_by_stationarea_type <- 
  case_studies_by_stationarea_type |> 
  filter(city %in% "Mercer Island")

```

![Mercer Island, WA \| Photo courtest of [Dllu](https://commons.wikimedia.org/wiki/File:Aerial_photo_of_Mercer_Island,_Washington.jpg), [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0), via Wikimedia Commons](images/mercer-island-aerial.jpg){fig-alt="An aerial photograph of Mercer Island"}

Mercer Island is a city located in King County, Washington. The city has approximate 25,000 residents. Between 2010 and 2020, the city's population increased by 13.4% [@pugetsoundregionalcouncil2021].

HB 2160 would affect only one station area within the city boundary: the Mercer Island Light Rail station. Only three other cities share Mercer Island's situation by having a single transit station area that meets HB 2160's criteria; they are Mukilteo, DuPont, and University Place.

```{r}
#| label: fig-case-studies-mercerisland-stations-map 
#| message: false
#| fig-cap: "Mercer Island Station Areas"


map_mercerisland <- mapview(mercerisland,
        col.regions = "grey",
        alpha.regions = .10,
        legend = FALSE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE)

map_mercerisland_stations_baselayer <- mapview(t_mercerisland,
        zcol = "mode",
        col.regions = mode_pal,
        alpha.regions = 0.2,
        color = "gray",
        legend = TRUE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE,
        layer.name = "Stations") 

map_mercerisland_stations <- map_mercerisland + 
  mapview(t_mercerisland,
          zcol = "mode",
          col.regions = mode_pal,
          legend = TRUE,
          layer.name = "Station Area Type",
          popup = FALSE,
          label = "stop_name")

map_mercerisland_stations

```

We find the area-weighted mean net development capacity ($AWM_{NDC}$) for Mercer Island's single station area to be `r cs_awmndc['Mercer Island']` FAR. This metric summarizes HB 2160's effect on the *Developable* parcels in the city's station area, which includes `r cs_n_pct['Mercer Island']` of the station area parcels (`r cs_n_pct['Mercer Island']` parcels) and `r cs_area_pct['Mercer Island']` of the station area land (`r cs_area['Mercer Island']` mi^2^).

In @fig-results-case-studies-mercerisland-histogram, we observe the distribution of changes in development capacity that HB 2160 would have on *Developable, Affected* parcels in Mercer Island's light rail station area.

```{r}
#| label: fig-results-case-studies-mercerisland-histogram
#| output: true
#| message: false 
#| fig-height: 4
#| fig-cap: "Net Development Capacity, Mercer Island"


mercerisland_hist_subtitle <- "Area-weighted mean net development capacity ($AWM_{{NDC}}$) is {cs_awmndc['Mercer Island']} FAR" |> 
  glue() |> 
  TeX()

analysis_parcels_ndc |> 
  filter(city %in% "Mercer Island") |> 
  create_hist_with_inset(binwidth = .25) +
  plot_annotation(title = "HB 2160's Effect on Net Development Capacity in Mercer Island, WA",
       subtitle = mercerisland_hist_subtitle)
```

Displaying the net development capacity of individual parcels reveals a clear pattern around Mercer Island's light rail station area, as shown in @fig-results-case-studies-mercerisland-maps. 

```{r}
#| label: fig-results-case-studies-mercerisland-maps
#| eval: true
#| message: false
#| fig-cap: "Net Development Capacity, Mercer Island Station Areas"


map_mercerisland <- mapview(mercerisland,
        col.regions = "grey",
        alpha.regions = .10,
        legend = FALSE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE)

map_mercerisland_stations_baselayer <- mapview(t_mercerisland,
        zcol = "mode",
        col.regions = mode_pal,
        alpha.regions = 0.2,
        color = "white",
        legend = TRUE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE,
        layer.name = "Stations") 

map_mercerisland_parcels <- map_mercerisland_stations_baselayer +
  mapview(p_mercerisland,
          zcol = "net_dev_capacity",
          legend = TRUE,
          layer.name = "Net FAR",
          popup = "zoning_district_name"
            )

map_mercerisland_parcels

```

Aside from the Town Center zoning district, which already allows buildings with up to 4 FAR, the station area parcels have an area-weighted average FAR of 0.49—significantly lower than the maximum FAR that HB 2160 would introduce. The total net development capacity for station area parcels zoned as "Single-Family" would be a significant increase, as shown in @tbl-results-case-studies-kent-by-district.


```{r}
#| label: tbl-results-case-studies-mercerisland-by-district
#| message: false
#| tbl-cap: "Zoning Districts by Net Development Capacity, Mercer Island"

 analysis_parcels_ndc |> 
  filter(city %in% "Mercer Island") |>   
  filter(analysis_type_avg %in% "Developable") |> 
  st_drop_geometry() |> 
  group_by(district_name) |> 
summarise(.groups = "drop",
          n = n(),
          area = sum(area_mi2, na.rm = TRUE),
          awm_ndc = weighted_mean(x = analysis_ndc,
                                  w = area_mi2)) |> 
  mutate(area_ndc_mi2 = poss_multiply(area, awm_ndc),
         area_ndc_mi2 = if_else(area_ndc_mi2 <=0,0,area_ndc_mi2),
         area_ndc_ft2 = area_ndc_mi2 * 27878400) |> 
   select(-area_ndc_mi2) |> 
  arrange(desc(area_ndc_ft2)) |>  
   gt(rowname_col = "district_name") |> 
   cols_label(
    n = "Parcels (n)",
    area = html("Land Area (mi<sup>2</sup>)"),
    awm_ndc = html("<i>AWM<sub>NDC</sub></i>"),
    area_ndc_ft2 = html("Net Dev. Capacity (ft<sup>2</sup>)")
  ) |> fmt_number( 
    columns = c(3,4),
    decimals = 2,       
    sep_mark = ","
  ) |> 
  fmt_number( 
    columns = c(5),
    decimals = 0,       
    sep_mark = ",",
    n_sigfig = 3,
    suffixing = TRUE
  )



```


#### Redmond

![Redmond, WA \| Photo courtesy of [Spicypepper999](https://commons.wikimedia.org/wiki/File:Redmond_aerial,_April_2023.png), CC0, via Wikimedia Commons](images/redmond-aerial.png){fig-alt="An aerial photo of Redmond, Washington"}

```{r}
#| label: results-case-studies-redmond-objects

t_redmond <- case_studies_transit_stations |> 
  filter(name %in% "Redmond")

# Redmond has several non-contiguous parts of the city.
# These will be dropped in order to allow the leaflet map
# to focus on the majority of the city

redmond <- 
  case_study_cities |>
  filter(name %in% "Redmond") |> 
  st_cast("POLYGON") |> 
  mutate(area_polygon = st_area(geometry)) |> 
  slice_max(area_polygon,n = 1) |> # keep only the main part of Redmond
  select(-area_polygon)

p_redmond <- analysis_parcels_ndc |> 
  filter(city %in% "Redmond") |>   
  filter(analysis_type_avg %in% "Developable") |> 
  select(area_mi2,
         district_name,
         net_dev_capacity = analysis_ndc,
         analysis_type_avg,
         analysis_type_uni)

redmond_by_stationarea_type <- 
  case_studies_by_stationarea_type |> 
  filter(city %in% "Redmond")

```

Redmond is a city located in King County, Washington. The city has approximate 74,000 residents. Between 2010 and 2020, the city's population increased by 35.3% [@pugetsoundregionalcouncil2021].

HB 2160 would affect several station areas within Redmond's city boundary, including four light rail stations and approximately 30 bus rapid transit stations.[^10] See @tbl-appendix-case-studies-redmond-stations-table in the appendix for a complete list of the station areas in Redmond.

[^10]: While most of the bus rapid transit stations are spatially distinct, there are several cases where two BRT stations appear to be in the same location. One example is Redmond Transit Center, where both Bay 1 and Bay 4 are included in the study's transit stop dataset even though they have (approximately) the same station area. This situation affect six BRT stops / three distinct station areas in total.

```{r}
#| label: fig-case-studies-redmond-stations-map 
#| message: false
#| fig-cap: "Redmond Station Areas"
#| include: false

tar_load(mode_pal)

map_redmond <- mapview(redmond,
        col.regions = "grey",
        alpha.regions = .10,
        legend = FALSE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE)

map_redmond_stations_baselayer <- mapview(t_redmond,
        zcol = "mode",
        col.regions = mode_pal,
        alpha.regions = 0.2,
        color = "gray",
        legend = TRUE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE,
        layer.name = "Stations") 

map_redmond_stations <- map_redmond + 
  mapview(t_redmond,
          zcol = "mode",
          col.regions = mode_pal,
          legend = TRUE,
          layer.name = "Station Area Type",
          popup = FALSE,
          label = "stop_name")

map_redmond_stations

```

We find the area-weighted mean net development capacity ($AWM_{NDC}$) for Redmond's station areas to be `r cs_awmndc['Redmond']` FAR. This metric summarizes HB 2160's effect on the *Developable* parcels in the city's station areas, which includes `r cs_n_pct['Redmond']` of the station area parcels (`r cs_n_pct['Redmond']` parcels) and `r cs_area_pct['Redmond']` of the station area land (`r cs_area['Redmond']` mi^2^).

In @fig-results-case-studies-redmond-histogram, we observe the distribution of changes in development capacity that HB 2160 would have on *Developable, Affected* parcels in Redmond's station areas.

```{r}
#| label: fig-results-case-studies-redmond-histogram
#| output: true
#| message: false 
#| fig-height: 4
#| fig-cap: "Net Development Capacity, Redmond"


redmond_hist_subtitle <- "Area-weighted mean net development capacity ($AWM_{{NDC}}$) is {cs_awmndc['Redmond']} FAR" |> 
  glue() |> 
  TeX()

analysis_parcels_ndc |> 
  filter(city %in% "Redmond") |> 
  create_hist_with_inset() +
  plot_annotation(title = "HB 2160's Effect on Net Development Capacity in Redmond, WA",
       subtitle = redmond_hist_subtitle)
```

Examining the data grouped by station area type, we observe that while both station area types contain a similar number of *Developable, Affected* parcels, the *Large* station areas include substantially more land area that would be affected by the bill. Additionally, the $AWM_{NDC}$ of Redmond's *Large* station areas is substantially higher than the *Small* station areas (+1.90 FAR and + 1.15 FAR, respectively).

```{r}
#| label: tbl-results-case-studies-redmond-station-areas
#| message: false
#| tbl-cap: "Station Area Type Summary, Redmond"

redmond_by_stationarea_type |> 
  select(-city) |> 
  gt(rowname_col = "analysis_type_uni",
     groupname_col = "analysis_station_area_types") |> 
  cols_label(
    n = "Parcels (n)",
    area = html("Land Area (mi<sup>2</sup>)"),
    awm_ndc = html("<i>AWM<sub>NDC</sub></i>"),
    area_ndc_ft2 = html("Net Dev. Capacity (ft<sup>2</sup>)")
  ) |> 
  tab_style(
    style = list(cell_text(indent = px(20))),
    locations = cells_stub()
  ) |> 
  fmt_number( 
    columns = c(4,5),
    decimals = 2,       
    sep_mark = ","
  ) |> 
  fmt_number( 
    columns = c(6),
    decimals = 0,       
    sep_mark = ",",
    n_sigfig = 3,
    suffixing = TRUE
  )
  

```

Displaying the net development capacity of individual parcels reveals a complicated pattern around Redmond's station areas, as shown in @fig-results-case-studies-redmond-maps. 


```{r}
#| label: fig-results-case-studies-redmond-maps
#| eval: true
#| message: false
#| fig-cap: "Net Development Capacity, Redmond Station Areas"


map_redmond <- mapview(redmond,
        col.regions = "grey",
        alpha.regions = .10,
        legend = FALSE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE)

map_redmond_stations_baselayer <- mapview(t_redmond,
        zcol = "mode",
        col.regions = mode_pal,
        alpha.regions = 0.2,
        color = "white",
        legend = TRUE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE,
        layer.name = "Stations") 

map_redmond_parcels <- map_redmond_stations_baselayer +
  mapview(p_redmond,
          zcol = "net_dev_capacity",
          legend = TRUE,
          layer.name = "Net FAR",
          popup = "zoning_district_name"
            )

map_redmond_parcels

```

While there are a few neighborhoods that would not be affected, such as Redmond Town Center and the manufacturing park on the north, the majority of parcels within the transit station areas would have their maximum development capacity increased by HB 2160. For example, the Overlake Mixed-Use zoning district would see substantial increase to its total development capacity (see @tbl-results-case-studies-redmond-by-district).

```{r}
#| label: tbl-results-case-studies-redmond-by-district
#| message: false
#| tbl-cap: "Top 5 Zoning Districts by Net Development Capacity, Redmond"

 analysis_parcels_ndc |> 
  filter(city %in% "Redmond") |>   
  filter(analysis_type_avg %in% "Developable") |> 
  st_drop_geometry() |> 
  group_by(district_name) |> 
summarise(.groups = "drop",
          n = n(),
          area = sum(area_mi2, na.rm = TRUE),
          awm_ndc = weighted_mean(x = analysis_ndc,
                                  w = area_mi2)) |> 
  mutate(area_ndc_mi2 = poss_multiply(area, awm_ndc),
         area_ndc_ft2 = area_ndc_mi2 * 27878400) |> 
   select(-area_ndc_mi2) |> 
  arrange(desc(area_ndc_ft2)) |> 
   slice_head(n = 5) |> 
   gt(rowname_col = "district_name") |> 
   cols_label(
    n = "Parcels (n)",
    area = html("Land Area (mi<sup>2</sup>)"),
    awm_ndc = html("<i>AWM<sub>NDC</sub></i>"),
    area_ndc_ft2 = html("Net Dev. Capacity (ft<sup>2</sup>)")
  ) |> fmt_number( 
    columns = c(3,4),
    decimals = 2,       
    sep_mark = ","
  ) |> 
  fmt_number( 
    columns = c(5),
    decimals = 0,       
    sep_mark = ",",
    n_sigfig = 3,
    suffixing = TRUE
  )



```

#### Shoreline

![City of Shoreline, WA \| Photo courtesy of [Haruo](https://commons.wikimedia.org/wiki/File:City_of_Shoreline_sign_at_145th_and_Aurora.jpg), [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0), via Wikimedia Commons](images/city-of-shoreline-sign.jpg)

```{r}
#| label: results-case-studies-shoreline-objects

t_shoreline <- case_studies_transit_stations |> 
  filter(name %in% "Shoreline")

# Shoreline has several non-contiguous parts of the city.
# These will be dropped in order to allow the leaflet map
# to focus on the majority of the city

shoreline <- 
  case_study_cities |>
  filter(name %in% "Shoreline") |> 
  st_cast("POLYGON") |> 
  mutate(area_polygon = st_area(geometry)) |> 
  slice_max(area_polygon,n = 1) |> # keep only the main part of Shoreline
  select(-area_polygon)

p_shoreline <- analysis_parcels_ndc |> 
  filter(city %in% "Shoreline") |>   
  filter(analysis_type_avg %in% "Developable") |> 
  select(area_mi2,
         district_name,
         net_dev_capacity = analysis_ndc,
         analysis_type_avg,
         analysis_type_uni)

shoreline_by_stationarea_type <- 
  case_studies_by_stationarea_type |> 
  filter(city %in% "Shoreline")

```

Shoreline is a city located in King County, Washington. The city has approximate 58,700 residents. Between 2010 and 2020, the city's population increased by 10.6% [@pugetsoundregionalcouncil2021].

HB 2160 would affect several station areas within Shoreline's city boundary, including two light rail stations and approximately 30 bus rapid transit stations.[^11] See @tbl-appendix-case-studies-shoreline-stations-table in the appendix for a complete list of the station areas in Shoreline.

[^11]: While most of the bus rapid transit station areas are spatially distinct, the Aurora Village Transit Center constitutes two stations (Bay 10 and Bay 3) in the study data set even though they have (approximately) the same station area.

```{r}
#| label: fig-case-studies-shoreline-stations-map 
#| message: false
#| fig-cap: "Shoreline Station Areas"

tar_load(mode_pal)

map_shoreline <- mapview(shoreline,
        col.regions = "grey",
        alpha.regions = .10,
        legend = FALSE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE)

map_shoreline_stations_baselayer <- mapview(t_shoreline,
        zcol = "mode",
        col.regions = mode_pal,
        alpha.regions = 0.2,
        color = "gray",
        legend = TRUE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE,
        layer.name = "Stations") 

map_shoreline_stations <- map_shoreline + 
  mapview(t_shoreline,
          zcol = "mode",
          col.regions = mode_pal,
          legend = TRUE,
          layer.name = "Station Area Type",
          popup = FALSE,
          label = "stop_name")

map_shoreline_stations

```

We find the area-weighted mean net development capacity ($AWM_{NDC}$) for Shoreline's station areas to be +1.65 FAR. This metric summarizes HB 2160's effect on the *Developable, Affected* parcels in the city's station areas, which includes 76% of the station area parcels (3,632 parcels) and 62% of the station area land (1.31 mi^2^).

```{r}
#| label: fig-results-case-studies-shoreline-histogram
#| output: true
#| message: false 
#| fig-height: 4
#| fig-cap: "Net Development Capacity, Shoreline"


shoreline_hist_subtitle <- "Area-weighted mean net development capacity ($AWM_{{NDC}}$) is {cs_awmndc['Shoreline']} FAR" |> 
  glue() |> 
  TeX()

analysis_parcels_ndc |> 
  filter(city %in% "Shoreline") |> 
  create_hist_with_inset() +
  plot_annotation(title = "HB 2160's Effect on Net Development Capacity in Shoreline, WA",
       subtitle = shoreline_hist_subtitle)
```

Examining the data grouped by station area type, we observe that in Shoreline the *Small* station areas make up both more parcels and more land area than the *Large* station areas. However, the $AWM_{NDC}$ of Shoreline's *Large* station areas is substantially higher than that of the *Small* station areas (+2.23 FAR and + 1.27 FAR, respectively).

```{r}
#| label: tbl-results-case-studies-shoreline-station-areas
#| message: false
#| tbl-cap: "Station Area Type Summary, Shoreline"

shoreline_by_stationarea_type |> 
  select(-city) |> 
  gt(rowname_col = "analysis_type_uni",
     groupname_col = "analysis_station_area_types") |> 
  cols_label(
    n = "Parcels (n)",
    area = html("Land Area (mi<sup>2</sup>)"),
    awm_ndc = html("<i>AWM<sub>NDC</sub></i>"),
    area_ndc_ft2 = html("Net Dev. Capacity (ft<sup>2</sup>)")
  ) |> 
  tab_style(
    style = list(cell_text(indent = px(20))),
    locations = cells_stub()
  ) |> 
  fmt_number( 
    columns = c(4,5),
    decimals = 2,       
    sep_mark = ","
  ) |> 
  fmt_number( 
    columns = c(6),
    decimals = 0,       
    sep_mark = ",",
    n_sigfig = 3,
    suffixing = TRUE
  )
  

```

Displaying the net development capacity of individual parcels reveals a complicated pattern around Shoreline's station areas, as shown in @fig-results-case-studies-shoreline-maps. 


```{r}
#| label: fig-results-case-studies-shoreline-maps
#| eval: true
#| message: false
#| fig-cap: "Net Development Capacity, Shoreline Station Areas"


map_shoreline <- mapview(shoreline,
        col.regions = "grey",
        alpha.regions = .10,
        legend = FALSE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE)

map_shoreline_stations_baselayer <- mapview(t_shoreline,
        zcol = "mode",
        col.regions = mode_pal,
        alpha.regions = 0.2,
        color = "white",
        legend = TRUE,
        popup = FALSE,
        highlight = FALSE,
        label = FALSE,
        layer.name = "Stations") 

map_shoreline_parcels <- map_shoreline_stations_baselayer +
  mapview(p_shoreline,
          zcol = "net_dev_capacity",
          legend = TRUE,
          layer.name = "Net FAR",
          popup = "zoning_district_name"
            )

map_shoreline_parcels

```


The vast majority of parcels within this city's station areas is zoned as "Low-Density Residential". The total net development capacity for this zoning district would be a significant increase, as shown in @tbl-results-case-studies-shoreline-by-district.

```{r}
#| label: tbl-results-case-studies-shoreline-by-district
#| message: false
#| tbl-cap: "Top 3 Zoning Districts by Net Development Capacity, Shoreline"

 analysis_parcels_ndc |> 
  filter(city %in% "Shoreline") |>   
  filter(analysis_type_avg %in% "Developable") |> 
  st_drop_geometry() |> 
  group_by(district_name) |> 
summarise(.groups = "drop",
          n = n(),
          area = sum(area_mi2, na.rm = TRUE),
          awm_ndc = weighted_mean(x = analysis_ndc,
                                  w = area_mi2)) |> 
  mutate(area_ndc_mi2 = poss_multiply(area, awm_ndc),
         area_ndc_mi2 = if_else(area_ndc_mi2 <=0,0,area_ndc_mi2),
         area_ndc_ft2 = area_ndc_mi2 * 27878400) |> 
   select(-area_ndc_mi2) |> 
  arrange(desc(area_ndc_ft2)) |> 
   slice_head(n = 3) |> 
   gt(rowname_col = "district_name") |> 
   cols_label(
    n = "Parcels (n)",
    area = html("Land Area (mi<sup>2</sup>)"),
    awm_ndc = html("<i>AWM<sub>NDC</sub></i>"),
    area_ndc_ft2 = html("Net Dev. Capacity (ft<sup>2</sup>)")
  ) |> fmt_number( 
    columns = c(3,4),
    decimals = 2,       
    sep_mark = ","
  ) |> 
  fmt_number( 
    columns = c(5),
    decimals = 0,       
    sep_mark = ",",
    n_sigfig = 3,
    suffixing = TRUE
  )



```


## Conclusion

House Bill 2160 aims to significantly increase development capacity near transit stops in the Puget Sound region, marking a meaningful move towards transit-oriented development. While this study indicates a substantial potential for new development capacity, it's important to consider these figures as estimates due to data and methodological limitations. Future refinements in data and methodology could enhance certainty about the bill's capacity impact. Despite these limitations, this study findings strongly suggest that this bill could have a significant impact on housing production, public transit access, and urban development in the central Puget Sound region.

## References {.unnumbered}

::: {#refs}
:::

## Appendices {.unnumbered}

### Case Study Tables & Maps

#### Kent

```{r}
#| label: tbl-appendix-case-studies-kent-stations-table
#| tbl-cap: "Transit Stations/Stops, Kent (Appendix)"
#| tbl-cap-location: top 

t_kent |> 
  st_drop_geometry() |> 
  gt(rowname_col = "mode") |> 
  cols_label(
    stop_name = "Transit Stop/Station") |> 
  tab_style(
    style = list(
      cell_text(align = "left")),
    locations = cells_body()
  )

```

```{r}
#| label: fig-appendix-case-studies-kent-zoning
#| message: false
#| fig-cap: "Zoning Districts, Kent Station Areas (Appendix)"
#| include: false
#| eval: false



# zd_kent <- zd |> 
#   filter(juris %in% "Kent") |> 
#   select(district_name,
#          zone,
#          allow_residential:min_parking
#          )
# 
# map_kent_zoning_districts <- map_kent + 
#   mapview(zd_kent,
#           zcol = "zone",
#           col.regions = c(brewer.pal(12, "Set3"),
#                           brewer.pal(8, "Set2")),
#           popup = TRUE,
#           layer.name = "Zoning Districts")
# 
# map_kent_zoning_districts

```

```{r}
#| label: fig-appendix-case-studies-kent-parcels-map
#| eval: true
#| message: false
#| fig-cap: "Net Development Capacity, Kent Station Areas (Appendix)"
#| include: false


# p_kent <- p |> 
#   filter(zoning_juris %in% "Kent") |> 
#   select(net_dev_capacity = zoning_new_max_far_additional)
# 
# map_kent_parcels <- map_kent +  
#   map_kent_stations_baselayer +
#   mapview(p_kent,
#           zcol = "net_dev_capacity",
#           legend = TRUE,
#           layer.name = "Net FAR",
#           popup = "net_dev_capacity") 
# 
# map_kent_parcels

```

#### Redmond

```{r}
#| label: tbl-appendix-case-studies-redmond-stations-table
#| tbl-cap: "Transit Stations/Stops, Redmond (Appendix)"
#| tbl-cap-location: top 

t_redmond |> 
  st_drop_geometry() |> 
  gt(rowname_col = "mode") |> 
  cols_label(
    stop_name = "Transit Stop/Station") |> 
  tab_style(
    style = list(
      cell_text(align = "left")),
    locations = cells_body()
  )

```

#### Shoreline

```{r}
#| label: tbl-appendix-case-studies-shoreline-stations-table
#| tbl-cap: "Transit Stations/Stops, Shoreline (Appendix)"
#| tbl-cap-location: top 

t_shoreline |> 
  st_drop_geometry() |> 
  gt(rowname_col = "mode") |> 
  cols_label(
    stop_name = "Transit Stop/Station") |> 
  tab_style(
    style = list(
      cell_text(align = "left")),
    locations = cells_body()
  )

```

::: {#copyright .quarto-appendix-contents .quarto-appendix-secondary-label}

------------------------------------------------------------------------

[Copyright © February 2024. Futurewise. Permission is granted for reproduction of this file, with attribution to Futurewise.]{style="text-align: center;"}
:::
