Skip to main content
Methodology

How the fact sheets are built

A routable multimodal transportation network for Alaska — roads, local transit, intercity bus, ferry, and scheduled regional air service — is combined with U.S. Census demographics to produce one fact sheet per Alaska census place (314 communities). Every analysis runs against the same graph; numbers shown on each fact sheet trace back to the eleven-analysis pipeline below.

Map of Alaska showing scheduled flight routes (curved colored lines) operated by Grant Aviation between Bethel-area hub airports and the Aleutian chain — illustrating one of the 27 GTFS feeds woven into the routable multimodal network.
One of 15 air-carrier GTFS feeds in the routable network: Grant Aviation route fan

The routable multimodal network

The project is anchored on a single OpenTripPlanner (OTP) graph that fuses three OpenStreetMap road extracts (Alaska, Yukon, and a clipped portion of British Columbia covering the Alaska Highway corridor) with twenty-seven GTFS feeds — fifteen regional air carriers, ten intercity and local bus operators, and two ferry systems. Origins snap to the road-network centroid of each census place; a single multimodal graph means CAR-only and WALK + transit + air + ferry itineraries are evaluated against the same network on the same query.

From input data to community fact sheets A flow diagram showing OpenStreetMap extracts, GTFS feeds, Census ACS data, and destination layers feeding into an OpenTripPlanner graph; the graph is queried by eleven per-community accessibility analyses whose outputs are consolidated into one CSV that drives the fact sheets and the statewide dashboard. INPUT LAYERS OSM extracts AK + YT + BC clip 27 GTFS feeds 15 air, 10 bus, 2 ferry Census ACS 2020–2024, 314 places Destination layers hospitals, stores, schools OpenTripPlanner multimodal graph 11 PER-COMMUNITY ANALYSES • Service frequency • Road access • Hospital access (OTP) • Food access (3 SNAP tiers) • Local schools • Schools by route (OTP) • Infrastructure proximity • Port access (USACE docks) • Waterway network • Winter trail / ice road • Travel-shed reachability combined analysis results.csv 314 rows × 223 cols 314 community fact sheets Statewide dashboard
Inputs to the OTP graph, the per-community analyses, and the consolidated CSV that drives the fact sheets and the dashboard.

Engine details

OTP version
2.8.1 (jar) / 2.9.0 (Docker)
Time zone
America/Anchorage
Search window
24 h, dynamic per community (1 h–5 d)
Airplane board slack
30 min board · 20 min alight
Walk speed
1.4 m/s (reluctance 4.0)
Max journey duration
7 days
Reference depart time
08:00, Mon 2026-01-05
Service-frequency week
Mon 2026-01-05 → Sun 2026-01-11

Trip cost model

Itineraries are evaluated by both travel time and estimated trip cost. Each leg's cost is computed from the per-mode rate table; the itinerary cost is the sum across legs. Costs are illustrative — actual fares vary by carrier, service tier, and discounting — but they preserve the relative magnitudes that matter for an accessibility comparison.

ModeBase cost / legPer-mile cost
Walk$0$0
Bus$2$0
Car$0$0.70
Ferry$0$1.00
Airplane$115$1.60
Anatomy of a multimodal trip A worked example of an OpenTripPlanner itinerary from Bethel to Anchorage's nearest hospital. Three legs are shown: a short walk to the airport, a flight to Anchorage, and a car ride to the hospital. Each leg lists distance, time, and cost; a total appears underneath. EXAMPLE: BETHEL TO ANCHORAGE HOSPITAL Origin centroid • flight • drive to facility Bethel LEG 1 · WALK Centroid to BET airport ~1 km · 12 min $0.00 LEG 2 · AIRPLANE BET to ANC (~400 mi) ~1 hr 15 min flight + 30 min boarding $115 + 400 × $1.60 = $755 LEG 3 · CAR ANC airport to hospital ~5 km · 5 min 3.1 mi × $0.70 = $2.17 + Hospital TRIP TOTAL ~1 hr 47 min · $757.17 Sum of leg costs from the per-mode rate table
A worked example: every fact-sheet trip-cost figure decomposes into legs like these.

The accessibility analyses

Eleven analyses produce the fields shown on each community fact sheet and on the statewide dashboard. Each is reproducible from the scripts in the project repo; the full consolidated dataset is published on AGOL — see the hosted feature layer for the joined CSV, GeoJSON, and shapefile.

Analysis 01Service Frequency

Counts how many scheduled flights, ferry sailings, and intercity bus trips serve each community in a representative week. Captures whether service is daily, weekly, or seasonal — the underlying signal for transit dependence and air-only access.

Method & output columns

