@stiava/cta 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1 @@
1
+ MIT
package/README.md ADDED
@@ -0,0 +1,147 @@
1
+ # @jeremystiava/cta
2
+
3
+ A modern TypeScript client for the **Chicago Transit Authority (CTA)** Bus Tracker and Train Tracker APIs.
4
+
5
+ Designed for Node.js, Next.js, and modern JavaScript applications, this package provides a simple, strongly typed interface for accessing real-time CTA transit data.
6
+
7
+ ---
8
+
9
+ ## Features
10
+
11
+ - 🚆 Real-time train arrival predictions
12
+ - 🚌 Real-time bus arrival predictions
13
+ - 📍 Retrieve bus routes and stops
14
+ - 🚉 Retrieve train stations
15
+ - 📡 Simple Promise-based API
16
+ - 📝 Full TypeScript support
17
+ - ⚡ Lightweight with zero runtime dependencies
18
+ - 🌐 Works in Node.js and modern web frameworks
19
+
20
+ ---
21
+
22
+ ## Installation
23
+
24
+ ```bash
25
+ npm install @jeremystiava/cta
26
+ ```
27
+
28
+ ---
29
+
30
+ ## Getting Started
31
+
32
+ ```ts
33
+ import { CTA } from "@jeremystiava/cta";
34
+
35
+ // Use the CTA apis.
36
+ const cta_buses = new CTABusService(process.env.CTA_BUS_API_KEY!);
37
+ const cta_trains = new CTATrainService(process.env.CTA_TRAIN_API_KEY!);
38
+
39
+
40
+
41
+
42
+ ```
43
+
44
+ ---
45
+
46
+ ## Train Arrivals
47
+
48
+ ```ts
49
+ const arrivals = await cta.train.getArrivals({
50
+ stationId: "40380",
51
+ });
52
+
53
+ console.log(arrivals);
54
+ ```
55
+
56
+ ---
57
+
58
+ ## Bus Arrivals
59
+
60
+ ```ts
61
+ const arrivals = await cta.bus.getPredictions({
62
+ stopId: "14787",
63
+ });
64
+
65
+ console.log(arrivals);
66
+ ```
67
+
68
+ ---
69
+
70
+ ## Find Stops
71
+
72
+ ```ts
73
+ const stops = await cta.bus.getStops({
74
+ route: "22",
75
+ });
76
+ ```
77
+
78
+ ---
79
+
80
+ ## Find Train Stations
81
+
82
+ ```ts
83
+ const stations = await cta.train.getStations();
84
+ ```
85
+
86
+ ---
87
+
88
+ ## API Keys
89
+
90
+ The CTA APIs require developer API keys.
91
+
92
+ You can request free API keys from the Chicago Transit Authority Developer Center.
93
+
94
+ Once obtained, provide your keys when creating the client.
95
+
96
+ ---
97
+
98
+ ## TypeScript
99
+
100
+ This package is written entirely in TypeScript and ships with complete type definitions.
101
+
102
+ ```ts
103
+ import type {
104
+ TrainArrival,
105
+ BusPrediction,
106
+ } from "@jeremystiava/cta";
107
+ ```
108
+
109
+ ---
110
+
111
+ ## Framework Support
112
+
113
+ Works with:
114
+
115
+ - Node.js
116
+ - Next.js
117
+ - React
118
+ - Express
119
+ - NestJS
120
+ - Bun
121
+ - Deno (via npm compatibility)
122
+
123
+ ---
124
+
125
+ ## Roadmap
126
+
127
+ - [ ] Route planning
128
+ - [ ] Service alerts
129
+ - [ ] Vehicle tracking
130
+ - [ ] GTFS static data helpers
131
+ - [ ] Automatic retry/backoff
132
+ - [ ] Built-in caching
133
+ - [ ] Rate limit handling
134
+
135
+ ---
136
+
137
+ ## Contributing
138
+
139
+ Contributions, issues, and feature requests are welcome.
140
+
141
+ If you'd like to contribute, please open an issue or submit a pull request.
142
+
143
+ ---
144
+
145
+ ## License
146
+
147
+ MIT © Jeremy Stiava
package/dist/cta.d.ts ADDED
@@ -0,0 +1,72 @@
1
+ export type RouteServiceDirectionsResponse = {
2
+ "bustime-response": {
3
+ directions: {
4
+ id: string;
5
+ name: string;
6
+ };
7
+ };
8
+ };
9
+ export type CTATrain = {
10
+ rn: string;
11
+ destSt: string;
12
+ destNm: string;
13
+ trDr: string;
14
+ nextStaId: string;
15
+ nextStpId: string;
16
+ nextStaNm: string;
17
+ prdt: Date;
18
+ arrT: Date;
19
+ isApp: string;
20
+ isDly: string;
21
+ flags: null;
22
+ lat: string;
23
+ lon: string;
24
+ heading: string;
25
+ };
26
+ export type TrainRouteLocationsResponse = {
27
+ ctatt: {
28
+ tmst: Date;
29
+ errCd: number;
30
+ errNum: null;
31
+ route: {
32
+ "@name": string;
33
+ train: CTATrain[];
34
+ }[];
35
+ };
36
+ };
37
+ export type CTATrainRoutes = 'red' | 'blue' | 'brn' | 'g' | 'org' | 'p' | 'pink' | 'y' | 'pexp';
38
+ export declare class CTATrainOpenApi {
39
+ apiKey: string;
40
+ constructor(apiKey: string);
41
+ buildQuery(params: any): string;
42
+ getStationArrivalPredictions(params: {
43
+ stationId: string;
44
+ }): Promise<any>;
45
+ getStopArrivalPredictions(params: {
46
+ stopId: string;
47
+ }): Promise<any>;
48
+ getTrainLocationsByRoute(routeId: CTATrainRoutes): Promise<TrainRouteLocationsResponse>;
49
+ getTrainArrivalPredictions(trainId: string): Promise<any>;
50
+ }
51
+ export declare class CTABusOpenApi {
52
+ apiKey: string;
53
+ constructor(apiKey: string);
54
+ buildQuery(params: any): string;
55
+ getAllBusRoutes(): Promise<any>;
56
+ getRouteServiceDirections(routeId: string): Promise<RouteServiceDirectionsResponse>;
57
+ getBusStops(params: {
58
+ routeId: string;
59
+ direction: string;
60
+ }): Promise<any>;
61
+ getRoutePoints(params: {
62
+ routeId: string;
63
+ }): Promise<any>;
64
+ getRouteStopPredictions(params: {
65
+ routeId: string;
66
+ stopId: string;
67
+ }): Promise<any>;
68
+ getVehiclePredictions(params: {
69
+ routeId: string;
70
+ vehicleId: string;
71
+ }): Promise<any>;
72
+ }
@@ -0,0 +1,73 @@
1
+ type RouteServiceDirectionsResponse = {
2
+ "bustime-response": {
3
+ directions: {
4
+ id: string;
5
+ name: string;
6
+ };
7
+ };
8
+ };
9
+ type CTATrain = {
10
+ rn: string;
11
+ destSt: string;
12
+ destNm: string;
13
+ trDr: string;
14
+ nextStaId: string;
15
+ nextStpId: string;
16
+ nextStaNm: string;
17
+ prdt: Date;
18
+ arrT: Date;
19
+ isApp: string;
20
+ isDly: string;
21
+ flags: null;
22
+ lat: string;
23
+ lon: string;
24
+ heading: string;
25
+ };
26
+ type TrainRouteLocationsResponse = {
27
+ ctatt: {
28
+ tmst: Date;
29
+ errCd: number;
30
+ errNum: null;
31
+ route: {
32
+ "@name": string;
33
+ train: CTATrain[];
34
+ }[];
35
+ };
36
+ };
37
+ export type CTATrainRoutesOptions = 'red' | 'blue' | 'brn' | 'g' | 'org' | 'p' | 'pink' | 'y' | 'pexp';
38
+ export declare class CTATrainService {
39
+ apiKey: string;
40
+ constructor(apiKey: string);
41
+ buildQuery(params: any): string;
42
+ getStationArrivalPredictions(params: {
43
+ stationId: string;
44
+ }): Promise<any>;
45
+ getStopArrivalPredictions(params: {
46
+ stopId: string;
47
+ }): Promise<any>;
48
+ getTrainLocationsByRoute(routeId: CTATrainRoutesOptions): Promise<TrainRouteLocationsResponse>;
49
+ getTrainArrivalPredictions(trainId: string): Promise<any>;
50
+ }
51
+ export declare class CTABusService {
52
+ apiKey: string;
53
+ constructor(apiKey: string);
54
+ buildQuery(params: any): string;
55
+ getAllBusRoutes(): Promise<any>;
56
+ getRouteServiceDirections(routeId: string): Promise<RouteServiceDirectionsResponse>;
57
+ getBusStops(params: {
58
+ routeId: string;
59
+ direction: string;
60
+ }): Promise<any>;
61
+ getRoutePoints(params: {
62
+ routeId: string;
63
+ }): Promise<any>;
64
+ getRouteStopPredictions(params: {
65
+ routeId: string;
66
+ stopId: string;
67
+ }): Promise<any>;
68
+ getVehiclePredictions(params: {
69
+ routeId: string;
70
+ vehicleId: string;
71
+ }): Promise<any>;
72
+ }
73
+ export {};
@@ -0,0 +1,19 @@
1
+ export type CTATrainStopRaw = {
2
+ stop_id: string;
3
+ naive_station_name: string;
4
+ name: string;
5
+ inbound_sequence: number;
6
+ lines: string;
7
+ segment: string;
8
+ station_type: string;
9
+ is_accessible: boolean;
10
+ is_transfer: boolean;
11
+ is_parking: boolean;
12
+ parking_capacity: number;
13
+ platforms: string;
14
+ connected_buses: boolean;
15
+ stop_lat: string;
16
+ stop_lon: string;
17
+ location_type: string;
18
+ parent_station: string;
19
+ };
package/dist/index.cjs ADDED
@@ -0,0 +1,154 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // index.ts
30
+ var index_exports = {};
31
+ __export(index_exports, {
32
+ CTABusService: () => CTABusService,
33
+ CTATrainService: () => CTATrainService
34
+ });
35
+ module.exports = __toCommonJS(index_exports);
36
+
37
+ // cta_open_api.ts
38
+ var CTA_BUS_BASE_URL = "https://www.ctabustracker.com";
39
+ var CTATrainService = class {
40
+ apiKey;
41
+ constructor(apiKey) {
42
+ this.apiKey = apiKey;
43
+ }
44
+ buildQuery(params) {
45
+ return new URLSearchParams(
46
+ Object.entries({
47
+ ...params,
48
+ key: this.apiKey
49
+ }).map(([k, v]) => [k, String(v)])
50
+ ).toString();
51
+ }
52
+ async getStationArrivalPredictions(params) {
53
+ const BASE_URL = "https://lapi.transitchicago.com/api/1.0/ttarrivals.aspx";
54
+ const query = this.buildQuery({
55
+ mapid: params.stationId,
56
+ outputType: "json"
57
+ });
58
+ return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
59
+ }
60
+ async getStopArrivalPredictions(params) {
61
+ const BASE_URL = "https://lapi.transitchicago.com/api/1.0/ttarrivals.aspx";
62
+ const query = this.buildQuery({
63
+ stpid: params.stopId,
64
+ outputType: "json"
65
+ });
66
+ return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
67
+ }
68
+ async getTrainLocationsByRoute(routeId) {
69
+ const BASE_URL = "https://lapi.transitchicago.com/api/1.0/ttpositions.aspx";
70
+ const query = this.buildQuery({
71
+ rt: routeId,
72
+ outputType: "json"
73
+ });
74
+ return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
75
+ }
76
+ async getTrainArrivalPredictions(trainId) {
77
+ const BASE_URL = "lapi.transitchicago.com/api/1.0/ttfollow.aspx";
78
+ const query = this.buildQuery({
79
+ runnumber: trainId,
80
+ outputType: "json"
81
+ });
82
+ return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
83
+ }
84
+ };
85
+ var CTABusService = class {
86
+ apiKey;
87
+ constructor(apiKey) {
88
+ this.apiKey = apiKey;
89
+ }
90
+ buildQuery(params) {
91
+ return new URLSearchParams(
92
+ Object.entries({
93
+ ...params,
94
+ key: this.apiKey
95
+ }).map(([k, v]) => [k, String(v)])
96
+ ).toString();
97
+ }
98
+ async getAllBusRoutes() {
99
+ const query = this.buildQuery({
100
+ format: "json"
101
+ });
102
+ return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getroutes?${query}`).then((res) => res.json()).then((data) => data);
103
+ }
104
+ async getRouteServiceDirections(routeId) {
105
+ const query = this.buildQuery({
106
+ rt: routeId,
107
+ format: "json"
108
+ });
109
+ return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getdirections?${query}`).then((res) => res.json()).then((data) => data);
110
+ }
111
+ async getBusStops(params) {
112
+ const query = this.buildQuery({
113
+ rt: params.routeId,
114
+ dir: params.direction,
115
+ format: "json"
116
+ });
117
+ return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getstops?${query}`).then((res) => res.json()).then((data) => data);
118
+ }
119
+ async getRoutePoints(params) {
120
+ const query = this.buildQuery({
121
+ rt: params.routeId,
122
+ format: "json"
123
+ });
124
+ return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getpatterns?${query}`).then((res) => res.json()).then((data) => data);
125
+ }
126
+ async getRouteStopPredictions(params) {
127
+ const query = this.buildQuery({
128
+ rt: params.routeId,
129
+ stpid: params.stopId,
130
+ top: 50,
131
+ tmres: "s",
132
+ format: "json"
133
+ });
134
+ return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getpredictions?${query}`).then((res) => res.json()).then((data) => data);
135
+ }
136
+ async getVehiclePredictions(params) {
137
+ const query = this.buildQuery({
138
+ rt: params.routeId,
139
+ vid: params.vehicleId,
140
+ top: 50,
141
+ tmres: "s",
142
+ format: "json"
143
+ });
144
+ return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getpredictions?${query}`).then((res) => res.json()).then((data) => data);
145
+ }
146
+ };
147
+
148
+ // cta_system_data.ts
149
+ var Papa = __toESM(require("papaparse"), 1);
150
+ // Annotate the CommonJS export names for ESM import in node:
151
+ 0 && (module.exports = {
152
+ CTABusService,
153
+ CTATrainService
154
+ });
@@ -0,0 +1,2 @@
1
+ export * from './cta_open_api';
2
+ export * from './cta_system_data';
package/dist/index.js ADDED
@@ -0,0 +1,117 @@
1
+ // cta_open_api.ts
2
+ var CTA_BUS_BASE_URL = "https://www.ctabustracker.com";
3
+ var CTATrainService = class {
4
+ apiKey;
5
+ constructor(apiKey) {
6
+ this.apiKey = apiKey;
7
+ }
8
+ buildQuery(params) {
9
+ return new URLSearchParams(
10
+ Object.entries({
11
+ ...params,
12
+ key: this.apiKey
13
+ }).map(([k, v]) => [k, String(v)])
14
+ ).toString();
15
+ }
16
+ async getStationArrivalPredictions(params) {
17
+ const BASE_URL = "https://lapi.transitchicago.com/api/1.0/ttarrivals.aspx";
18
+ const query = this.buildQuery({
19
+ mapid: params.stationId,
20
+ outputType: "json"
21
+ });
22
+ return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
23
+ }
24
+ async getStopArrivalPredictions(params) {
25
+ const BASE_URL = "https://lapi.transitchicago.com/api/1.0/ttarrivals.aspx";
26
+ const query = this.buildQuery({
27
+ stpid: params.stopId,
28
+ outputType: "json"
29
+ });
30
+ return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
31
+ }
32
+ async getTrainLocationsByRoute(routeId) {
33
+ const BASE_URL = "https://lapi.transitchicago.com/api/1.0/ttpositions.aspx";
34
+ const query = this.buildQuery({
35
+ rt: routeId,
36
+ outputType: "json"
37
+ });
38
+ return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
39
+ }
40
+ async getTrainArrivalPredictions(trainId) {
41
+ const BASE_URL = "lapi.transitchicago.com/api/1.0/ttfollow.aspx";
42
+ const query = this.buildQuery({
43
+ runnumber: trainId,
44
+ outputType: "json"
45
+ });
46
+ return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
47
+ }
48
+ };
49
+ var CTABusService = class {
50
+ apiKey;
51
+ constructor(apiKey) {
52
+ this.apiKey = apiKey;
53
+ }
54
+ buildQuery(params) {
55
+ return new URLSearchParams(
56
+ Object.entries({
57
+ ...params,
58
+ key: this.apiKey
59
+ }).map(([k, v]) => [k, String(v)])
60
+ ).toString();
61
+ }
62
+ async getAllBusRoutes() {
63
+ const query = this.buildQuery({
64
+ format: "json"
65
+ });
66
+ return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getroutes?${query}`).then((res) => res.json()).then((data) => data);
67
+ }
68
+ async getRouteServiceDirections(routeId) {
69
+ const query = this.buildQuery({
70
+ rt: routeId,
71
+ format: "json"
72
+ });
73
+ return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getdirections?${query}`).then((res) => res.json()).then((data) => data);
74
+ }
75
+ async getBusStops(params) {
76
+ const query = this.buildQuery({
77
+ rt: params.routeId,
78
+ dir: params.direction,
79
+ format: "json"
80
+ });
81
+ return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getstops?${query}`).then((res) => res.json()).then((data) => data);
82
+ }
83
+ async getRoutePoints(params) {
84
+ const query = this.buildQuery({
85
+ rt: params.routeId,
86
+ format: "json"
87
+ });
88
+ return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getpatterns?${query}`).then((res) => res.json()).then((data) => data);
89
+ }
90
+ async getRouteStopPredictions(params) {
91
+ const query = this.buildQuery({
92
+ rt: params.routeId,
93
+ stpid: params.stopId,
94
+ top: 50,
95
+ tmres: "s",
96
+ format: "json"
97
+ });
98
+ return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getpredictions?${query}`).then((res) => res.json()).then((data) => data);
99
+ }
100
+ async getVehiclePredictions(params) {
101
+ const query = this.buildQuery({
102
+ rt: params.routeId,
103
+ vid: params.vehicleId,
104
+ top: 50,
105
+ tmres: "s",
106
+ format: "json"
107
+ });
108
+ return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getpredictions?${query}`).then((res) => res.json()).then((data) => data);
109
+ }
110
+ };
111
+
112
+ // cta_system_data.ts
113
+ import * as Papa from "papaparse";
114
+ export {
115
+ CTABusService,
116
+ CTATrainService
117
+ };
@@ -0,0 +1,34 @@
1
+ stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
2
+ 40890,O'Hare,O'Hare,1,blue,O'Hare,subway,TRUE,FALSE,FALSE,0,,,41.97766526,-87.90422307,,1
3
+ 40820,Rosemont,Rosemont,2,blue,O'Hare,elevated,TRUE,FALSE,TRUE,648,,,41.983507,-87.859388,,1
4
+ 40230,Cumberland,Cumberland,3,blue,Kennedy,elevated,TRUE,FALSE,TRUE,1633,,81W,41.984246,-87.838028,,1
5
+ 40750,Harlem,Harlem (Blue - O'Hare Branch),4,blue,Kennedy,elevated,TRUE,FALSE,FALSE,0,,"88, 90",41.98227,-87.8089,,1
6
+ 41280,Jefferson Park,Jefferson Park Transit Center,5,blue,Kennedy,elevated,TRUE,FALSE,FALSE,0,,"85A, 68, 92, 81, 56, 85, 91, 81W, 88",41.97023386,-87.76159401,,1
7
+ 41330,Montrose,Montrose (Blue),6,blue,Kennedy,elevated,FALSE,FALSE,FALSE,0,,"54A, 54, 78",41.96090105,-87.74290344,,2
8
+ 40550,Irving Park,Irving Park (Blue),7,blue,Kennedy,elevated,FALSE,FALSE,FALSE,0,,"54A, 80, 53",41.952925,-87.729229,,2
9
+ 41240,Addison,Addison (Blue),8,blue,Kennedy,elevated,TRUE,FALSE,FALSE,0,,152,41.94660372,-87.71845842,,1
10
+ 40060,Belmont,Belmont (Blue),9,blue,Milwaukee,subway,FALSE,FALSE,FALSE,0,,"82, 77",41.9391107,-87.71225212,,2
11
+ 41020,Logan Square,Logan Square,10,blue,Milwaukee,subway,TRUE,FALSE,FALSE,0,,"56, 93, 76",41.92953423,-87.70768815,,1
12
+ 40570,California,California (Blue),11,blue,Milwaukee,elevated,FALSE,FALSE,FALSE,0,,"94, 74, 56",41.92215831,-87.69724395,,2
13
+ 40670,Western,Western (Blue - O'Hare Branch),12,blue,Milwaukee,elevated,TRUE,FALSE,FALSE,0,,"49, 73, X49, 56",41.916157,-87.687364,,1
14
+ 40590,Damen,Damen (Blue),13,blue,Milwaukee,elevated,FALSE,FALSE,FALSE,0,,"50, 72, 56",41.90984523,-87.67754001,,2
15
+ 40320,Division,Division,14,blue,Milwaukee,elevated,FALSE,FALSE,FALSE,0,,"9, X9, 70, 56",41.903355,-87.666496,,2
16
+ 41410,Chicago,Chicago (Blue),15,blue,Milwaukee,subway,FALSE,FALSE,FALSE,0,,"66, 56",41.896075,-87.655214,,2
17
+ 40490,Grand,Grand (Blue),16,blue,Milwaukee,subway,FALSE,FALSE,FALSE,0,,"8, 65, 66, 56",41.891189,-87.647578,,2
18
+ 40380,Clark/Lake,Clark/Lake,17,blue,Dearborn Subway,subway,TRUE,TRUE,FALSE,0,,,41.885737,-87.630886,,1
19
+ 40370,Washington,Washington,18,blue,Dearborn Subway,subway,TRUE,TRUE,FALSE,0,,,41.883164,-87.62944,,2
20
+ 40790,Monroe,Monroe (Blue),19,blue,Dearborn Subway,subway,TRUE,FALSE,FALSE,0,,,41.880703,-87.629378,,2
21
+ 40070,Jackson,Jackson (Blue),20,blue,Dearborn Subway,subway,TRUE,TRUE,FALSE,0,,,41.878183,-87.629296,,1
22
+ 41340,LaSalle,LaSalle,21,blue,Congress,subway,FALSE,FALSE,FALSE,0,,"36, 24",41.875568,-87.631722,,2
23
+ 40430,Clinton,Clinton (Blue),22,blue,Congress,subway,FALSE,FALSE,FALSE,0,,"60, 37, 7, 157",41.875539,-87.640984,,2
24
+ 40350,UIC-Halsted,UIC-Halsted,23,blue,Congress,elevated,TRUE,FALSE,FALSE,0,,"8, 7, 60",41.875474,-87.649707,,1
25
+ 40470,Racine,Racine,24,blue,Congress,elevated,FALSE,FALSE,FALSE,0,,"7, 60",41.87592,-87.659458,,1
26
+ 40810,Illinois Medical District,Illinois Medical District,25,blue,Eisenhower,elevated,TRUE,FALSE,FALSE,0,,"7, 126",41.875706,-87.673932,,1
27
+ 40220,Western,Western (Blue - Forest Park Branch),26,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,,"7, 49, X49",41.875478,-87.688436,,2
28
+ 40250,Kedzie-Homan,Kedzie-Homan,27,blue,Eisenhower,elevated,TRUE,FALSE,FALSE,0,,"7, 52",41.874341,-87.70604,,1
29
+ 40920,Pulaski,Pulaski (Blue),28,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,,"7, 53",41.873797,-87.725663,,2
30
+ 40970,Cicero,Cicero (Blue),29,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,,"54, 7, 57",41.871574,-87.745154,,2
31
+ 40010,Austin,Austin (Blue),30,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,,91,41.870851,-87.776812,,2
32
+ 40180,Oak Park,Oak Park (Blue),31,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,,,41.872108,-87.791602,,2
33
+ 40980,Harlem,Harlem (Blue - Forest Park Branch),32,blue,Eisenhower,elevated,FALSE,FALSE,TRUE,53,,,41.87349,-87.806961,,2
34
+ 40390,Forest Park,Forest Park,33,blue,Eisenhower,elevated,TRUE,FALSE,TRUE,644,,,41.874257,-87.817318,,1
@@ -0,0 +1,34 @@
1
+ stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
2
+ 40890,O'Hare,O'Hare,1,blue,O'Hare,subway,TRUE,FALSE,FALSE,0,"30171, 30172",,41.97766526,-87.90422307,,1
3
+ 40820,Rosemont,Rosemont,2,blue,O'Hare,elevated,TRUE,FALSE,TRUE,648,"30159, 30160",,41.983507,-87.859388,,1
4
+ 40230,Cumberland,Cumberland,3,blue,Kennedy,elevated,TRUE,FALSE,TRUE,1633,"30044, 30045",81W,41.984246,-87.838028,,1
5
+ 40750,Harlem,Harlem (Blue - O'Hare Branch),4,blue,Kennedy,elevated,TRUE,FALSE,FALSE,0,"30145, 30146","88, 90",41.98227,-87.8089,,1
6
+ 41280,Jefferson Park,Jefferson Park Transit Center,5,blue,Kennedy,elevated,TRUE,FALSE,FALSE,0,"30247, 30248","85A, 68, 92, 81, 56, 85, 91, 81W, 88",41.97023386,-87.76159401,,1
7
+ 41330,Montrose,Montrose (Blue),6,blue,Kennedy,elevated,FALSE,FALSE,FALSE,0,"30259, 30260","54A, 54, 78",41.96090105,-87.74290344,,2
8
+ 40550,Irving Park,Irving Park (Blue),7,blue,Kennedy,elevated,FALSE,FALSE,FALSE,0,"30107, 30108","54A, 80, 53",41.952925,-87.729229,,2
9
+ 41240,Addison,Addison (Blue),8,blue,Kennedy,elevated,TRUE,FALSE,FALSE,0,"30239, 30240",152,41.94660372,-87.71845842,,1
10
+ 40060,Belmont,Belmont (Blue),9,blue,Milwaukee,subway,FALSE,FALSE,FALSE,0,"30012, 30013","82, 77",41.9391107,-87.71225212,,2
11
+ 41020,Logan Square,Logan Square,10,blue,Milwaukee,subway,TRUE,FALSE,FALSE,0,"30197, 30198","56, 93, 76",41.92953423,-87.70768815,,1
12
+ 40570,California,California (Blue),11,blue,Milwaukee,elevated,FALSE,FALSE,FALSE,0,"30111, 30112","94, 74, 56",41.92215831,-87.69724395,,2
13
+ 40670,Western,Western (Blue - O'Hare Branch),12,blue,Milwaukee,elevated,TRUE,FALSE,FALSE,0,"30129, 30130","49, 73, X49, 56",41.916157,-87.687364,,1
14
+ 40590,Damen,Damen (Blue),13,blue,Milwaukee,elevated,FALSE,FALSE,FALSE,0,"30115, 30116","50, 72, 56",41.90984523,-87.67754001,,2
15
+ 40320,Division,Division,14,blue,Milwaukee,elevated,FALSE,FALSE,FALSE,0,"30062, 30063","9, X9, 70, 56",41.903355,-87.666496,,2
16
+ 41410,Chicago,Chicago (Blue),15,blue,Milwaukee,subway,FALSE,FALSE,FALSE,0,"30271, 30272","66, 56",41.896075,-87.655214,,2
17
+ 40490,Grand,Grand (Blue),16,blue,Milwaukee,subway,FALSE,FALSE,FALSE,0,"30095, 30096","8, 65, 66, 56",41.891189,-87.647578,,2
18
+ 40380,Clark/Lake,Clark/Lake,17,blue,Dearborn Subway,subway,TRUE,TRUE,FALSE,0,"30374, 30375, 30074, 30075",,41.885737,-87.630886,,1
19
+ 40370,Washington,Washington,18,blue,Dearborn Subway,subway,TRUE,TRUE,FALSE,0,"30072, 30073",,41.883164,-87.62944,,2
20
+ 40790,Monroe,Monroe (Blue),19,blue,Dearborn Subway,subway,TRUE,FALSE,FALSE,0,"30153, 30154",,41.880703,-87.629378,,2
21
+ 40070,Jackson,Jackson (Blue),20,blue,Dearborn Subway,subway,TRUE,TRUE,FALSE,0,"30014, 30015",,41.878183,-87.629296,,1
22
+ 41340,LaSalle,LaSalle,21,blue,Congress,subway,FALSE,FALSE,FALSE,0,"30261, 30262","36, 24",41.875568,-87.631722,,2
23
+ 40430,Clinton,Clinton (Blue),22,blue,Congress,subway,FALSE,FALSE,FALSE,0,"30084, 30085","60, 37, 7, 157",41.875539,-87.640984,,2
24
+ 40350,UIC-Halsted,UIC-Halsted,23,blue,Congress,elevated,TRUE,FALSE,FALSE,0,"30068, 30069","8, 7, 60",41.875474,-87.649707,,1
25
+ 40470,Racine,Racine,24,blue,Congress,elevated,FALSE,FALSE,FALSE,0,"30092, 30093","7, 60",41.87592,-87.659458,,1
26
+ 40810,Illinois Medical District,Illinois Medical District,25,blue,Eisenhower,elevated,TRUE,FALSE,FALSE,0,"30157, 30158","7, 126",41.875706,-87.673932,,1
27
+ 40220,Western,Western (Blue - Forest Park Branch),26,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,"30042, 30043","7, 49, X49",41.875478,-87.688436,,2
28
+ 40250,Kedzie-Homan,Kedzie-Homan,27,blue,Eisenhower,elevated,TRUE,FALSE,FALSE,0,"30048, 30049","7, 52",41.874341,-87.70604,,1
29
+ 40920,Pulaski,Pulaski (Blue),28,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,"30179, 30180","7, 53",41.873797,-87.725663,,2
30
+ 40970,Cicero,Cicero (Blue),29,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,"30187, 30188","54, 7, 57",41.871574,-87.745154,,2
31
+ 40010,Austin,Austin (Blue),30,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,"30001, 30002",91,41.870851,-87.776812,,2
32
+ 40180,Oak Park,Oak Park (Blue),31,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,"30034, 30035",,41.872108,-87.791602,,2
33
+ 40980,Harlem,Harlem (Blue - Forest Park Branch),32,blue,Eisenhower,elevated,FALSE,FALSE,TRUE,53,"30189, 30190",,41.87349,-87.806961,,2
34
+ 40390,Forest Park,Forest Park,33,blue,Eisenhower,elevated,TRUE,FALSE,TRUE,644,"30076, 30077",,41.874257,-87.817318,,1
@@ -0,0 +1,27 @@
1
+ stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
2
+ 40380,Clark/Lake,Clark/Lake,26,"blue, brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30374, 30375, 30074, 30075",,41.885737,-87.630886,,1
3
+ 41700,Washington/Wabash,Washington/Wabash,25,"brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30383, 30384",,41.88322,-87.626189,,1
4
+ 40680,Adams/Wabash,Adams/Wabash,24,"brown, green, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30131, 30132",,41.879507,-87.626037,,2
5
+ 40850,H W Library,Harold Washington Library-State/Van Buren,23,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30165, 30166",,41.876862,-87.628196,,1
6
+ 40160,LaSalle/Van Buren,LaSalle/Van Buren,22,"brown, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30030, 30031",,41.8768,-87.631739,,2
7
+ 40040,Quincy,Quincy,21,"brown, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30007, 30008",,41.878723,-87.63374,,1
8
+ 40730,Washington/Wells,Washington/Wells,20,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30141, 30142",,41.882695,-87.63378,,1
9
+ 40460,Merchandise Mart,Merchandise Mart (Brown/Purple),19,"brown, purple",Near North Side,elevated,TRUE,TRUE,FALSE,0,"30090, 30091",,41.888969,-87.633924,,1
10
+ 40710,Chicago,Chicago (Brown/Purple),18,"brown, purple",Near North Side,elevated,TRUE,TRUE,FALSE,0,"30137, 30138",,41.89681,-87.635924,,1
11
+ 40800,Sedgwick,Sedgwick (Brown/Purple),17,"brown, purple",Near North Side,elevated,TRUE,TRUE,FALSE,0,"30155, 30156",37,41.910409,-87.639302,,1
12
+ 40660,Armitage,Armitage (Brown/Purple),16,"brown, purple",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30127, 30128","73, 8",41.918217,-87.652644,,1
13
+ 41220,Fullerton,Fullerton,15,"brown, purple, red",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30233, 30234, 30235, 30236","8, 37, 74",41.92530037,-87.65286844,,1
14
+ 40530,Diversey,Diversey (Brown/Purple),14,"brown, purple",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30103, 30104","8, 76",41.932732,-87.653131,,1
15
+ 41210,Wellington,Wellington (Brown/Purple),13,"brown, purple",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30231, 30232",8,41.936033,-87.653266,,1
16
+ 41320,Belmont,Belmont (Red/Brown/Purple),12,"brown, purple, red",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30255, 30256, 30257, 30258","77, 8, 22, 156",41.939751,-87.65338,,1
17
+ 40360,Southport,Southport,11,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30070, 30071",,41.943744,-87.663619,,1
18
+ 41310,Paulina,Paulina,10,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30253, 30254","9, X9",41.943623,-87.670907,,1
19
+ 41440,Addison,Addison (Brown),9,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30277, 30278",152,41.947028,-87.674642,,1
20
+ 41460,Irving Park,Irving Park (Brown),8,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30281, 30282",80,41.954521,-87.674868,,1
21
+ 41500,Montrose,Montrose (Brown),7,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30287, 30288",78,41.961756,-87.675047,,1
22
+ 40090,Damen,Damen (Brown),6,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30018, 30019","50, 81",41.966286,-87.678639,,1
23
+ 41480,Western,Western (Brown),5,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30283, 30284","49, 81, 49B, 11",41.966163,-87.688502,,1
24
+ 41010,Rockwell,Rockwell,4,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30195, 30196",81,41.966115,-87.6941,,1
25
+ 40870,Francisco,Francisco,3,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30167, 30168",81,41.966046,-87.701644,,1
26
+ 41180,Kedzie,Kedzie (Brown),2,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30225, 30226","93, 81",41.965996,-87.708821,,1
27
+ 41290,Kimball,Kimball,1,brown,Ravenswood,elevated,TRUE,FALSE,TRUE,73,"30249, 30250","82, 81",41.967901,-87.713065,,1
File without changes
@@ -0,0 +1,16 @@
1
+ stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
2
+ 40930,Midway,Midway,1,orange,Orange,elevated,TRUE,FALSE,TRUE,299,"30181, 30182",,41.78661,-87.737875,,1
3
+ 40960,Pulaski,Pulaski (Orange),2,orange,Orange,elevated,TRUE,FALSE,TRUE,390,"30185, 30186",,41.799756,-87.724493,,1
4
+ 41150,Kedzie,Kedzie (Orange),3,orange,Orange,elevated,TRUE,FALSE,TRUE,157,"30219, 30220",,41.804236,-87.704406,,1
5
+ 40310,Western,Western (Orange),4,orange,Orange,elevated,TRUE,FALSE,TRUE,200,"30060, 30061",,41.804546,-87.684019,,1
6
+ 40120,35th/Archer,35th/Archer,5,orange,Orange,elevated,TRUE,FALSE,TRUE,69,"30022, 30023",,41.829353,-87.680622,,1
7
+ 41060,Ashland,Ashland (Orange),6,orange,Orange,elevated,TRUE,FALSE,FALSE,0,"30205, 30206",,41.839234,-87.665317,,1
8
+ 41130,Halsted,Halsted (Orange),7,orange,Orange,elevated,TRUE,FALSE,TRUE,31,"30215, 30216",,41.84678,-87.648088,,1
9
+ 41400,Roosevelt,Roosevelt,8,"green, orange, red",Near South Side,elevated,TRUE,TRUE,FALSE,0,"30080, 30081, 30269, 30270",,41.86737853,-87.62703141,,1
10
+ 40850,H W Library,Harold Washington Library-State/Van Buren,9,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30165, 30166",,41.876862,-87.628196,,1
11
+ 40160,LaSalle/Van Buren,LaSalle/Van Buren,10,"brown, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30030, 30031",,41.8768,-87.631739,,2
12
+ 40040,Quincy,Quincy,11,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30007, 30008",,41.878723,-87.63374,,1
13
+ 40730,Washington/Wells,Washington/Wells,12,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30141, 30142",,41.882695,-87.63378,,1
14
+ 40380,Clark/Lake,Clark/Lake,13,"blue, brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30374, 30375, 30074, 30075",,41.885737,-87.630886,,1
15
+ 41700,Washington/Wabash,Washington/Wabash,14,"brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30383, 30384",,41.88322,-87.626189,,1
16
+ 40680,Adams/Wabash,Adams/Wabash,15,"brown, green, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30131, 30132",,41.879507,-87.626037,,2
@@ -0,0 +1,22 @@
1
+ stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
2
+ 40580,54th/Cermak,54th/Cermak,1,pink,Cermak,elevated,TRUE,FALSE,TRUE,441,"30113, 30114",,41.85177331,-87.75669201,,1
3
+ 40420,Cicero,Cicero (Pink),2,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30082, 30083",,41.85182,-87.745336,,1
4
+ 40600,Kostner,Kostner,3,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30117, 30118",,41.853751,-87.733258,,1
5
+ 40150,Pulaski,Pulaski (Pink),4,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30028, 30029",,41.853732,-87.724311,,1
6
+ 40780,Central Park,Central Park,5,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30151, 30152",,41.853839,-87.714842,,1
7
+ 41040,Kedzie,Kedzie (Pink),6,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30201, 30202",,41.853964,-87.705408,,1
8
+ 40440,California,California (Pink),7,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30086, 30087",,41.854109,-87.694774,,1
9
+ 40740,Western,Western (Pink),8,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30143, 30144",,41.854225,-87.685129,,1
10
+ 40210,Damen,Damen (Pink),9,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30040, 30041",,41.854517,-87.675975,,1
11
+ 40830,18th,18th,10,pink,Ashland,elevated,TRUE,FALSE,FALSE,0,"30161, 30162",,41.857908,-87.669147,,1
12
+ 41030,Polk,Polk,11,pink,Ashland,elevated,TRUE,FALSE,FALSE,0,"30199, 30200",,41.871551,-87.66953,,1
13
+ 40170,Ashland,Ashland (Green/Pink),12,"green, pink",Lake Elevated,elevated,TRUE,TRUE,FALSE,0,"30032, 30033",,41.885269,-87.666969,,1
14
+ 41510,Morgan,Morgan (Green/Pink),13,"green, pink",Lake Elevated,elevated,TRUE,TRUE,FALSE,0,"30295, 30296",,41.88557676,-87.65212993,,1
15
+ 41160,Clinton,Clinton (Green/Pink),14,"green, pink",Lake Elevated,elevated,TRUE,TRUE,FALSE,0,"30221, 30222",,41.885678,-87.641782,,1
16
+ 40380,Clark/Lake,Clark/Lake,15,"blue, brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30374, 30375, 30074, 30075",,41.885737,-87.630886,,1
17
+ 41700,Washington/Wabash,Washington/Wabash,16,"brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30383, 30384",,41.88322,-87.626189,,1
18
+ 40680,Adams/Wabash,Adams/Wabash,17,"brown, green, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30131, 30132",,41.879507,-87.626037,,2
19
+ 40850,H W Library,Harold Washington Library-State/Van Buren,18,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30165, 30166",,41.876862,-87.628196,,1
20
+ 40160,LaSalle/Van Buren,LaSalle/Van Buren,19,"brown, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30030, 30031",,41.8768,-87.631739,,2
21
+ 40040,Quincy,Quincy,20,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30007, 30008",,41.878723,-87.63374,,1
22
+ 40730,Washington/Wells,Washington/Wells,21,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30141, 30142",,41.882695,-87.63378,,1
@@ -0,0 +1,26 @@
1
+ stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
2
+ 40730,Washington/Wells,Washington/Wells,24,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30141, 30142",,41.882695,-87.63378,,1
3
+ 40040,Quincy,Quincy,23,"brown, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30007, 30008",,41.878723,-87.63374,,1
4
+ 40160,LaSalle/Van Buren,LaSalle/Van Buren,22,"brown, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30030, 30031",,41.8768,-87.631739,,2
5
+ 40850,H W Library,Harold Washington Library-State/Van Buren,21,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30165, 30166",,41.876862,-87.628196,,1
6
+ 40680,Adams/Wabash,Adams/Wabash,20,"brown, green, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30131, 30132",,41.879507,-87.626037,,2
7
+ 41700,Washington/Wabash,Washington/Wabash,19,"brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30383, 30384",,41.88322,-87.626189,,1
8
+ 40380,Clark/Lake,Clark/Lake,18,"blue, brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30374, 30375, 30074, 30075",,41.885737,-87.630886,,1
9
+ 40460,Merchandise Mart,Merchandise Mart (Brown/Purple),17,"brown, purple",Near North Side,elevated,TRUE,TRUE,FALSE,0,"30090, 30091",,41.888969,-87.633924,,1
10
+ 40710,Chicago,Chicago (Brown/Purple),16,"brown, purple",Near North Side,elevated,TRUE,TRUE,FALSE,0,"30137, 30138",,41.89681,-87.635924,,1
11
+ 40800,Sedgwick,Sedgwick (Brown/Purple),15,"brown, purple",Near North Side,elevated,TRUE,TRUE,FALSE,0,"30155, 30156",,41.910409,-87.639302,,1
12
+ 40660,Armitage,Armitage (Brown/Purple),14,"brown, purple",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30127, 30128",,41.918217,-87.652644,,1
13
+ 41220,Fullerton,Fullerton,13,"brown, purple, red",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30233, 30234, 30235, 30236",,41.92530037,-87.65286844,,1
14
+ 40530,Diversey,Diversey (Brown/Purple),12,"brown, purple",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30103, 30104",,41.932732,-87.653131,,1
15
+ 41210,Wellington,Wellington (Brown/Purple),11,"brown, purple",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30231, 30232",,41.936033,-87.653266,,1
16
+ 41320,Belmont,Belmont (Red/Brown/Purple),10,"brown, purple, red",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30255, 30256, 30257, 30258",,41.939751,-87.65338,,1
17
+ 40540,Wilson,Wilson,9,"red, purple",North Elevated,elevated,TRUE,TRUE,FALSE,0,"30105, 30106, 30385, 30386",,41.96548157,-87.65792581,,1
18
+ 40900,Howard,Howard,8,"purple, red, yellow",North Elevated,elevated,TRUE,TRUE,TRUE,592,"30173, 30174, 30175, 30176",,42.019063,-87.672892,,1
19
+ 40840,South Blvd,South Boulevard,7,purple,Evanston,elevated,FALSE,FALSE,FALSE,0,"30163, 30164",,42.027612,-87.678329,,2
20
+ 40270,Main,Main,6,purple,Evanston,elevated,FALSE,FALSE,FALSE,0,"30052, 30053",,42.033456,-87.679538,,2
21
+ 40050,Davis,Davis,5,purple,Evanston,elevated,TRUE,FALSE,FALSE,0,"30010, 30011",,42.04771,-87.683543,,1
22
+ 40690,Dempster,Dempster,5,purple,Evanston,elevated,FALSE,FALSE,FALSE,0,"30133, 30134",,42.041655,-87.681602,,2
23
+ 40520,Foster,Foster,4,purple,Evanston,elevated,FALSE,FALSE,FALSE,0,"30101, 30102",,42.05416,-87.68356,,2
24
+ 40400,Noyes,Noyes,3,purple,Evanston,elevated,FALSE,FALSE,FALSE,0,"30078, 30079",,42.058282,-87.683337,,2
25
+ 41250,Central,Central (Purple),2,purple,Evanston,elevated,FALSE,FALSE,FALSE,0,"30241, 30242",,42.063987,-87.685617,,2
26
+ 41050,Linden,Linden,1,purple,Evanston,elevated,TRUE,FALSE,TRUE,441,"30203, 30204",,42.073153,-87.69073,,1
@@ -0,0 +1,34 @@
1
+ stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
2
+ 40900,Howard,Howard,1,"purple, red, yellow",North Elevated,elevated,TRUE,TRUE,TRUE,592,"30173, 30174, 30175, 30176",,42.019063,-87.672892,,1
3
+ 41190,Jarvis,Jarvis,2,red,North Elevated,elevated,FALSE,FALSE,FALSE,0,"30227, 30228",,42.01602042,-87.66925713,,2
4
+ 40100,Morse,Morse,3,red,North Elevated,elevated,FALSE,FALSE,FALSE,0,"30020, 30021",,42.008362,-87.665909,,2
5
+ 41300,Loyola,Loyola,4,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30251, 30252",,42.001073,-87.661061,,1
6
+ 40760,Granville,Granville,5,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30147, 30148",,41.99448301,-87.65918663,,1
7
+ 40880,Thorndale,Thorndale,6,red,North Elevated,elevated,FALSE,FALSE,FALSE,0,"30169, 30170",,41.99009909,-87.6590685,,2
8
+ 41380,Bryn Mawr,Bryn Mawr,7,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30267, 30268",,41.983504,-87.65884,,1
9
+ 40340,Berwyn,Berwyn,8,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30066, 30067",,41.977984,-87.658668,,1
10
+ 41200,Argyle,Argyle,9,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30229, 30230",,41.97332205,-87.65852795,,1
11
+ 40770,Lawrence,Lawrence,10,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30149, 30150",,41.96897629,-87.65848694,,1
12
+ 40540,Wilson,Wilson,11,"red, purple",North Elevated,elevated,TRUE,TRUE,FALSE,0,"30105, 30106, 30385, 30386",,41.96548157,-87.65792581,,1
13
+ 40080,Sheridan,Sheridan,12,red,North Elevated,elevated,FALSE,FALSE,FALSE,0,"30016, 30017",,41.95390484,-87.65466141,,2
14
+ 41420,Addison,Addison (Red),13,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30273, 30274",,41.94731617,-87.6536241,,1
15
+ 41320,Belmont,Belmont (Red/Brown/Purple),14,"brown, purple, red",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30255, 30256, 30257, 30258",,41.939751,-87.65338,,1
16
+ 41220,Fullerton,Fullerton,15,"brown, purple, red",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30233, 30234, 30235, 30236",,41.92530037,-87.65286844,,1
17
+ 40650,North/Clybourn,North/Clybourn,16,red,Lincoln Park,subway,TRUE,FALSE,FALSE,0,"30125, 30126",,41.910655,-87.649177,,2
18
+ 40630,Clark/Division,Clark/Division,17,red,State St Subway,subway,TRUE,FALSE,FALSE,0,"30121, 30122",,41.90392,-87.631412,,1
19
+ 41450,Chicago,Chicago (Red),18,red,State St Subway,subway,TRUE,FALSE,FALSE,0,"30279, 30280",,41.896671,-87.628176,,1
20
+ 40330,Grand,Grand (Red),19,red,State St Subway,subway,TRUE,FALSE,FALSE,0,"30064, 30065",,41.891665,-87.628021,,1
21
+ 41660,Lake,Lake (Subway),20,red,State St Subway,subway,TRUE,TRUE,FALSE,0,"30289, 30290",,41.884809,-87.627813,,1
22
+ 41090,Monroe,Monroe (Red),21,red,State St Subway,subway,FALSE,FALSE,FALSE,0,"30211, 30212",,41.880745,-87.627696,,2
23
+ 40560,Jackson,Jackson (Red),22,red,State St Subway,subway,TRUE,FALSE,FALSE,0,"30109, 30110",,41.878153,-87.627596,,1
24
+ 41490,Harrison,Harrison,23,red,State St Subway,subway,FALSE,FALSE,FALSE,0,"30285, 30286",,41.874039,-87.627479,,2
25
+ 41400,Roosevelt,Roosevelt,24,"green, orange, red",Near South Side,subway,TRUE,TRUE,FALSE,0,"30080, 30081, 30269, 30270",,41.86737853,-87.62703141,,1
26
+ 41000,Cermak-Chinatown,Cermak-Chinatown,25,red,Near South Side,elevated,TRUE,FALSE,FALSE,0,"30193, 30194",,41.853206,-87.630968,,1
27
+ 40190,Sox-35th,Sox-35th,26,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30036, 30037",,41.831191,-87.630636,,1
28
+ 41230,47th,47th (Red),27,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30237, 30238",,41.810318,-87.63094,,1
29
+ 41170,Garfield,Garfield (Red),28,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30223, 30224",,41.79542,-87.631157,,1
30
+ 40910,63rd,63rd,29,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30177, 30178",,41.780536,-87.630952,,1
31
+ 40990,69th,69th,30,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30191, 30192",,41.768367,-87.625724,,1
32
+ 40240,79th,79th,31,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30046, 30047",,41.750419,-87.625112,,1
33
+ 41430,87th,87th,32,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30275, 30276",,41.735372,-87.624717,,1
34
+ 40450,95th/Dan Ryan,95th/Dan Ryan,33,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30088, 30089",,41.722377,-87.624342,,1
@@ -0,0 +1,4 @@
1
+ stop_id,station_name,name,sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
2
+ 40140,Dempster-Skokie,Dempster-Skokie,1,yellow,Skokie Swift,,,,,,,,42.038951,-87.751919,,1
3
+ 40900,Howard,Howard,3,"purple, red, yellow",Skokie Swift,,,,,,,,42.019063,-87.672892,,1
4
+ 41680,Oakton-Skokie,Oakton-Skokie,2,yellow,Skokie Swift,,,,,,,,42.02624348,-87.74722084,,1
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@stiava/cta",
3
+ "version": "1.0.0",
4
+ "description": "A NodeJS package for interacting with the CTA Bus and Train apis",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsup index.ts --format esm,cjs",
21
+ "types": "tsc --emitDeclarationOnly",
22
+ "copy-assets": "node scripts/copy-assets.mjs",
23
+ "prepare": "npm run build && npm run types && npm run copy-assets"
24
+ },
25
+ "devDependencies": {
26
+ "@types/papaparse": "^5.5.2",
27
+ "tsup": "^8.5.1",
28
+ "typescript": "^7.0.2"
29
+ },
30
+ "dependencies": {
31
+ "papaparse": "^5.5.4"
32
+ }
33
+ }