osm-transit-lines
Fetch public transit lines from OpenStreetMap for a given area (bounding box).
Installation
npm install osm-transit-lines
Usage
const osmTransitLines = // bounding box for Berlin (🇪🇺)const boundingBox = south: 523418234221 west: 130882097323 north: 526697240587 east: 137606105539 const options = logging: false // logs current request count to stderr when enabled wikidata: false // fetch claims for lines (not routes) that have a wikidata attribute into line.wikidataClaims // returns a Promise
Note that - depending on your bounding box - the request might take quite long, even some minutes. You should save/cache the result of this query for some time and refresh the data after some interval you deep appropriate (depending on how fast people might change line information on OSM 😜). Also, the request body is handled in-memory at the time, so the process might get killed if you query a giant bounding box and don't have enough memory.
The method returns a Promise that will resolve in a list of lines (that match route_master
relations in OSM) which in turn contain a list of routes (corresponding to normal route
relations in OSM) which in turn contain stopLocations, a list of coordinates representing the route's stops. All attributes except for id
, type
, stopLocations
and routes
are copied from OSM.
Note that this module additionally alters the data to enhance quality in the following ways:
- Creates an additional attribute
transitMode
which contains theroute_master
orroute
mode from OpenStreetMap (they represent the same data type but have different attribute names depending on if they're part of aroute
or aroute_master
) - Creates additional lines from
route
relations that don't have aroute_master
parent relation and inserts the same route as the only entry in that line'sroutes
attribute. - Harmonizes the some attributes (
network
,wikidata
,colour
,operator
,ref
,transitMode
) between lines and routes in the following ways:- Do all routes/line contain the same value or null for this attribute? -> Copy the value to all routes/line (effectively adding information for those that had
null
before) - Do all routes contain the same value or null, but the line has a different value? -> Copy the value to all routes (effectively adding information for those that had
null
before) and overwrite the current value in the line.
- Do all routes/line contain the same value or null for this attribute? -> Copy the value to all routes/line (effectively adding information for those that had
Example output for Berlin:
"colour": "#055A99" "id": 58424 "interval": "5" "name": "U-Bahnlinie U8" "network": "Verkehrsverbund Berlin-Brandenburg" "network:metro": "u-bahn" "operator": "Berliner Verkehrsbetriebe" "public_transport:version": "2" "ref": "U8" "route_master": "subway" "routes": "colour": "#055A99" "from": "S+U Hermannstraße" "id": 2679013 "interval": "5" "name": "U-Bahnlinie U8: S+U Hermannstraße => S+U Wittenau" "network": "Verkehrsverbund Berlin-Brandenburg" "network:metro": "u-bahn" "operator": "Berliner Verkehrsbetriebe" "public_transport:version": "2" "ref": "U8" "route": "subway" "stopLocations": "id": 4655299661 "latitude": 52467777 "longitude": 134312136 "type": "location" "id": 29494306 "latitude": 524729946 "longitude": 134284168 "type": "location" // … "to": "S+U Wittenau" "transitMode": "subway" "type": "route" "colour": "#055A99" "from": "S+U Wittenau" "id": 2679014 "interval": "5" "name": "U-Bahnlinie U8: S+U Wittenau => S+U Hermannstraße" "network": "Verkehrsverbund Berlin-Brandenburg" "network:metro": "u-bahn" "operator": "Berliner Verkehrsbetriebe" "public_transport:version": "2" "ref": "U8" "route": "subway" "stopLocations": "id": 4655218849 "latitude": 525879234 "longitude": 133258231 "type": "location" "id": 4655264250 "latitude": 525784067 "longitude": 133334638 "type": "location" // … "to": "S+U Hermannstraße" "transitMode": "subway" "type": "route" "wikidata": "Q99729" "transitMode": "subway" "type": "line" "wikidata": "Q99729" "wikidataClaims": "P154": "Berlin U8.svg" "P373": "U-Bahnlinie U8 (Berlin)" "P465": "00609E" // line color // … "wikipedia": "de:U-Bahn-Linie 8 (Berlin)"
Contributing
If you found a bug or want to propose a feature, feel free to visit the issues page.