⚠️ Work in progress — data and figures are preliminary.

Solvent Streets

los-angeles-ca

Pavement & Parking Analysis | Last computed 2026-06-19

City Summary

City Area (acres) 398777.1
City Area (sq mi) 623.09
Total Paved (acres) 49043.6
% Paved 12.3%

roads

Features 395898
Area (acres) 40339.8
Area (sq mi) 63.03

parking

Features 19442
Area (acres) 6804.3
Area (sq mi) 10.63

sidewalks

Features 112242
Area (acres) 3246.0
Area (sq mi) 5.07
Coverage %
0%25%50%75%100%

Interactive Forecast

Tier Min PCI Max PCI $/unit

Methodology

This section describes the data sources, models, and assumptions behind the analysis presented in each dashboard.

Data sources

The exact sources and endpoints used for a given example are listed in that example's Config tab.

Decay model

Each road classification decays independently via

PCI(t) = PCI₀ · exp(−k · t)

where k is an annual decay constant that depends on the road classification. Higher-class roads (motorway, trunk, primary) decay more slowly than lower-class roads (residential, service) because they are built to thicker, more rigorous design standards and typically receive more frequent maintenance. Default values are derived from LTPP data reported in FHWA-RD-01-156, Long-Term Pavement Performance and ship as part of the forecast package; they are continental-US averages and do not account for local climate, traffic, or construction quality. A config may set a per-city decay_rate to tune for local conditions (e.g. freeze/thaw or road salt); that override is applied as the rate for a typical road and scales every road class proportionally, so the per-class ordering (higher classes decay slower) is preserved rather than flattened. Sidewalks decay on a separate, slower track and are not treated as a highway class.

Cost model

Treatment costs are banded by PCI: each band has a representative $/sq m value, and costs between bands are linearly interpolated at the tier midpoints, so the cost-versus-PCI curve is smooth rather than step-shaped. Above the highest anchor (the midpoint of the preventive tier) and below the lowest anchor (the midpoint of the reconstruction tier), the cost is clamped to that anchor's value rather than extrapolated. Default cost tiers are expressed in $/sq m and sourced from FHWA treatment-selection guidance; they are calibration inputs, not measurements, and local bid prices will differ. Roads and sidewalks use independent cost tiers because the treatment economics differ substantially.

Scenario comparisons

PVMT ships with three comparison runs driven by annual funding level, all using the worst-first allocation strategy (budget is spent on the lowest-PCI segments first):

A do-nothing baseline (no spend, uncontrolled decay) is shown alongside the funded runs for comparison.

The forecast library also implements a preventive-first strategy (prioritize highest-PCI segments that are still in the preservation window), but the default UI comparisons do not exercise it. Preventive vs. worst-first allocation is governed by per-strategy efficiency multipliers; those multipliers are illustrative calibration constants chosen to reflect the direction and sign of the effect reported in FHWA-HIF-12-042, Pavement Preservation: Preserving our Investment — that $1 of preventive maintenance is reported to avoid $6–$10 of future reconstruction — not to reproduce that benefit-cost ratio as a single-year spending efficiency.

Area growth

Optional compound annual growth applies to pavement area each year:

Area(y) = Area₀ · (1 + g)^y

where g is configured per city (default zero). This lets an example model a city that is still expanding its street network; it does not model demolition or removal.

Solvency metrics (streets/roads only)

The dashboard's Financials headline and the cross-city leaderboard report three solvency figures. They are computed on the roads/streets cohort only — the aggregate scenarios blend roads, parking, and sidewalks but cost the blend at road tiers, which would mis-price sidewalks, so an absolute dollar claim must be roads-only. They are derived from a worst-first run at the city's configured annual budget.

Three caveats apply to these figures specifically:

Assumptions and limitations

References

Project Configuration

Input Configuration

# Los Angeles area, CA — multi-city with custom cost tiers
#
# A regional analysis across eight LA-area cities, demonstrating a custom
# four-tier forecast cost schedule and per-city hex_edge_m overrides for the
# largest jurisdictions (LA proper at 300 m, Long Beach at 200 m).
# Overpass-only (no ArcGIS).

config_id = "los-angeles-ca"

[grid]
hex_edge_m = 125

[forecast]
years = 20
decay_rate = 0.03

[[forecast.cost_tiers]]
min_pci = 0
max_pci = 25
cost_per_sqm = 200.0
label = "Failed"

[[forecast.cost_tiers]]
min_pci = 25
max_pci = 50
cost_per_sqm = 120.0
label = "Poor"

[[forecast.cost_tiers]]
min_pci = 50
max_pci = 70
cost_per_sqm = 60.0
label = "Fair"

[[forecast.cost_tiers]]
min_pci = 70
max_pci = 100
cost_per_sqm = 15.0
label = "Good"

[[cities]]
name = "Los Angeles, CA"
#@cite StreetsLA citywide network-average PCI 71
#@cite     https://data.streetsforall.org/blog/repaving/ (accessed 2026-06-14)
forecast.initial_pci = 71
overpass = true
hex_edge_m = 300  # LA proper is very large (~1300 km²); use coarse hexes

[[cities]]
name = "Santa Monica, CA"
overpass = true

[[cities]]
name = "Pasadena, CA"
#@cite Citywide avg PCI 57, FY2026 Street Pavement & Maintenance Audit (cityofpasadena.net) [PCI not byte-verified]
#@cite     https://www.cityofpasadena.net/city-manager/wp-content/uploads/sites/2/2026-04-Street-Pavement-and-Maintenance-Audit.pdf (accessed 2026-06-14)
forecast.initial_pci = 57
#@cite $1.1M CDBG street resurfacing & ADA improvements, FY2026
#@cite     https://pasadenanow.com/main/local-affordable-housing-homeless-services-and-street-repairs-are-set-for-funding-review-funding-for-2026 (accessed 2026-06-14)
forecast.current_budget = 1100000.0
overpass = true