Method

  1. For each Alaska census place, query OTP for transit stops within 25 km (intercity carriers) and 8 km (local transit).
  2. Count scheduled departures for every day of the reference week (Mon Jan 5 – Sun Jan 11, 2026) using stoptimesForServiceDate.
  3. Aggregate by mode: total flights / sailings / bus trips per week, plus per-day breakdowns and per-carrier counts.
  4. AIRPLANE-mode departures are credited if the airport is within range or reachable by car within 90 min (regional airports).

Output columns

  • total_flights_per_week, total_sailings_per_week, total_bus_trips_per_week
  • num_air_carriers, num_ferry_services, num_bus_services + name lists
  • Per-day counts: flights_monflights_sun, sailings_monsailings_sun
  • max_flight_gap_hours — longest scheduled gap between flights

Analysis 02Road Access

Determines whether a community is connected to Alaska's mainland road network. Communities not on the network get a straight-line distance to the nearest mainland road segment.

Method & output columns

Method

  1. Build a NetworkX graph from all OSM road segments in Alaska.
  2. Identify connected components that contain Anchorage or nodes adjacent to the Alaska–Canada border (handles Haines / Skagway).
  3. Buffer the mainland component by 5 km; communities falling within the buffer have road access. Off-network places report straight-line distance to the nearest mainland road.

Output columns

  • has_road_access — boolean
  • dist_to_mainland_road_km — for off-network places

Analysis 03Hospital Access

Travel time, cost, and best-available mode to the nearest hospital by multimodal routing. Used to bucket each community into access tiers (under 1 hour / 1–4 hours / over 4 hours / unreachable).

Method & output columns

Method

  1. Pre-filter to the 10 nearest hospitals by Haversine distance.
  2. Issue a batched OTP GraphQL request — one CAR plan and one TRANSIT (WALK + transit + air + ferry) plan to each candidate.
  3. Pick the option with the shortest total travel time across both modes.
  4. Cost = sum over legs of the per-mode rate from the cost model.
  5. For air-dependent communities, the transit search window is dynamically extended to cover the longest gap between scheduled flights.

Output columns

  • Nearest hospital name, city
  • Best Travel Time (min), Best Mode, Best Trip Cost ($)
  • Car-route detail (time, distance, cost) and transit detail (time, cost, route summary)
  • Access tier label: 🟢 < 1 h · 🟡 1–4 h · 🔴 > 4 h · ⚪ Unreachable

Analysis 04Food Access

Travel time, cost, and best mode to the nearest grocery options at three tiers — bulk food, grocery stores, and general stores — so a community's tier-by-tier proximity to fresh, packaged, and convenience food is visible at a glance.

Method & output columns

Method

  1. Three SNAP-retailer tiers: T1 Bulk Food (warehouse clubs) · T2 Grocery Store · T3 General Store (all other SNAP retailers).
  2. For each tier and each community, pre-filter to the 10 nearest stores by Haversine distance.
  3. Run the same batched CAR + TRANSIT OTP routing as the hospital analysis.
  4. Pick the shortest-time itinerary per tier; report mode and cost.
  5. The fact sheet renders a small Subsistence callout, tiered on subsistence_per_capita_lbs: nothing below 150 lbs/person, otherwise “contributing” (≥ 150), “major” (≥ 300), or “primary” (≥ 500) local food source.

Output columns

  • Per tier: store name, store city, store type
  • Per tier: best travel time, best mode, best cost, transit route summary

Analysis 05Education Access — Local Schools

Identifies which communities have a primary or secondary school physically inside their boundary. Captures "is there a school here?" before the routing analysis answers "how far away is the nearest one?"

Method & output columns

Method

  1. Spatial join: each school is assigned to the census place whose polygon contains it (no buffer). Enrollment and grade span come from Alaska DEED; per-campus coordinates come from NCES EDGE Public School Locations (2023–24), because the DEED file geocodes every school to its community centroid.
  2. Primary (K-5) vs. secondary (6-12) classification is based on which grade-level enrollment fields are non-zero.
  3. Counts and total enrollment are summed per community.

Output columns

  • has_primary_school, num_primary_schools, primary_school_names, total_primary_enrollment
  • has_secondary_school, num_secondary_schools, secondary_school_names, total_secondary_enrollment
  • num_schools, school_names, total_enrollment_k12

Analysis 06Education Access — Routing

Travel time and cost to the nearest primary, secondary, and post-secondary institution by multimodal routing. Also flags whether a school of each tier is reachable within 30 minutes — a useful shorthand for communities where the school is in town vs. across a bay.

Method & output columns

Method

  1. Same 10-candidate Haversine pre-filter and batched OTP routing pattern as the hospital and food analyses, repeated for primary, secondary, and post-secondary institutions.
  2. Count institutions whose travel time is ≤ 30 min — surfaced on the fact sheet as N school(s) within 30 min.

