A reproducible starting point for a defensible accessibility study.
A PRACTICAL RESEARCH APPLICATION
Related Open-Source Projects
This independent transit dashboard applies open government data to transportation accessibility research focused on Tampa and St. Petersburg. It complements two related projects maintained by the same developer.
A public data discovery platform that helps users find government-published datasets from municipalities and agencies across the Tampa Bay region. It was used to discover and verify the GIS listings documented on the data-sources page. St. Petersburg's municipal boundary matches a verified listing. Tampa's municipal boundary and the HART/PSTA GTFS archives were obtained independently; the listed HART GIS inventory is not used in the dashboard's stop counts.
An open-source R package for discovering and retrieving Tampa Bay government GIS data. It offers a complementary programmatic workflow for regional research. This dashboard's current ingestion and analysis use Python and direct publisher/archive requests; the R package was not used to retrieve or process these datasets.
Both projects help users discover data and tools. Original government publishers retain credit for their datasets. This dashboard is not affiliated with or endorsed by the City of Tampa, the City of St. Petersburg, HART, or PSTA.
PHASE 01 · IMPLEMENTED
What this dashboard measures
Stop proximity is the share of an official municipal polygon lying within 400, 800, or 1,200 metres of a GTFS boarding location. All stops in both regional feeds are considered, including stops outside city limits. Only municipal stops are counted and displayed in the inventory.
Download public GTFS archives and official municipal boundary geometries. Preserve retrieval times, checksums, and source schemas.
Validate stop IDs, coordinates, route and trip references, calendar presence, and boundary geometry. Select GTFS boarding locations, excluding parent stations and entrances.
Project boundaries and stops to NAD83 / UTM zone 17N (EPSG:26917), with distances in metres.
Buffer nearby stops, union overlapping areas, and intersect with each official municipal polygon. Divide by municipal polygon area, including water.
Export GeoJSON in WGS84 and CSV summaries. Display map geometries simplified to 3 metres; statistics use unsimplified geometry and 16 segments per buffer quadrant.
Proximity(r) = area(city ∩ union(stop buffers at r)) / area(city)
Combined-city percentages are area-weighted, using municipal area rounded to 0.01 km² and source percentages rounded to 0.01 percentage points. Map display uses a web basemap; no distance is calculated in Web Mercator.
What remains unknown
Proximity buffers do not represent walking routes or accessible sidewalks.
Area denominator includes water within official municipal boundaries; it is not land area or population coverage.
Stops are from archived schedules; active service on a selected date is not evaluated.
Network, population, jobs, destination, equity and reliability measures are unavailable.
Stops outside city limits are retained for buffer analysis; dashboard stop counts report municipal locations only.
Missing measures are unavailable, never zero. The MVP makes no claims about accessible sidewalks, observed reliability, service frequency, residents served, or causes of geographic differences.
VALIDATION RECORD
Archive checks and reproducibility
HART
HART-google_transit-9-30-2026.zip
2,246 feed stop records · 32 routes · 6,307 trips · 207,008 stop-time records.
Calendar envelope: 20260816–20270102. This is not a guarantee of service on every date. Calendar exceptions have not been applied to an active-service query.
Structural checks only. No time-dependent routing, active-service or observed reliability claims.
PSTA
PSTA-google_transit-9-30-2026.zip
4,016 feed stop records · 43 routes · 15,193 trips · 878,579 stop-time records.
Calendar envelope: 20260607–20270605. This is not a guarantee of service on every date. Calendar exceptions have not been applied to an active-service query.
Structural checks only. No time-dependent routing, active-service or observed reliability claims.
Bundle generated 11/15/2026, 3:20:05 AM Eastern. Retrieval timestamps and source hashes appear in Data & sources. Structural validation is a preliminary check, not a full GTFS validator or journey validation.
Reproduce locally
python -m venv .venv
# Activate the virtual environment
python -m pip install -r requirements.txt
python -m pipeline.build
python -m pytest
npm ci
npm test
npm run build
RESEARCH ROADMAP · NOT YET COMPUTED
From proximity to opportunity
Phase 2: validate an OpenStreetMap pedestrian graph, connect stops and origins, integrate OpenTripPlanner or R5 with full regional GTFS, and sample multiple departures on weekday and weekend service dates. Apply calendars and exceptions and check journeys against published timetables.
Aᵢ(T) = Σⱼ Oⱼ × I(tᵢⱼ ≤ T)
Travel times must include walking, waiting, transfers, and in-vehicle time. Test walking speeds and 15, 30, 45, and 60 minute thresholds. Classify failed routing separately from unreachable destinations.
Phase 3: integrate ACS estimates and margins of error, Census geography, LODES jobs, and validated essential destinations. Use within-city origin populations, document boundary allocation, and calculate population-weighted distributions and Gini coefficients.
Phase 4: compare documented frequency, stop, and pedestrian-connection scenarios against a fixed baseline. Report assumptions and uncertainty without causal claims.