[[cities]]
name = "Long Beach, CA"
#@cite Citywide PCI 61, 2025 City Manager memo (longbeach.gov) [PCI not byte-verified]
#@cite     https://www.longbeach.gov/globalassets/city-manager/media-library/documents/memos-to-the-mayor-tabbed-file-list-folders/2025/august-1--2025---city-of-long-beach-updated-pavement-condition-index--pci--score (accessed 2026-06-14)
forecast.initial_pci = 61
#@cite $27.5M arterial + $18M residential street repairs = $45.5M, FY2025 completed
#@cite     https://www.longbeach.gov/globalassets/finance/media-library/documents/city-budget-and-finances/budget/budget-documents/fy-25-adopted-budget/32-public-works (accessed 2026-06-14)
forecast.current_budget = 45500000.0
overpass = true
hex_edge_m = 200  # second-largest LA-area city (~130 km²)

[[cities]]
name = "Glendale, CA"
#@cite Citywide PCI 58, Sept 2023 City Council PMP report
#@cite     https://www.glendalestar.com/news/article_f358ac62-5a5f-11ee-b646-27d066b51a60.html (accessed 2026-06-14)
forecast.initial_pci = 58
overpass = true

[[cities]]
name = "Burbank, CA"
#@cite Burbank citywide PCI, target 73 by FY2030/31 (2023)
#@cite     https://myburbank.com/burbank-announces-upcoming-street-repaving-road-repairs-zones/ (accessed 2026-06-14)
forecast.initial_pci = 67
#@cite Pavement Management Program annual budget, FY2023/24
#@cite     https://myburbank.com/burbank-announces-upcoming-street-repaving-road-repairs-zones/ (accessed 2026-06-14)
forecast.current_budget = 8000000.0
overpass = true

[[cities]]
name = "Inglewood, CA"
overpass = true

[[cities]]
name = "Torrance, CA"
overpass = true

Effective configuration (with defaults)

[grid]
  hex_edge_m = 125.0

[display]
  units = "imperial"
  min_hex_area = 100.0

[export]
  title = ""
  coordinate_decimals = 0

[forecast]
  initial_pci = 85.0
  decay_rate = 0.03
  growth_rate = 0.0
  years = 20

  [[forecast.cost_tiers]]
    min_pci = 0.0
    max_pci = 25.0
    cost_per_sqm = 200.0
    label = "Failed"

  [[forecast.cost_tiers]]
    min_pci = 25.0
    max_pci = 50.0
    cost_per_sqm = 120.0
    label = "Poor"

  [[forecast.cost_tiers]]
    min_pci = 50.0
    max_pci = 70.0
    cost_per_sqm = 60.0
    label = "Fair"

  [[forecast.cost_tiers]]
    min_pci = 70.0
    max_pci = 100.0
    cost_per_sqm = 15.0
    label = "Good"

[[cities]]
  name = "Los Angeles, CA"
  overpass = true
  arcgis_url = ""
  hex_edge_m = 300.0
  boundary_relation_id = 0
  allow_private_arcgis = false
  [cities.forecast]
    initial_pci = 71.0
    decay_rate = 0.0
    growth_rate = 0.0
    years = 0

[[cities]]
  name = "Santa Monica, CA"
  overpass = true
  arcgis_url = ""
  hex_edge_m = 0.0
  boundary_relation_id = 0
  allow_private_arcgis = false

[[cities]]
  name = "Pasadena, CA"
  overpass = true
  arcgis_url = ""
  hex_edge_m = 0.0
  boundary_relation_id = 0
  allow_private_arcgis = false
  [cities.forecast]
    initial_pci = 57.0
    decay_rate = 0.0
    growth_rate = 0.0
    years = 0
    current_budget = 1.1e+06

[[cities]]
  name = "Long Beach, CA"
  overpass = true
  arcgis_url = ""
  hex_edge_m = 200.0
  boundary_relation_id = 0
  allow_private_arcgis = false
  [cities.forecast]
    initial_pci = 61.0
    decay_rate = 0.0
    growth_rate = 0.0
    years = 0
    current_budget = 4.55e+07

[[cities]]
  name = "Glendale, CA"
  overpass = true
  arcgis_url = ""
  hex_edge_m = 0.0
  boundary_relation_id = 0
  allow_private_arcgis = false
  [cities.forecast]
    initial_pci = 58.0
    decay_rate = 0.0
    growth_rate = 0.0
    years = 0

[[cities]]
  name = "Burbank, CA"
  overpass = true
  arcgis_url = ""
  hex_edge_m = 0.0
  boundary_relation_id = 0
  allow_private_arcgis = false
  [cities.forecast]
    initial_pci = 67.0
    decay_rate = 0.0
    growth_rate = 0.0
    years = 0
    current_budget = 8e+06

[[cities]]
  name = "Inglewood, CA"
  overpass = true
  arcgis_url = ""
  hex_edge_m = 0.0
  boundary_relation_id = 0
  allow_private_arcgis = false

[[cities]]
  name = "Torrance, CA"
  overpass = true
  arcgis_url = ""
  hex_edge_m = 0.0
  boundary_relation_id = 0
  allow_private_arcgis = false

City Showdown

How does your city's pavement stack up?
Loading city data...

Region Rollup

The whole network as one fiscal entity — what does it cost to keep solvent?
Loading region data...