Stops

Transitland represents each place a person may board or exit a transit vehicle as a Stop. Generally, these are imported from GTFS feeds, but Transitland also allows users to create Stops that are not associated with a Feed.

Stop data model

Each Transitland Stop has a unique onestop_id, such as s-9q9p1bbfkc-lakemerritt; the Onestop ID format includes an s prefix, a geohash encoding the approximate location, and a short identifier.

Basic Stop attributes include name, a simple name for the station that would be used on printed schedules, and timezone for the local timezone. The wheelchair_boarding attribute contains accessibility information: when true, the location is generally wheelchair accessible, when false it is known not to be accessible, and when null the accessibility is not known.

The geometry attribute may be either a single point or a polygon containing the station extent. In either case, the geometry_centroid attribute will always be a point that represents a single location. The centroid is set by 1) the geometry_reversegeo attribute if available 2) geometry if it is a point, or 3) the calculated centroid of geometry if it is a polygon. The location is also referenced by the osm_way_id attribute, which is the closest pedestrian-accessible OpenStreetMap way to the Stop. The osm_way_id is checked and updated periodically, approximately once every 48 hours, to reflect any changes to OpenStreetMap; last_conflated_at is the timestamp of the last check.

The Stops API also returns several relations to Operators and Routes for convenience. routes_serving_stop is an array of objects, one for each Route that visits the stop, and includes route_onestop_id and route_name as well as the operator_onestop_id and operator_name for the route’s operator. Similarly, operators_serving_stop includes the operator_onestop_id and operator_name for each Operator that serves the stop. served_by_vehicle_types is the aggregated vehicle_type of all the Routes that visit the stop.

Attribute Type Description
onestop_id Onestop ID Stop Onestop ID
geometry Geometry Stop geometry; can be point or polygon
name String Stop name
timezone String Stop timezone
osm_way_id Integer Conflated OSM way ID
last_conflated_at Datetime Timestamp of last time osm_way_id was checked
served_by_vehicle_types Array Vehicle types that visit this Stop
wheelchair_boarding Boolean Wheelchair accessible
geometry_reversegeo Geometry Alternate geometry; always a point
geometry_centroid Geometry Stop centroid; always a point
operators_serving_stop Object array Operators serving this Stop
routes_serving_stop Object array Routes serving this Stop
tags Object Tags

Stops API

Endpoint: /api/v1/stops

Standard entity query parameters:

Query parameter Type Description Example
onestop_id Onestop ID(s) Onestop ID Lake Merritt BART
lat Float Latitude Near a point
lon Float Longitude Near a point
r Float Radius (meters) for lat/lon Within 1km of a point
bbox Bounding box Bounding box: ymin, xmin, ymax, xmax Downtown Oakland
updated_since Datetime Entity has been modified since Updated in 2017
imported_from_feed Onestop ID Imported from Feed Imported from BART
imported_from_feed_version Feed Version Imported from Feed Version Imported from a specific BART version
imported_with_gtfs_id String(s) Associated with GTFS entity Imported from BART with GTFS ID “LAKE”
tag_key String Tag key Includes tag “stop_url”
tag_value String Tag value Tag “zone_id” is “1”
include String(s) Include in response: issues, geometry, imported_from_feeds Include Issues and import data
exclude String(s) Exclude from response: issues, geometry, imported_from_feeds Exclude geometry

Plus:

Query parameter Type Description Example
served_by Onestop ID(s) Served by Operator or Route Served by BART or AC Transit Line 1
served_by_vehicle_types String(s) Served by vehicle types SFMTA light rail stops
wheelchair_boarding Boolean Wheelchair accessible Accessible BART stations

Stop import process

When a new GTFS feed is imported, existing Transitland Stops are matched with GTFS stops.txt stops based on the GTFS stop_id used in the last import. If a match is found, the existing Transitland Stop is updated; if a match is not found, a new Transitland Stop is created.

Stations

Several Stops can be grouped together into a StopStation complex. A StopStation can have several StopPlatforms, each representing a platform where a transit vehicle can stop, and several StopEgresses, where pedestrians may enter or exit a station.

Stations data model

The StopStation, StopPlatforms and StopEgresses models are very similar to the plain Stop model.

The significant differences are that a StopStation will include nested StopPlatforms in stop_platforms and StopEgresses in stop_egresses. Additionally, the top-level StopStation will include operators_serving_stop_and_platforms, routes_serving_stop_and_platforms, and vehicle_types_serving_stop_and_platforms instead of the similarly named Stop relations.

A StopEgress includes an additional directionality attribute to note if a pedestrian can enter (street-to-station), exit (station-to-street), or both enter and exit the station. A StopEgress does not include operators_serving_stop and routes_serving_stop, since it is not visited by trips.

A StopPlatform does not include osm_way_id, last_conflated_at, or directionality, since it does not connect to the street network.

StopStations API

Endpoint: /api/v1/stop_stations

The StopStations endpoint has the same query parameters as the Stop endpoint, plus:

Query parameter Type Description Example
min_platforms Integer Minimum number of StopPlatforms At least 10 platforms
min_egresses Integer Minimum number of StopEgresses At least 1 egress

Generated platforms and egresses

By default, the StopStations endpoint will include a generated StopEgress or StopPlatform if none exist, using the values from the StopStation. Any generated entity will have a generated attribute with a value of true. This commonly happens when a regular Stop with no platforms or egresses defined is accessed through the StopStations endpoint. This behavior can be disabled by setting the exclude query parameter to generated.