Output columns

  • Per tier: school name, city
  • Per tier: best travel time, mode, cost, transit route summary
  • Primary_Within_30min, Secondary_Within_30min, Postsecondary_Within_30min

Analysis 07Transportation Infrastructure

Flags whether each community is near specific transportation features — public trails, ferry terminals, ports & harbors, USACE docks, railroad stations — using a 25 km nearest-feature threshold.

Method & output columns

Method

  1. Download DCCED Community Information Database (CID) layers and cache locally.
  2. Reproject everything to Alaska Albers Equal Area (EPSG:3338) for accurate distance.
  3. For each census place, find the nearest feature in each layer and flag the community as having that infrastructure if it is within 25 km.

Output columns

  • has_trail, nearest_trail_name, trail_distance_km
  • has_ferry_terminal, ferry_terminal_name, ferry_terminal_distance_km
  • has_port_harbor, port_harbor_name, port_harbor_distance_km
  • has_dock, dock_name, dock_distance_km
  • has_railroad_station, railroad_station_name, railroad_station_distance_km

Analysis 08Port Access (USACE Docks)

Indicates whether dock/harbor facilities are present near a community, from the U.S. Army Corps of Engineers national dock layer. Because that national layer over-counts minor and natural features and can mis-locate or mislabel small rural facilities, the fact sheet presents only presence (one vs. multiple) rather than a precise count or a specific named dock (AML review decision, 2026-06).

Method & output columns

Method

  1. Fetch USACE dock features filtered to STATE='AK' AND FAC_TYPE='Dock'.
  2. Buffer each census place polygon by 15 km in EPSG:3338.
  3. Count docks falling within each buffer; the fact sheet displays this as presence (one / multiple), not the raw count.

Output columns

  • dock_count — integer
  • dock_availability — None / One / Multiple

Analysis 09National Waterway Network Access

Whether a community sits within 15 km of a USACE-designated navigable waterway — capturing river-and-coastal connectivity for freight and barge service.

Waterway access is based on the USACE National Waterway Network, which maps federally navigable channels used for barge and freight service. It does not include the many smaller rivers, sloughs, and coastal waters that communities rely on for boat and skiff travel. The absence of a mapped navigable waterway does not mean a community lacks water-based transportation.

Method & output columns

Method

  1. Fetch the National Waterway Network feature service (Alaska segments).
  2. Buffer each census place polygon by 15 km.
  3. Count intersecting waterway segments; flag communities with at least one.

Output columns

  • has_waterway_access — boolean
  • waterway_segment_count — count of NWN segments within 15 km

Analysis 10Winter Trail & Ice-Road Access

For Alaska's road-disconnected interior, winter trails and ice roads are real infrastructure. This analysis builds a graph of trail-connected communities and reports each community's nearest trail neighbours.

Method & output columns

Method

  1. Combine trail line layers (NWAB winter trails + Iditarod) into a single multi-line layer.
  2. Merge nearby same-named segments (2 km endpoint clustering, MST connectors), reducing 285 raw segments to 103 logical trails.
  3. Snap communities to the trail network at a 2.5 km threshold using Census Bureau interior points.
  4. Build a graph with intersection nodes added where trails cross; Dijkstra finds shortest network distance between trail-connected pairs.
  5. Layer DCRA Community Transportation Overview narratives on top — winter trail / ice road / snowmachine flags + descriptive text.

Output columns

  • has_winter_trail, has_ice_road
  • winter_dcra_narrative (long-form description)
  • winter_trail_access_text (summary of nearest trail-connected neighbours)

Analysis 11Travel-Shed Population Access

How many Alaskans are reachable from each community within one and four hours, using the best mode available. Captures the practical size of a community's day-trip and overnight-trip catchment.

Method & output columns

Method

  1. Pre-filter destinations by Haversine distance — anything beyond 1,500 km is unreachable inside 4 h on this graph.
  2. For each (origin, destination) pair, query OTP twice in a batched GraphQL request — one CAR plan and one TRANSIT plan, 40 destinations per request (80 plan calls).
  3. Pick the shorter duration per destination; depart 08:00 Mon 2026-01-05.
  4. Include the origin itself (0 min trivially).
  5. Sum ACS population for destinations under 1 h and under 4 h; count distinct communities reached.

Output columns

  • pop_within_1h, pop_within_4h — total Alaskans reachable
  • communities_within_1h, communities_within_4h — count of communities reached

Reference frame & reproducibility

Routing queries depart at 08:00 Alaska time on Monday, January 5, 2026. Service-frequency counts span the full week Mon Jan 5 – Sun Jan 11, 2026. Air-dependent communities use a per-community search-window extension sized to that community's longest scheduled flight gap, so OTP can find the next departure even on routes that fly only twice a week.