Methodology and open questions
About the map
What the interactive map shows and where the data comes from. This page is a companion to the 3D explore map so a reader can check the sources, understand the assumptions, and see the open questions.
What the map shows
The explore map combines four data layers rendered in MapLibre GL JS:
- Proposed subway corridor: a polyline from Salesforce Transit Center, west along Geary Boulevard, south on 19th Avenue, to Daly City BART. The path follows the corridor described in the SFCTA Geary/19th Avenue Subway Study Update (Feb 2026). The line is illustrative and does not represent a final alignment.
- Existing rail and future extensions: BART, the Central Subway (T Third), the proposed Central Subway extension, DTX (The Portal), Link21, and Penn Ave Extension are drawn in for context. Each is sourced from publicly available agency project pages.
- Family Zoning Plan height districts: every parcel in San Francisco gets a base height (pre-FZP) and a Local Program height (post-FZP). The map renders the post-FZP heights as 3D extrusions, color-coded by the height bonus the FZP added.
- Likely-to-redevelop parcels: parcels with a non-trivial probability of redeveloping in the next 10 years are highlighted. The "Likely outcome (10-yr)" toggle reweights heights by this probability so the map shows the more realistic version of corridor change rather than the maximum allowed.
Where the data comes from
FZP heights
The height data is fetched directly from the San Francisco Planning Department's public ArcGIS REST endpoint:
https://sfplanninggis.org/arcgiswa/rest/services/PlanningData/MapServer (Layer 5: Height Districts)
That data was republished January 11, 2026, one day before the Family Zoning Plan took effect. Each height polygon is labeled in the form 40//65-R-4, where 40 is the pre-FZP base height in feet, 65 is the post-FZP Local Program height in feet, and R-4 is any applicable condition or overlay. The pre-FZP base height is recovered from that label format, not from a separate dataset, because SF Planning replaced the live dataset rather than versioning it.
The Python pipeline that fetches and processes the data is in this repository, in scripts/fetch_planning_layers.py and scripts/parse_heights.py. The fetch script requires no API key and runs against the public endpoint. Anyone can reproduce the data by running it.
Likely-to-redevelop parcels
Parcel boundaries and the 10-year redevelopment-probability score (pdev_10yr) come from kfarr/zoningviz, an open-source SF zoning data project by Kieran Farr, the creator of 3DStreet. Kieran reached out after our Family Zoning Plan piece on Fogline and shared the redevelopment-probability work he had built. Only parcels with pdev_10yr ≥ 0.05 (about 4,400 parcels citywide) are shown, on the principle that the goal is to surface where change is plausible, not where it is theoretically permitted but operationally unlikely.
Kieran has also produced a 3D walkthrough video showing how the Richmond District corridor might evolve over a 10-year window under the Family Zoning Plan, using the same probability-weighted heights that drive this map's "Likely outcome" toggle:
Corridor and transit lines
Subway corridor and rail-line coordinates were transcribed from SFCTA, BART, and TJPA project documents and refined against OpenStreetMap intersection nodes. The corridor polyline is approximate. Where the corridor follows Geary Boulevard, the line tracks the OSM centerline of Geary Boulevard. Where the corridor crosses major intersections, the line is anchored to verified OSM coordinates for those intersections. None of the line is a final engineered alignment because the project has not produced one.
What is still being decided
The map is a snapshot of corridor possibility, not an engineering document. Several things that matter to the actual subway are missing because they have not been decided.
The downtown alignment is not pinned down. The SFCTA Feb 2026 study update presents the eastern terminus as Salesforce Transit Center but does not commit to a specific path from the Tenderloin into that terminus. Whether the line enters via a direct surface-to-tunnel transition near Mission and Beale, or routes through the DTX corridor, or surfaces somewhere else, has not been published. The polyline on the map approximates a corridor centerline. The actual downtown alignment is one of the open questions that the Project Development phase, if authorized in June 2026, is meant to resolve.
The technology choice is not made. The Feb 2026 study presents three technology options: BART-compatible heavy rail (required for the 310,000-rider regional through-running scenario), Muni Metro / light rail, and automated metro (Vancouver-SkyTrain style). The technology decision constrains the alignment, the tunnel diameter, the station spacing, and the operating-cost profile. None of these are reflected in the map. The corridor is shown as a single illustrative line at whatever technology you imagine.
The Market Street tunnel is not shared. The existing BART/Muni four-track tunnel under Market Street is fully occupied. The Geary subway would require a separate downtown tunnel, regardless of the technology chosen. The map shows the existing BART/Muni lines for context but does not imply the Geary line would share any of them.
Source code and reproducibility
The map is built with MapLibre GL JS 4.7.1. The data pipeline (fetch from SF Planning ArcGIS, parse heights, simplify geometry, export web GeoJSON) is in the parent zoning repository at scripts/fetch_planning_layers.py, scripts/parse_heights.py, and scripts/make_3d_map.py. The parcel-likelihood data comes from Kieran Farr's kfarr/zoningviz.
If you find an error in the heights, the corridor, or any of the other layers, send a primary-source correction to hello@foglinesf.com and I will fix it.