cta-api 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.
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +91 -0
- data/Rakefile +2 -0
- data/cta-api.gemspec +17 -0
- data/lib/bus-tracker/bus-tracker.rb +208 -0
- data/lib/bus-tracker/pattern.rb +13 -0
- data/lib/bus-tracker/point.rb +15 -0
- data/lib/bus-tracker/prediction.rb +13 -0
- data/lib/bus-tracker/service-bulletin.rb +13 -0
- data/lib/bus-tracker/service.rb +15 -0
- data/lib/bus-tracker/stop.rb +13 -0
- data/lib/bus-tracker/vehicle.rb +13 -0
- data/lib/cta-api.rb +23 -0
- data/lib/cta-api/version.rb +3 -0
- data/lib/cta_L_stops.csv +299 -0
- data/lib/train-tracker/estimate.rb +13 -0
- data/lib/train-tracker/train-tracker.rb +56 -0
- data/spec/spec_helper.rb +1 -0
- metadata +83 -0
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 fbonetti
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
## Install
|
2
|
+
|
3
|
+
Via rubygems.org:
|
4
|
+
|
5
|
+
```
|
6
|
+
$ gem install cta-api
|
7
|
+
```
|
8
|
+
|
9
|
+
## Usage
|
10
|
+
|
11
|
+
This gem allows you to access the Chicago Transit Authority API via Ruby. You can track the real-time locations of all public transportation vehicles, including buses and trains. You can obtain API keys from the CTA website:
|
12
|
+
|
13
|
+
http://www.transitchicago.com/developers/bustracker.aspx
|
14
|
+
http://www.transitchicago.com/developers/traintracker.aspx
|
15
|
+
|
16
|
+
## Bus Tracker
|
17
|
+
|
18
|
+
### Setup
|
19
|
+
|
20
|
+
``` ruby
|
21
|
+
require 'cta-api'
|
22
|
+
|
23
|
+
key = "XXXXXXXXXXXXXXXXXXXXXXXXX"
|
24
|
+
@tracker = CTA::TrainTracker.new(key)
|
25
|
+
```
|
26
|
+
|
27
|
+
### Find Routes and Stops
|
28
|
+
|
29
|
+
``` ruby
|
30
|
+
# list all available routes
|
31
|
+
@tracker.routes
|
32
|
+
|
33
|
+
# gets the available directions for the specified route (north, south, etc.)
|
34
|
+
@tracker.route_directions("50")
|
35
|
+
|
36
|
+
# list all stops that belong to a particular route
|
37
|
+
@tracker.stops("50", :north)
|
38
|
+
```
|
39
|
+
|
40
|
+
### Find Vehicles
|
41
|
+
|
42
|
+
``` ruby
|
43
|
+
# returns an array of vehicles that travel the given routes
|
44
|
+
@tracker.vehicles_by_routes(["50", "52A"])
|
45
|
+
|
46
|
+
# returns an array of vehicles with the given vehicle ids
|
47
|
+
@tracker.vehicles_by_ids(["1782", "1419", "1773"])
|
48
|
+
```
|
49
|
+
|
50
|
+
### Get Predicted Arrival Times
|
51
|
+
|
52
|
+
``` ruby
|
53
|
+
# get arrival times for a list of stop ids
|
54
|
+
# note that the second argument is optional
|
55
|
+
@tracker.predictions_by_stop_ids(["8751", "8752"], "50")
|
56
|
+
|
57
|
+
# get arrival times for a list of vehicle ids
|
58
|
+
@tracker.predictions_by_vehicle_ids(["1782", "1419", "1773"])
|
59
|
+
```
|
60
|
+
|
61
|
+
### Get System Time
|
62
|
+
``` ruby
|
63
|
+
@tracker.time
|
64
|
+
```
|
65
|
+
|
66
|
+
## Train Tracker
|
67
|
+
|
68
|
+
### Setup
|
69
|
+
|
70
|
+
``` ruby
|
71
|
+
require 'cta-api'
|
72
|
+
|
73
|
+
key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
74
|
+
tracker = CTA::TrainTracker.new(key)
|
75
|
+
```
|
76
|
+
|
77
|
+
## Get a List of Stops and Stations
|
78
|
+
|
79
|
+
``` ruby
|
80
|
+
# stops
|
81
|
+
@tracker.stops
|
82
|
+
|
83
|
+
# stations
|
84
|
+
@tracker.stations
|
85
|
+
```
|
86
|
+
|
87
|
+
## Get Predicted Arrival Times
|
88
|
+
|
89
|
+
``` ruby
|
90
|
+
@tracker.arrivals stop_id: "30106"
|
91
|
+
```
|
data/Rakefile
ADDED
data/cta-api.gemspec
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'cta-api'
|
3
|
+
s.version = '1.0.0'
|
4
|
+
s.author = 'Frank Bonetti'
|
5
|
+
s.date = '2013-02-02'
|
6
|
+
|
7
|
+
s.license = 'MIT'
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
|
10
|
+
s.description = 'An easy way to access the Chicago Transit Authority API via the Ruby programming language'
|
11
|
+
s.summary = 'An easy way to access the Chicago Transit Authority API via the Ruby programming language'
|
12
|
+
s.email = 'frank.r.bonetti@gmail.com'
|
13
|
+
|
14
|
+
s.require_paths = ['lib']
|
15
|
+
s.files = Dir.glob("**/*").reject { |x| File.directory?(x) }
|
16
|
+
s.add_dependency('nokogiri', '>= 1.5.6')
|
17
|
+
end
|
@@ -0,0 +1,208 @@
|
|
1
|
+
module CTA
|
2
|
+
class BusTracker
|
3
|
+
|
4
|
+
def initialize(key)
|
5
|
+
@key = key
|
6
|
+
end
|
7
|
+
|
8
|
+
def time
|
9
|
+
base_url = "http://www.ctabustracker.com/bustime/api/v1/gettime?"
|
10
|
+
url = "#{ base_url}key=#{ @key }"
|
11
|
+
Time.parse(Nokogiri::XML(open(url)).at("//tm").text)
|
12
|
+
end
|
13
|
+
|
14
|
+
def vehicles_by_routes(routes)
|
15
|
+
if routes.kind_of?(Array)
|
16
|
+
full_array = []
|
17
|
+
until routes.size == 0
|
18
|
+
full_array << vehicles(route: routes.shift(10))
|
19
|
+
end
|
20
|
+
full_array.flatten!
|
21
|
+
else
|
22
|
+
raise ArgumentError.new "Argument must be an Array."
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def vehicles_by_ids(vids)
|
27
|
+
if vids.kind_of?(Array) && routes.size.between(1,10)
|
28
|
+
vehicles(vid: vids)
|
29
|
+
else
|
30
|
+
raise ArgumentError.new "must be an Array with 1 to 10 elements."
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def patterns_by_route(route)
|
35
|
+
if route.kind_of?(String) && route.length > 0
|
36
|
+
patterns(route: route)
|
37
|
+
else
|
38
|
+
raise ArgumentError.new "must be a String with a length greater than zero."
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def patterns_by_ids(pid)
|
43
|
+
if pid.kind_of?(Array) && pid.size.between?(1,10)
|
44
|
+
patterns(pid: pid)
|
45
|
+
else
|
46
|
+
raise ArgumentError.new "must be an Array with 1 to 10 elements."
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def predictions_by_stop_ids(stop_id, route="")
|
51
|
+
if stop_id.kind_of?(Array) && stop_id.size.between?(1,10)
|
52
|
+
predictions(stop_id: stop_id, route: route)
|
53
|
+
else
|
54
|
+
raise ArgumentError.new "must be an Array with 1 to 10 elements."
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def predictions_by_vehicle_ids(vid)
|
59
|
+
if vid.kind_of?(Array) && vid.size.between?(1,10)
|
60
|
+
predictions(vid: vid)
|
61
|
+
else
|
62
|
+
raise ArgumentError.new "must be an Array with 1 to 10 elements."
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def routes
|
67
|
+
base_url = "http://www.ctabustracker.com/bustime/api/v1/getroutes?"
|
68
|
+
url = "#{ base_url }key=#{ @key }"
|
69
|
+
route_hash = {}
|
70
|
+
Nokogiri::XML(open(url)).xpath("//route").each do |route|
|
71
|
+
route_hash[route.at("rt").text] = route.at("rtnm").text
|
72
|
+
end
|
73
|
+
route_hash
|
74
|
+
end
|
75
|
+
|
76
|
+
def route_directions(route)
|
77
|
+
if route.kind_of?(String)
|
78
|
+
base_url = "http://www.ctabustracker.com/bustime/api/v1/getdirections?rt=#{ route }"
|
79
|
+
url = "#{ base_url }&key=#{ @key }"
|
80
|
+
Nokogiri::XML(open(url)).xpath("//dir").map { |x| x.text.split(/ /)[0].to_sym }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def stops(route, direction)
|
85
|
+
if (route.kind_of?(String) || route.kind_of?(Integer)) && direction.kind_of?(Symbol)
|
86
|
+
direction = direction.to_s + "+bound"
|
87
|
+
base_url = "http://www.ctabustracker.com/bustime/api/v1/getstops?"
|
88
|
+
url = "#{ base_url }key=#{ @key }&rt=#{ route }&dir=#{ direction }"
|
89
|
+
|
90
|
+
stop_array = Nokogiri::XML(open(url)).xpath("//stop").map do |item|
|
91
|
+
Stop.new({
|
92
|
+
:id => item.at("stpid").text,
|
93
|
+
:name => item.at("stpnm").text,
|
94
|
+
:latitude => item.at("lat").text,
|
95
|
+
:longitude => item.at("lon").text
|
96
|
+
})
|
97
|
+
end
|
98
|
+
stop_array
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def service_bulletins(params)
|
103
|
+
route = params[:route] || []
|
104
|
+
route_direction = params[:route_direction]
|
105
|
+
stop_id = params[:stop_id] || []
|
106
|
+
|
107
|
+
base_url = "http://www.ctabustracker.com/bustime/api/v1/getservicebulletins?"
|
108
|
+
url = "#{ base_url }key=#{ @key }&rt=#{ route.join(',') }&rtdir=#{ route_direction }&stpid=#{ stop_id.join(',') }"
|
109
|
+
puts url
|
110
|
+
|
111
|
+
bulletin_array = Nokogiri::XML(open(url)).xpath("//sb").map do |item|
|
112
|
+
ServiceBulletin.new({
|
113
|
+
:name => item.at("nm") && item.at("nm").text,
|
114
|
+
:subject => item.at("sbj") && item.at("sbj").text,
|
115
|
+
:detail => item.at("dtl") && item.at("dtl").text.gsub("<br/>", "\n").strip,
|
116
|
+
:brief => item.at("brf") && item.at("brf").text,
|
117
|
+
:priority => item.at("prty") && item.at("prty").text,
|
118
|
+
:services => item.xpath("srvc") && item.xpath("srvc").map do |subitem|
|
119
|
+
ServiceBulletin::Service.new({
|
120
|
+
:route => subitem.at("rt") && subitem.at("rt").text,
|
121
|
+
:route_direction => subitem.at("rtdir") && subitem.at("rtdir").text,
|
122
|
+
:stop_id => subitem.at("stpid") && subitem.at("stpid").text,
|
123
|
+
:stop_name => subitem.at("stpnm") && subitem.at("stpnm").text
|
124
|
+
})
|
125
|
+
end
|
126
|
+
})
|
127
|
+
end
|
128
|
+
bulletin_array
|
129
|
+
end
|
130
|
+
|
131
|
+
private
|
132
|
+
|
133
|
+
def vehicles(params)
|
134
|
+
route = params[:route] || []
|
135
|
+
vid = params[:vid] || []
|
136
|
+
|
137
|
+
base_url = "http://www.ctabustracker.com/bustime/api/v1/getvehicles?"
|
138
|
+
url = "#{ base_url }key=#{ @key }&rt=#{ route.join(",") }&vid=#{ vid.join(",") }"
|
139
|
+
|
140
|
+
vehicle_array = Nokogiri::XML(open(url)).xpath("//vehicle").map do |item|
|
141
|
+
Vehicle.new({
|
142
|
+
:id => item.at("vid").text,
|
143
|
+
:timestamp => Time.parse(item.at("tmstmp").text),
|
144
|
+
:latitude => item.at("lat").text,
|
145
|
+
:longitude => item.at("lon").text,
|
146
|
+
:heading => item.at("hdg").text,
|
147
|
+
:pattern_id => item.at("pid").text,
|
148
|
+
:pattern_distance => item.at("pdist").text,
|
149
|
+
:destination => item.at("des").text,
|
150
|
+
:delay => item.at("dly") && item.at("dly").text.to_bool
|
151
|
+
})
|
152
|
+
end
|
153
|
+
vehicle_array
|
154
|
+
end
|
155
|
+
|
156
|
+
def patterns(params)
|
157
|
+
route = params[:route]
|
158
|
+
pid = params[:pid] || []
|
159
|
+
|
160
|
+
base_url = "http://www.ctabustracker.com/bustime/api/v1/getpatterns?"
|
161
|
+
url = "#{ base_url }key=#{ @key }&rt=#{ route }&pid=#{ pid.join(",") }"
|
162
|
+
|
163
|
+
pattern_array = Nokogiri::XML(open(url)).xpath("//ptr").map do |item|
|
164
|
+
Pattern.new({
|
165
|
+
:id => item.at("pid").text,
|
166
|
+
:length => item.at("ln").text.to_f,
|
167
|
+
:direction => item.at("rtdir").text,
|
168
|
+
:points => item.xpath("pt").map do |subitem|
|
169
|
+
Pattern::Point.new({
|
170
|
+
:sequence => subitem.at("seq").text,
|
171
|
+
:latitude => subitem.at("lat").text,
|
172
|
+
:longitude => subitem.at("lon").text,
|
173
|
+
:type => subitem.at("typ").text == "S" ? "stop" : "waypoint",
|
174
|
+
:id => subitem.at("stpid") && subitem.at("stpid").text,
|
175
|
+
:name => subitem.at("stpnm") && subitem.at("stpnm").text,
|
176
|
+
:distance => subitem.at("pdist") && subitem.at("pdist").text
|
177
|
+
})
|
178
|
+
end
|
179
|
+
})
|
180
|
+
end
|
181
|
+
pattern_array
|
182
|
+
end
|
183
|
+
|
184
|
+
def predictions(params)
|
185
|
+
stop_id = params[:stop_id] || []
|
186
|
+
route = params[:route] || []
|
187
|
+
vid = params[:vid] || []
|
188
|
+
|
189
|
+
base_url = "http://www.ctabustracker.com/bustime/api/v1/getpredictions?"
|
190
|
+
url = "#{ base_url }key=#{ @key }&stpid=#{ stop_id.join(',') }&rt=#{ route.join(',') }&vid=#{ vid.join(',') }"
|
191
|
+
|
192
|
+
prediction_array = Nokogiri::XML(open(url)).xpath("//prd").map do |item|
|
193
|
+
Prediction.new({
|
194
|
+
:timestamp => Time.parse(item.at("tmstmp").text),
|
195
|
+
:type => item.at("typ").text == "A" ? "arrival" : "departure",
|
196
|
+
:stop_name => item.at("stpnm").text,
|
197
|
+
:vehicle_id => item.at("vid").text,
|
198
|
+
:distance_from_stop => item.at("dstp").text.to_f,
|
199
|
+
:route => item.at("rt").text,
|
200
|
+
:route_direction => item.at("rtdir").text,
|
201
|
+
:destination => item.at("des").text,
|
202
|
+
:predicted_time => Time.parse(item.at("prdtm").text)
|
203
|
+
})
|
204
|
+
end
|
205
|
+
prediction_array
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module CTA
|
2
|
+
class BusTracker
|
3
|
+
class Pattern
|
4
|
+
class Point
|
5
|
+
attr_reader :sequence, :latitude, :longitude, :type, :id, :name, :distance
|
6
|
+
|
7
|
+
def initialize(params)
|
8
|
+
params.each do |key, value|
|
9
|
+
self.instance_variable_set("@#{ key }".to_sym, value)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module CTA
|
2
|
+
class BusTracker
|
3
|
+
class Prediction
|
4
|
+
attr_reader :timestamp, :type, :stop_name, :stop_id, :vehicle_id, :distance_from_stop, :route, :route_direction, :destination, :predicted_time
|
5
|
+
|
6
|
+
def initialize(params)
|
7
|
+
params.each do |key, value|
|
8
|
+
self.instance_variable_set("@#{ key }".to_sym, value)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module CTA
|
2
|
+
class BusTracker
|
3
|
+
class ServiceBulletin
|
4
|
+
attr_reader :name, :subject, :detail, :brief, :priority, :services
|
5
|
+
|
6
|
+
def initialize(params)
|
7
|
+
params.each do |key, value|
|
8
|
+
self.instance_variable_set("@#{ key }".to_sym, value)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module CTA
|
2
|
+
class BusTracker
|
3
|
+
class ServiceBulletin
|
4
|
+
class Service
|
5
|
+
attr_reader :route, :route_direction, :stop_id, :stop_name
|
6
|
+
|
7
|
+
def initialize(params)
|
8
|
+
params.each do |key, value|
|
9
|
+
self.instance_variable_set("@#{ key }".to_sym, value)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module CTA
|
2
|
+
class BusTracker
|
3
|
+
class Vehicle
|
4
|
+
attr_reader :id, :timestamp, :latitude, :longitude, :heading, :pattern_id, :pattern_distance, :destination, :delay
|
5
|
+
|
6
|
+
def initialize(params)
|
7
|
+
params.each do |key, value|
|
8
|
+
self.instance_variable_set("@#{ key }".to_sym, value)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/cta-api.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'time'
|
4
|
+
require 'csv'
|
5
|
+
|
6
|
+
require 'bus-tracker/bus-tracker'
|
7
|
+
require 'bus-tracker/pattern'
|
8
|
+
require 'bus-tracker/stop'
|
9
|
+
require 'bus-tracker/vehicle'
|
10
|
+
require 'bus-tracker/point'
|
11
|
+
require 'bus-tracker/prediction'
|
12
|
+
require 'bus-tracker/service-bulletin'
|
13
|
+
require 'bus-tracker/service'
|
14
|
+
require 'train-tracker/train-tracker'
|
15
|
+
require 'train-tracker/estimate'
|
16
|
+
|
17
|
+
class String
|
18
|
+
def to_bool
|
19
|
+
return true if self == true || self =~ (/(true|t|yes|y|1)$/i)
|
20
|
+
return false if self == false || self =~ (/(false|f|no|n|0)$/i)
|
21
|
+
raise ArgumentError.new("invalid value for Boolean: \"#{self}\"")
|
22
|
+
end
|
23
|
+
end
|
data/lib/cta_L_stops.csv
ADDED
@@ -0,0 +1,299 @@
|
|
1
|
+
STOP_ID,DIRECTION_ID,STOP_NAME,LON,LAT,STATION_NAME,STATION_DESCRIPTIVE_NAME,PARENT_STOP_ID,ADA,Red,Blue,Brn,G,P,Pexp,Y,Pink,Org
|
2
|
+
30162,W,18th (54th/Cermak-bound),-87.669147,41.857908,18th,18th (Pink Line),40830,1,0,0,0,0,0,0,0,1,0
|
3
|
+
30161,E,18th (Loop-bound),-87.669147,41.857908,18th,18th (Pink Line),40830,1,0,0,0,0,0,0,0,1,0
|
4
|
+
30022,N,35th/Archer (Loop-bound),-87.680622,41.829353,35th/Archer,35th/Archer (Orange Line),40120,1,0,0,0,0,0,0,0,0,1
|
5
|
+
30023,S,35th/Archer (Midway-bound),-87.680622,41.829353,35th/Archer,35th/Archer (Orange Line),40120,1,0,0,0,0,0,0,0,0,1
|
6
|
+
30214,S,35-Bronzeville-IIT (63rd-bound),-87.625826,41.831677,35th-Bronzeville-IIT,35th-Bronzeville-IIT (Green Line),41120,1,0,0,0,1,0,0,0,0,0
|
7
|
+
30213,N,35-Bronzeville-IIT (Harlem-bound),-87.625826,41.831677,35th-Bronzeville-IIT,35th-Bronzeville-IIT (Green Line),41120,1,0,0,0,1,0,0,0,0,0
|
8
|
+
30246,S,43rd (63rd-bound),-87.619021,41.816462,43rd,43rd (Green Line),41270,1,0,0,0,1,0,0,0,0,0
|
9
|
+
30245,N,43rd (Harlem-bound),-87.619021,41.816462,43rd,43rd (Green Line),41270,1,0,0,0,1,0,0,0,0,0
|
10
|
+
30210,S,47th (63rd-bound) Elevated (63rd-bound),-87.618826,41.809209,47th,47th (Green Line),41080,1,0,0,0,1,0,0,0,0,0
|
11
|
+
30209,N,47th (SB) Elevated (Harlem-bound),-87.618826,41.809209,47th,47th (Green Line),41080,1,0,0,0,1,0,0,0,0,0
|
12
|
+
30238,S,47th-Dan Ryan (95th-bound),-87.63094,41.810318,47th,47th (Red Line),41230,1,1,0,0,0,0,0,0,0,0
|
13
|
+
30237,N,47th-Dan Ryan (Howard-bound),-87.63094,41.810318,47th,47th (Red Line),41230,1,1,0,0,0,0,0,0,0,0
|
14
|
+
30025,S,51st (63rd-bound),-87.618487,41.80209,51st,51st (Green Line),40130,1,0,0,0,1,0,0,0,0,0
|
15
|
+
30024,N,51st (Harlem-bound),-87.618487,41.80209,51st,51st (Green Line),40130,1,0,0,0,1,0,0,0,0,0
|
16
|
+
30113,E,54th/Cermak (Loop-bound),-87.75669201,41.85177331,54th/Cermak,54th/Cermak (Pink Line),40580,1,0,0,0,0,0,0,0,1,0
|
17
|
+
30114,W,54th/Cermak (Terminal arrival),-87.75669201,41.85177331,54th/Cermak,54th/Cermak (Pink Line),40580,1,0,0,0,0,0,0,0,1,0
|
18
|
+
30178,S,63rd-Dan Ryan (95th-bound),-87.630952,41.780536,63rd,63rd (Red Line),40910,0,1,0,0,0,0,0,0,0,0
|
19
|
+
30177,N,63rd-Dan Ryan (Howard-bound),-87.630952,41.780536,63rd,63rd (Red Line),40910,0,1,0,0,0,0,0,0,0,0
|
20
|
+
30192,S,69th (95th-bound),-87.625724,41.768367,69th,69th (Red Line),40990,1,1,0,0,0,0,0,0,0,0
|
21
|
+
30191,N,69th (Howard-bound),-87.625724,41.768367,69th,69th (Red Line),40990,1,1,0,0,0,0,0,0,0,0
|
22
|
+
30047,S,79th (95th-bound),-87.625112,41.750419,79th,79th (Red Line),40240,1,1,0,0,0,0,0,0,0,0
|
23
|
+
30046,N,79th (Howard-bound),-87.625112,41.750419,79th,79th (Red Line),40240,1,1,0,0,0,0,0,0,0,0
|
24
|
+
30276,S,87th (95th-bound),-87.624717,41.735372,87th,87th (Red Line),41430,0,1,0,0,0,0,0,0,0,0
|
25
|
+
30275,N,87th (Howard-bound),-87.624717,41.735372,87th,87th (Red Line),41430,0,1,0,0,0,0,0,0,0,0
|
26
|
+
30089,S,95th/Dan Ryan (95th-bound),-87.624342,41.722377,95th/Dan Ryan,95th/Dan Ryan (Red Line),40450,1,1,0,0,0,0,0,0,0,0
|
27
|
+
30088,N,95th/Dan Ryan (Howard-bound),-87.624342,41.722377,95th/Ran Ryan,95th/Ran Ryan (Red Line),40450,1,1,0,0,0,0,0,0,0,0
|
28
|
+
30132,S,Adams/Wabash (Inner Loop),-87.626037,41.879507,Adams/Wabash,"Adams/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40680,0,0,0,0,1,0,1,0,1,1
|
29
|
+
30131,N,Adams/Wabash (Outer Loop),-87.626037,41.879507,Adams/Wabash,"Adams/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40680,0,0,0,1,1,0,0,0,0,0
|
30
|
+
30240,S,Addison (O'Hare Branch) (Forest Pk-bound),-87.71906,41.94738,Addison,Addison (Blue Line),41240,0,0,1,0,0,0,0,0,0,0
|
31
|
+
30239,N,Addison (O'Hare Branch) (O'Hare-bound),-87.71906,41.94738,Addison,Addison (Blue Line),41240,0,0,1,0,0,0,0,0,0,0
|
32
|
+
30277,N,Addison (Kimball-bound),-87.674642,41.947028,Addison,Addison (Brown Line),41440,1,0,0,1,0,0,0,0,0,0
|
33
|
+
30278,S,Addison (Loop-bound),-87.674642,41.947028,Addison,Addison (Brown Line),41440,1,0,0,1,0,0,0,0,0,0
|
34
|
+
30274,S,Addison (95th-bound),-87.653626,41.947428,Addison,Addison (Red Line),41420,1,1,0,0,0,0,0,0,0,0
|
35
|
+
30273,N,Addison (Howard-bound),-87.653626,41.947428,Addison,Addison (Red Line),41420,1,1,0,0,0,0,0,0,0,0
|
36
|
+
30230,S,Argyle (95th-bound),-87.65853,41.973453,Argyle,Argyle (Red Line),41200,0,1,0,0,0,0,0,0,0,0
|
37
|
+
30229,N,Argyle (Howard-bound),-87.65853,41.973453,Argyle,Argyle (Red Line),41200,0,1,0,0,0,0,0,0,0,0
|
38
|
+
30127,N,Armitage (Kimball-Linden-bound),-87.652644,41.918217,Armitage,Armitage (Brown & Purple Lines),40660,1,0,0,1,0,0,1,0,0,0
|
39
|
+
30128,S,Armitage (Loop-bound),-87.652644,41.918217,Armitage,Armitage (Brown & Purple Lines),40660,1,0,0,1,0,0,1,0,0,0
|
40
|
+
30205,N,Ashland (Loop-bound),-87.665317,41.839234,Ashland,Ashland (Orange Line),41060,1,0,0,0,0,0,0,0,0,1
|
41
|
+
30206,S,Ashland (Midway-bound),-87.665317,41.839234,Ashland,Ashland (Orange Line),41060,1,0,0,0,0,0,0,0,0,1
|
42
|
+
30032,E,Ashland (Harlem-54th/Cermak-bound),-87.666969,41.885269,Ashland,Ashland (Green & Pink Lines),40170,1,0,0,0,1,0,0,0,1,0
|
43
|
+
30033,W,Ashland (Loop-63rd-bound),-87.666969,41.885269,Ashland,Ashland (Green & Pink Lines),40170,1,0,0,0,1,0,0,0,1,0
|
44
|
+
30056,E,Ashland/63rd (Harlem-bound),-87.663766,41.77886,Ashland/63rd,Ashland/63rd (Green Line),40290,1,0,0,0,1,0,0,0,0,0
|
45
|
+
30057,W,Ashland/63rd (Terminal arrival),-87.663766,41.77886,Ashland/63rd,Ashland/63rd (Green Line),40290,1,0,0,0,1,0,0,0,0,0
|
46
|
+
30002,W,Austin (Forest Pk-bound),-87.776812,41.870851,Austin,Austin (Blue Line),40010,0,0,1,0,0,0,0,0,0,0
|
47
|
+
30001,E,Austin (O'Hare-bound),-87.776812,41.870851,Austin,Austin (Blue Line),40010,0,0,1,0,0,0,0,0,0,0
|
48
|
+
30243,E,Austin (63rd-bound),-87.774135,41.887293,Austin,Austin (Green Line),41260,0,0,0,0,1,0,0,0,0,0
|
49
|
+
30244,W,Austin (Harlem-bound),-87.774135,41.887293,Austin,Austin (Green Line),41260,0,0,0,0,1,0,0,0,0,0
|
50
|
+
30013,S,Belmont (O'Hare Branch) (Forest Pk-bound),-87.712359,41.938132,Belmont,Belmont (Blue Line),40060,0,0,1,0,0,0,0,0,0,0
|
51
|
+
30012,N,Belmont (O'Hare Branch) (O'Hare-bound),-87.712359,41.938132,Belmont,Belmont (Blue Line),40060,0,0,1,0,0,0,0,0,0,0
|
52
|
+
30256,S,Belmont (95th-bound),-87.65338,41.939751,Belmont,"Belmont (Red, Brown & Purple Lines)",41320,1,1,0,0,0,0,0,0,0,0
|
53
|
+
30255,N,Belmont (Howard-bound),-87.65338,41.939751,Belmont,"Belmont (Red, Brown & Purple Lines)",41320,1,1,0,0,0,0,0,0,0,0
|
54
|
+
30257,N,Belmont (Kimball-Linden-bound),-87.65338,41.939751,Belmont,"Belmont (Red, Brown & Purple Lines)",41320,1,0,0,1,0,0,1,0,0,0
|
55
|
+
30258,S,Belmont (Loop-bound),-87.65338,41.939751,Belmont,"Belmont (Red, Brown & Purple Lines)",41320,1,0,0,1,0,0,1,0,0,0
|
56
|
+
30067,S,Berwyn (95th-bound),-87.658668,41.977984,Berwyn,Berwyn (Red Line),40340,0,1,0,0,0,0,0,0,0,0
|
57
|
+
30066,N,Berwyn (Howard-bound),-87.658668,41.977984,Berwyn,Berwyn (Red Line),40340,0,1,0,0,0,0,0,0,0,0
|
58
|
+
30268,S,Bryn Mawr (95th-bound),-87.65884,41.983504,Bryn Mawr,Bryn Mawr (Red Line),41380,0,1,0,0,0,0,0,0,0,0
|
59
|
+
30267,N,Bryn Mawr (Howard-bound),-87.65884,41.983504,Bryn Mawr,Bryn Mawr (Red Line),41380,0,1,0,0,0,0,0,0,0,0
|
60
|
+
30087,W,California (54th/Cermak-bound),-87.694774,41.854109,California,California (Pink Line),40440,1,0,0,0,0,0,0,0,1,0
|
61
|
+
30086,E,California (Loop-bound),-87.694774,41.854109,California,California (Pink Line),40440,1,0,0,0,0,0,0,0,1,0
|
62
|
+
30112,S,California/Milwaukee (Forest Pk-bound),-87.69689,41.921939,California,California (Blue Line),40570,0,0,1,0,0,0,0,0,0,0
|
63
|
+
30265,E,California (63rd-bound),-87.696234,41.88422,California,California (Green Line),41360,1,0,0,0,1,0,0,0,0,0
|
64
|
+
30266,W,California (Harlem-bound),-87.696234,41.88422,California,California (Green Line),41360,1,0,0,0,1,0,0,0,0,0
|
65
|
+
30111,N,California/Milwaukee (O'Hare-bound),-87.69689,41.921939,California,California (Blue Line),40570,0,0,1,0,0,0,0,0,0,0
|
66
|
+
30242,S,Central-Evanston (Howard-Loop-bound),-87.685617,42.063987,Central,Central (Purple Line),41250,0,0,0,0,0,1,1,0,0,0
|
67
|
+
30241,N,Central-Evanston (Linden-bound),-87.685617,42.063987,Central,Central (Purple Line),41250,0,0,0,0,0,1,1,0,0,0
|
68
|
+
30054,E,Central (63rd-bound),-87.76565,41.887389,Central,Central (Green Line),40280,1,0,0,0,1,0,0,0,0,0
|
69
|
+
30055,W,Central (Harlem-bound),-87.76565,41.887389,Central,Central (Green Line),40280,1,0,0,0,1,0,0,0,0,0
|
70
|
+
30152,W,Central Park (54th/Cermak-bound),-87.714842,41.853839,Central Park,Central Park (Pink Line),40780,1,0,0,0,0,0,0,0,1,0
|
71
|
+
30151,E,Central Park (Loop-bound),-87.714842,41.853839,Central Park,Central Park (Pink Line),40780,1,0,0,0,0,0,0,0,1,0
|
72
|
+
30194,S,Cermak-Chinatown (95th-bound),-87.630968,41.853206,Cermak-Chinatown,Cermak-Chinatown (Red Line),41000,1,1,0,0,0,0,0,0,0,0
|
73
|
+
30193,N,Cermak-Chinatown (Howard-bound),-87.630968,41.853206,Cermak-Chinatown,Cermak-Chinatown (Red Line),41000,1,1,0,0,0,0,0,0,0,0
|
74
|
+
30272,S,Chicago/Milwaukee (Forest Pk-bound),-87.655214,41.896075,Chicago,Chicago (Blue Line),41410,0,0,1,0,0,0,0,0,0,0
|
75
|
+
30271,N,Chicago/Milwaukee (O'Hare-bound),-87.655214,41.896075,Chicago,Chicago (Blue Line),41410,0,0,1,0,0,0,0,0,0,0
|
76
|
+
30137,N,Chicago/Franklin (Kimball-Linden-bound),-87.635924,41.89681,Chicago,Chicago (Brown & Purple Lines),40710,1,0,0,1,0,0,1,0,0,0
|
77
|
+
30138,S,Chicago/Franklin (Loop-bound),-87.635924,41.89681,Chicago,Chicago (Brown & Purple Lines),40710,1,0,0,1,0,0,1,0,0,0
|
78
|
+
30280,S,Chicago/State (95th-bound),-87.628176,41.896671,Chicago,Chicago (Red Line),41450,1,1,0,0,0,0,0,0,0,0
|
79
|
+
30279,N,Chicago/State (Howard-bound),-87.628176,41.896671,Chicago,Chicago (Red Line),41450,1,1,0,0,0,0,0,0,0,0
|
80
|
+
30083,W,Cicero (54th/Cermak-bound),-87.745336,41.85182,Cicero,Cicero (Pink Line),40420,1,0,0,0,0,0,0,0,1,0
|
81
|
+
30082,E,Cicero (Loop-bound),-87.745336,41.85182,Cicero,Cicero (Pink Line),40420,1,0,0,0,0,0,0,0,1,0
|
82
|
+
30188,W,Cicero (Forest Pk-bound),-87.745154,41.871574,Cicero,Cicero (Blue Line),40970,0,0,1,0,0,0,0,0,0,0
|
83
|
+
30187,E,Cicero (O'Hare-bound),-87.745154,41.871574,Cicero,Cicero (Blue Line),40970,0,0,1,0,0,0,0,0,0,0
|
84
|
+
30094,E,Cicero (63rd-bound),-87.744698,41.886519,Cicero,Cicero (Green Line),40480,1,0,0,0,1,0,0,0,0,0
|
85
|
+
30009,W,Cicero (Harlem-bound),-87.744698,41.886519,Cicero,Cicero (Green Line),40480,1,0,0,0,1,0,0,0,0,0
|
86
|
+
30122,S,Clark/Division (95th-bound),-87.631412,41.90392,Clark/Division,Clark/Division (Red Line),40630,0,1,0,0,0,0,0,0,0,0
|
87
|
+
30121,N,Clark/Division (Howard-bound),-87.631412,41.90392,Clark/Division,Clark/Division (Red Line),40630,0,1,0,0,0,0,0,0,0,0
|
88
|
+
30074,E,Clark/Lake (Inner Loop),-87.630886,41.885737,Clark/Lake,"Clark/Lake (Blue, Brown, Green, Orange, Purple & Pink Lines)",40380,1,0,0,0,1,0,1,0,1,1
|
89
|
+
30075,W,Clark/Lake (Outer Loop),-87.630886,41.885737,Clark/Lake,"Clark/Lake (Blue, Brown, Green, Orange, Purple & Pink Lines)",40380,1,0,0,1,1,0,0,0,0,0
|
90
|
+
30374,S,Clark/Lake (Forest Pk-bound),-87.630886,41.885737,Clark/Lake,"Clark/Lake (Blue, Brown, Green, Orange, Purple & Pink Lines)",40380,1,0,1,0,0,0,0,0,0,0
|
91
|
+
30375,N,Clark/Lake (O'Hare-bound),-87.630886,41.885737,Clark/Lake,"Clark/Lake (Blue, Brown, Green, Orange, Purple & Pink Lines)",40380,1,0,1,0,0,0,0,0,0,0
|
92
|
+
30085,W,Clinton (Forest Pk-bound),-87.640984,41.875539,Clinton,Clinton (Blue Line),40430,0,0,1,0,0,0,0,0,0,0
|
93
|
+
30084,E,Clinton (O'Hare-bound),-87.640984,41.875539,Clinton,Clinton (Blue Line),40430,0,0,1,0,0,0,0,0,0,0
|
94
|
+
30222,W,Clinton (Harlem-54th/Cermak-bound),-87.641782,41.885678,Clinton,Clinton (Green & Pink Lines),41160,1,0,0,0,1,0,0,0,1,0
|
95
|
+
30221,E,Clinton (Loop-63rd-bound),-87.641782,41.885678,Clinton,Clinton (Green & Pink Lines),41160,1,0,0,0,1,0,0,0,1,0
|
96
|
+
30291,E,Conservatory (63rd-bound),-87.716523,41.884904,Conservatory,Conservatory (Green Line),41670,1,0,0,0,1,0,0,0,0,0
|
97
|
+
30292,W,Conservatory (Harlem-bound),-87.716523,41.884904,Conservatory,Conservatory (Green Line),41670,1,0,0,0,1,0,0,0,0,0
|
98
|
+
30139,E,Cottage Grove (Terminal arrival),-87.605857,41.780309,Cottage Grove,Cottage Grove (Green Line),40720,1,0,0,0,1,0,0,0,0,0
|
99
|
+
30140,W,East 63rd-Cottage Grove (Harlem-bound),-87.605857,41.780309,Cottage Grove,Cottage Grove (Green Line),40720,1,0,0,0,1,0,0,0,0,0
|
100
|
+
30045,S,Cumberland (Forest Pk-bound),-87.838028,41.984246,Cumberland,Cumberland (Blue Line),40230,1,0,1,0,0,0,0,0,0,0
|
101
|
+
30044,N,Cumberland (O'Hare-bound),-87.838028,41.984246,Cumberland,Cumberland (Blue Line),40230,1,0,1,0,0,0,0,0,0,0
|
102
|
+
30041,W,Damen (54th/Cermak-bound),-87.675975,41.854517,Damen,Damen (Pink Line),40210,1,0,0,0,0,0,0,0,1,0
|
103
|
+
30040,E,Damen (Loop-bound),-87.675975,41.854517,Damen,Damen (Pink Line),40210,1,0,0,0,0,0,0,0,1,0
|
104
|
+
30116,S,Damen/Milwaukee (Forest Pk-bound),-87.677437,41.909744,Damen,Damen (Blue Line),40590,0,0,1,0,0,0,0,0,0,0
|
105
|
+
30115,N,Damen/Milwaukee (O'Hare-bound),-87.677437,41.909744,Damen,Damen (Blue Line),40590,0,0,1,0,0,0,0,0,0,0
|
106
|
+
30018,N,Damen (Kimball-bound),-87.678639,41.966286,Damen,Damen (Brown Line),40090,1,0,0,1,0,0,0,0,0,0
|
107
|
+
30019,S,Damen (Loop-bound),-87.678639,41.966286,Damen,Damen (Brown Line),40090,1,0,0,1,0,0,0,0,0,0
|
108
|
+
30011,S,Davis (Howard-Loop-bound),-87.683543,42.04771,Davis,Davis (Purple Line),40050,1,0,0,0,0,1,1,0,0,0
|
109
|
+
30010,N,Davis (Linden-bound),-87.683543,42.04771,Davis,Davis (Purple Line),40050,1,0,0,0,0,1,1,0,0,0
|
110
|
+
30134,S,Dempster (Howard-Loop-bound),-87.681602,42.041655,Dempster,Dempster (Purple Line),40690,0,0,0,0,0,1,1,0,0,0
|
111
|
+
30133,N,Dempster (Linden-bound),-87.681602,42.041655,Dempster,Dempster (Purple Line),40690,0,0,0,0,0,1,1,0,0,0
|
112
|
+
30103,N,Diversey (Kimball-Linden-bound),-87.653131,41.932732,Diversey,Diversey (Brown & Purple Lines),40530,1,0,0,1,0,0,1,0,0,0
|
113
|
+
30104,S,Diversey (Loop-bound),-87.653131,41.932732,Diversey,Diversey (Brown & Purple Lines),40530,1,0,0,1,0,0,1,0,0,0
|
114
|
+
30063,S,Division/Milwaukee (Forest Pk-bound),-87.666496,41.903355,Division,Division (Blue Line),40320,0,0,1,0,0,0,0,0,0,0
|
115
|
+
30062,N,Division/Milwaukee (O'Hare-bound),-87.666496,41.903355,Division,Division (Blue Line),40320,0,0,1,0,0,0,0,0,0,0
|
116
|
+
30076,E,Forest Park (O'Hare-bound),-87.817318,41.874257,Forest Park,Forest Park (Blue Line),40390,1,0,1,0,0,0,0,0,0,0
|
117
|
+
30077,W,Forest Park (Terminal Arrival),-87.817318,41.874257,Forest Park,Forest Park (Blue Line),40390,1,0,1,0,0,0,0,0,0,0
|
118
|
+
30102,S,Foster (Howard-Loop-bound),-87.68356,42.05416,Foster,Foster (Purple Line),40520,0,0,0,0,0,1,1,0,0,0
|
119
|
+
30101,N,Foster (Linden-bound),-87.68356,42.05416,Foster,Foster (Purple Line),40520,0,0,0,0,0,1,1,0,0,0
|
120
|
+
30167,N,Francisco (Kimball-bound),-87.701644,41.966046,Francisco,Francisco (Brown Line),40870,1,0,0,1,0,0,0,0,0,0
|
121
|
+
30168,S,Francisco (Loop-bound),-87.701644,41.966046,Francisco,Francisco (Brown Line),40870,1,0,0,1,0,0,0,0,0,0
|
122
|
+
30234,S,Fullerton (95th-bound),-87.652866,41.925051,Fullerton,"Fullerton (Red, Brown & Purple Lines)",41220,1,1,0,0,0,0,0,0,0,0
|
123
|
+
30233,N,Fullerton (Howard-bound),-87.652866,41.925051,Fullerton,"Fullerton (Red, Brown & Purple Lines)",41220,1,1,0,0,0,0,0,0,0,0
|
124
|
+
30235,N,Fullerton (Kimball-Linden-bound),-87.652866,41.925051,Fullerton,"Fullerton (Red, Brown & Purple Lines)",41220,1,0,0,1,0,0,1,0,0,0
|
125
|
+
30236,S,Fullerton (Loop-bound),-87.652866,41.925051,Fullerton,"Fullerton (Red, Brown & Purple Lines)",41220,1,0,0,1,0,0,1,0,0,0
|
126
|
+
30100,S,Garfield (63rd-bound),-87.618327,41.795172,Garfield,Garfield (Green Line),40510,1,0,0,0,1,0,0,0,0,0
|
127
|
+
30099,N,Garfield (Harlem-bound),-87.618327,41.795172,Garfield,Garfield (Green Line),40510,1,0,0,0,1,0,0,0,0,0
|
128
|
+
30224,S,Garfield-Dan Ryan (95th-bound),-87.631157,41.79542,Garfield,Garfield (Red Line),41170,0,1,0,0,0,0,0,0,0,0
|
129
|
+
30223,N,Garfield-Dan Ryan (Howard-bound),-87.631157,41.79542,Garfield,Garfield (Red Line),41170,0,1,0,0,0,0,0,0,0,0
|
130
|
+
30096,S,Grand/Milwaukee (Forest Pk-bound),-87.647578,41.891189,Grand,Grand (Blue Line),40490,0,0,1,0,0,0,0,0,0,0
|
131
|
+
30095,N,Grand/Milwaukee (O'Hare-bound),-87.647578,41.891189,Grand,Grand (Blue Line),40490,0,0,1,0,0,0,0,0,0,0
|
132
|
+
30065,S,Grand/State (95th-bound),-87.628021,41.891665,Grand,Grand (Red Line),40330,1,1,0,0,0,0,0,0,0,0
|
133
|
+
30064,N,Grand/State (Howard-bound),-87.628021,41.891665,Grand,Grand (Red Line),40330,1,1,0,0,0,0,0,0,0,0
|
134
|
+
30148,S,Granville (95th-bound),-87.659202,41.993664,Granville,Granville (Red Line),40760,1,1,0,0,0,0,0,0,0,0
|
135
|
+
30147,N,Granville (Howard-bound),-87.659202,41.993664,Granville,Granville (Red Line),40760,1,1,0,0,0,0,0,0,0,0
|
136
|
+
30215,N,Halsted (Loop-bound),-87.648088,41.84678,Halsted,Halsted (Orange Line),41130,1,0,0,0,0,0,0,0,0,1
|
137
|
+
30216,S,Halsted (Midway-bound),-87.648088,41.84678,Halsted,Halsted (Orange Line),41130,1,0,0,0,0,0,0,0,0,1
|
138
|
+
30184,W,Halsted/63rd (Ashland-bound),-87.644244,41.778943,Halsted,Halsted (Green Line),40940,1,0,0,0,1,0,0,0,0,0
|
139
|
+
30183,E,Halsted/63rd (Harlem-bound),-87.644244,41.778943,Halsted,Halsted (Green Line),40940,1,0,0,0,1,0,0,0,0,0
|
140
|
+
30190,W,Harlem (Forest Pk-bound),-87.806961,41.87349,Harlem,Harlem (Blue Line - Forest Park Branch),40980,0,0,1,0,0,0,0,0,0,0
|
141
|
+
30189,E,Harlem (O'Hare-bound),-87.806961,41.87349,Harlem,Harlem (Blue Line - Forest Park Branch),40980,0,0,1,0,0,0,0,0,0,0
|
142
|
+
30146,S,Harlem (O'Hare Branch) (Forest Pk-bound),-87.8089,41.98227,Harlem,Harlem (Blue Line - O'Hare Branch),40750,1,0,1,0,0,0,0,0,0,0
|
143
|
+
30145,N,Harlem (O'Hare Branch) (O'Hare-bound),-87.8089,41.98227,Harlem,Harlem (Blue Line - O'Hare Branch),40750,1,0,1,0,0,0,0,0,0,0
|
144
|
+
30004,W,Harlem (Terminal arrival),-87.803176,41.886848,Harlem/Lake,Harlem/Lake (Green Line),40020,1,0,0,0,1,0,0,0,0,0
|
145
|
+
30003,E,Harlem (63rd-bound),-87.803176,41.886848,Harlem/Lake,Harlem/Lake (Green Line),40020,1,0,0,0,1,0,0,0,0,0
|
146
|
+
30166,W,Library (Inner Loop),-87.628196,41.876862,Harold Washington Library-State/Van Buren,"Harold Washington Library-State/Van Buren (Brown, Orange, Purple & Pink Lines)",40850,1,0,0,0,0,0,1,0,1,1
|
147
|
+
30165,E,Library (Outer Loop),-87.628196,41.876862,Harold Washington Library-State/Van Buren,"Harold Washington Library-State/Van Buren (Brown, Orange, Purple & Pink Lines)",40850,1,0,0,1,0,0,0,0,0,0
|
148
|
+
30286,S,Harrison (95th-bound),-87.627479,41.874039,Harrison,Harrison (Red Line),41490,0,1,0,0,0,0,0,0,0,0
|
149
|
+
30285,N,Harrison (Howard-bound),-87.627479,41.874039,Harrison,Harrison (Red Line),41490,0,1,0,0,0,0,0,0,0,0
|
150
|
+
30175,N,"Howard (NB) (Linden, Skokie-bound)",-87.672892,42.019063,Howard,"Howard (Red, Purple & Yellow Lines)",40900,1,0,0,0,0,1,1,1,0,0
|
151
|
+
30176,S,Howard (Terminal arrival),-87.672892,42.019063,Howard,"Howard (Red, Purple & Yellow Lines)",40900,1,0,0,0,0,1,1,1,0,0
|
152
|
+
30173,N,Howard (Terminal arrival),-87.672892,42.019063,Howard,"Howard (Red, Purple & Yellow Lines)",40900,1,1,0,0,0,0,0,0,0,0
|
153
|
+
30174,S,Howard (95th-Bound),-87.672892,42.019063,Howard,"Howard (Red, Purple & Yellow Lines)",40900,1,1,0,0,0,0,0,0,0,0
|
154
|
+
30158,W,Illinois Medical District (Forest Pk-bound),-87.673932,41.875706,Illinois Medical District,Illinois Medical District (Blue Line),40810,1,0,1,0,0,0,0,0,0,0
|
155
|
+
30157,E,Illinois Medical District (O'Hare-bound),-87.673932,41.875706,Illinois Medical District,Illinois Medical District (Blue Line),40810,1,0,1,0,0,0,0,0,0,0
|
156
|
+
30059,S,Indiana (63rd-bound),-87.621371,41.821732,Indiana,Indiana (Green Line),40300,1,0,0,0,1,0,0,0,0,0
|
157
|
+
30058,N,Indiana (Harlem-bound),-87.621371,41.821732,Indiana,Indiana (Green Line),40300,1,0,0,0,1,0,0,0,0,0
|
158
|
+
30108,S,Irving Park (O'Hare Branch) (Forest Pk-bound),-87.729229,41.952925,Irving Park,Irving Park (Blue Line),40550,0,0,1,0,0,0,0,0,0,0
|
159
|
+
30107,N,Irving Park (O'Hare Branch) (O'Hare-bound),-87.729229,41.952925,Irving Park,Irving Park (Blue Line),40550,0,0,1,0,0,0,0,0,0,0
|
160
|
+
30281,N,Irving Park (Kimball-bound),-87.674868,41.954521,Irving Park,Irving Park (Brown Line),41460,1,0,0,1,0,0,0,0,0,0
|
161
|
+
30282,S,Irving Park (Loop-bound),-87.674868,41.954521,Irving Park,Irving Park (Brown Line),41460,1,0,0,1,0,0,0,0,0,0
|
162
|
+
30015,S,Jackson/Dearborn (Forest Pk-bound),-87.629296,41.878183,Jackson,Jackson (Blue Line),40070,1,0,1,0,0,0,0,0,0,0
|
163
|
+
30014,N,Jackson/Dearborn (O'Hare-bound),-87.629296,41.878183,Jackson,Jackson (Blue Line),40070,1,0,1,0,0,0,0,0,0,0
|
164
|
+
30110,S,Jackson/State (95th-bound),-87.627596,41.878153,Jackson,Jackson (Red Line),40560,1,1,0,0,0,0,0,0,0,0
|
165
|
+
30109,N,Jackson/State (Howard-bound),-87.627596,41.878153,Jackson,Jackson (Red Line),40560,1,1,0,0,0,0,0,0,0,0
|
166
|
+
30228,S,Jarvis (95th-bound),-87.669092,42.015876,Jarvis,Jarvis (Red Line),41190,0,1,0,0,0,0,0,0,0,0
|
167
|
+
30227,N,Jarvis (Howard-bound),-87.669092,42.015876,Jarvis,Jarvis (Red Line),41190,0,1,0,0,0,0,0,0,0,0
|
168
|
+
30248,S,Jefferson Park (Forest Pk-bound),-87.760892,41.970634,Jefferson Park,Jefferson Park (Blue Line),41280,1,0,1,0,0,0,0,0,0,0
|
169
|
+
30247,N,Jefferson Park (O'Hare-bound),-87.760892,41.970634,Jefferson Park,Jefferson Park (Blue Line),41280,1,0,1,0,0,0,0,0,0,0
|
170
|
+
30219,N,Kedzie (Loop-bound),-87.704406,41.804236,Kedzie,Kedzie (Orange Line),41150,1,0,0,0,0,0,0,0,0,1
|
171
|
+
30220,S,Kedzie (Midway-bound),-87.704406,41.804236,Kedzie,Kedzie (Orange Line),41150,1,0,0,0,0,0,0,0,0,1
|
172
|
+
30202,W,Kedzie (54th/Cermak-bound),-87.705408,41.853964,Kedzie,Kedzie (Pink Line),41040,1,0,0,0,0,0,0,0,1,0
|
173
|
+
30201,E,Kedzie (Loop-bound),-87.705408,41.853964,Kedzie,Kedzie (Pink Line),41040,1,0,0,0,0,0,0,0,1,0
|
174
|
+
30225,N,Kedzie (Kimball-bound),-87.708821,41.965996,Kedzie,Kedzie (Brown Line),41180,1,0,0,1,0,0,0,0,0,0
|
175
|
+
30226,S,Kedzie (Loop-bound),-87.708821,41.965996,Kedzie,Kedzie (Brown Line),41180,1,0,0,1,0,0,0,0,0,0
|
176
|
+
30207,E,Kedzie (63rd-bound),-87.706155,41.884321,Kedzie,Kedzie (Green Line),41070,1,0,0,0,1,0,0,0,0,0
|
177
|
+
30208,W,Kedzie (Harlem-bound),-87.706155,41.884321,Kedzie,Kedzie (Green Line),41070,1,0,0,0,1,0,0,0,0,0
|
178
|
+
30049,W,Kedzie-Homan (Forest Pk-bound),-87.70604,41.874341,Kedzie-Homan,Kedzie-Homan (Blue Line),40250,1,0,1,0,0,0,0,0,0,0
|
179
|
+
30048,E,Kedzie-Homan (O'Hare-bound),-87.70604,41.874341,Kedzie-Homan,Kedzie-Homan (Blue Line),40250,1,0,1,0,0,0,0,0,0,0
|
180
|
+
30250,S,Kimball (Loop-bound),-87.713065,41.967901,Kimball,Kimball (Brown Line),41290,1,0,0,1,0,0,0,0,0,0
|
181
|
+
30249,N,Kimball (Terminal arrival),-87.713065,41.967901,Kimball,Kimball (Brown Line),41290,1,0,0,1,0,0,0,0,0,0
|
182
|
+
30217,E,King Drive (Cottage Grove-bound),-87.615546,41.78013,King Drive,King Drive (Green Line),41140,1,0,0,0,1,0,0,0,0,0
|
183
|
+
30218,W,King Drive (Harlem-bound),-87.615546,41.78013,King Drive,King Drive (Green Line),41140,1,0,0,0,1,0,0,0,0,0
|
184
|
+
30118,W,Kostner (54th/Cermak-bound),-87.733258,41.853751,Kostner,Kostner (Pink Line),40600,1,0,0,0,0,0,0,0,1,0
|
185
|
+
30117,E,Kostner (Loop-bound),-87.733258,41.853751,Kostner,Kostner (Pink Line),40600,1,0,0,0,0,0,0,0,1,0
|
186
|
+
30290,S,Lake/State (95th-bound),-87.627813,41.884809,Lake,Lake (Red Line),41660,1,1,0,0,0,0,0,0,0,0
|
187
|
+
30289,N,Lake/State (Howard-bound),-87.627813,41.884809,Lake,Lake (Red Line),41660,1,1,0,0,0,0,0,0,0,0
|
188
|
+
30135,E,Laramie (63rd-bound),-87.754986,41.887163,Laramie,Laramie (Green Line),40700,1,0,0,0,1,0,0,0,0,0
|
189
|
+
30136,W,Laramie (Harlem-bound),-87.754986,41.887163,Laramie,Laramie (Green Line),40700,1,0,0,0,1,0,0,0,0,0
|
190
|
+
30262,W,LaSalle (Forest Pk-bound),-87.631722,41.875568,LaSalle,LaSalle (Blue Line),41340,0,0,1,0,0,0,0,0,0,0
|
191
|
+
30261,E,LaSalle (O'Hare-bound),-87.631722,41.875568,LaSalle,LaSalle (Blue Line),41340,0,0,1,0,0,0,0,0,0,0
|
192
|
+
30031,W,LaSalle/Van Buren (Inner Loop),-87.631739,41.8768,LaSalle/Van Buren,"LaSalle/Van Buren (Brown, Orange, Purple & Pink Lines)",40160,0,0,0,0,0,0,1,0,1,1
|
193
|
+
30030,E,LaSalle/Van Buren (Outer Loop),-87.631739,41.8768,LaSalle/Van Buren,"LaSalle/Van Buren (Brown, Orange, Purple & Pink Lines)",40160,0,0,0,1,0,0,0,0,0,0
|
194
|
+
30150,S,Lawrence (95th-bound),-87.658493,41.969139,Lawrence,Lawrence (Red Line),40770,0,1,0,0,0,0,0,0,0,0
|
195
|
+
30149,N,Lawrence (Howard-bound),-87.658493,41.969139,Lawrence,Lawrence (Red Line),40770,0,1,0,0,0,0,0,0,0,0
|
196
|
+
30204,S,Linden (Howard-Loop-bound),-87.69073,42.073153,Linden,Linden (Purple Line),41050,1,0,0,0,0,1,1,0,0,0
|
197
|
+
30203,N,Linden (Linden-bound),-87.69073,42.073153,Linden,Linden (Purple Line),41050,1,0,0,0,0,1,1,0,0,0
|
198
|
+
30198,S,Logan Square (Forest Pk-bound),-87.708541,41.929728,Logan Square,Logan Square (Blue Line),41020,1,0,1,0,0,0,0,0,0,0
|
199
|
+
30197,N,Logan Square (O'Hare-bound),-87.708541,41.929728,Logan Square,Logan Square (Blue Line),41020,1,0,1,0,0,0,0,0,0,0
|
200
|
+
30252,S,Loyola (95th-bound),-87.661061,42.001073,Loyola,Loyola (Red Line),41300,1,1,0,0,0,0,0,0,0,0
|
201
|
+
30251,N,Loyola (Howard-bound),-87.661061,42.001073,Loyola,Loyola (Red Line),41300,1,1,0,0,0,0,0,0,0,0
|
202
|
+
30124,S,Madison/Wabash (Inner Loop),-87.626098,41.882023,Madison/Wabash,"Madison/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40640,0,0,0,0,1,0,1,0,1,1
|
203
|
+
30123,N,Madison/Wabash (Outer Loop),-87.626098,41.882023,Madison/Wabash,"Madison/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40640,0,0,0,1,1,0,0,0,0,0
|
204
|
+
30053,S,Main (Howard-Loop-bound),-87.679538,42.033456,Main,Main (Purple Line),40270,0,0,0,0,0,1,1,0,0,0
|
205
|
+
30052,N,Main (Linden-bound),-87.679538,42.033456,Main,Main (Purple Line),40270,0,0,0,0,0,1,1,0,0,0
|
206
|
+
30090,N,Merchandise Mart (Kimball-Linden-bound),-87.633924,41.888969,Merchandise Mart,Merchandise Mart (Brown & Purple Lines),40460,1,0,0,1,0,0,1,0,0,0
|
207
|
+
30091,S,Merchandise Mart (Loop-bound),-87.633924,41.888969,Merchandise Mart,Merchandise Mart (Brown & Purple Lines),40460,1,0,0,1,0,0,1,0,0,0
|
208
|
+
30182,S,Midway (Arrival),-87.737875,41.78661,Midway,Midway (Orange Line),40930,1,0,0,0,0,0,0,0,0,1
|
209
|
+
30181,N,Midway (Loop-bound),-87.737875,41.78661,Midway,Midway (Orange Line),40930,1,0,0,0,0,0,0,0,0,1
|
210
|
+
30154,S,Monroe/Dearborn (Forest Pk-bound),-87.629378,41.880703,Monroe,Monroe (Blue Line),40790,0,0,1,0,0,0,0,0,0,0
|
211
|
+
30153,N,Monroe/Dearborn (O'Hare-bound),-87.629378,41.880703,Monroe,Monroe (Blue Line),40790,0,0,1,0,0,0,0,0,0,0
|
212
|
+
30212,S,Monroe/State (95th-bound),-87.627696,41.880745,Monroe,Monroe (Red Line),41090,0,1,0,0,0,0,0,0,0,0
|
213
|
+
30211,N,Monroe/State (Howard-bound),-87.627696,41.880745,Monroe,Monroe (Red Line),41090,0,1,0,0,0,0,0,0,0,0
|
214
|
+
30260,S,Montrose (Forest Pk-bound),-87.743574,41.961539,Montrose,Montrose (Blue Line),41330,0,0,1,0,0,0,0,0,0,0
|
215
|
+
30259,N,Montrose (O'Hare-bound),-87.743574,41.961539,Montrose,Montrose (Blue Line),41330,0,0,1,0,0,0,0,0,0,0
|
216
|
+
30287,N,Montrose (Kimball-bound),-87.675047,41.961756,Montrose,Montrose (Brown Line),41500,1,0,0,1,0,0,0,0,0,0
|
217
|
+
30288,S,Montrose (Loop-bound),-87.675047,41.961756,Montrose,Montrose (Brown Line),41500,1,0,0,1,0,0,0,0,0,0
|
218
|
+
30296,W,Morgan (Harlem-54th/Cermak-bound),-87.652193,41.885586,Morgan,Morgan (Green & Pink Lines),41510,1,0,0,0,1,0,0,0,1,0
|
219
|
+
30295,E,Morgan (Loop-63rd-bound),-87.652193,41.885586,Morgan,Morgan (Green & Pink Lines),41510,1,0,0,0,1,0,0,0,1,0
|
220
|
+
30021,S,Morse (95th-bound),-87.665909,42.008362,Morse,Morse (Red Line),40100,0,1,0,0,0,0,0,0,0,0
|
221
|
+
30020,N,Morse (Howard-bound),-87.665909,42.008362,Morse,Morse (Red Line),40100,0,1,0,0,0,0,0,0,0,0
|
222
|
+
30126,S,North/Clybourn (95th-bound),-87.649177,41.910655,North/Clybourn,North/Clybourn (Red Line),40650,0,1,0,0,0,0,0,0,0,0
|
223
|
+
30125,N,North/Clybourn (Howard-bound),-87.649177,41.910655,North/Clybourn,North/Clybourn (Red Line),40650,0,1,0,0,0,0,0,0,0,0
|
224
|
+
30079,S,Noyes (Howard-Loop-bound),-87.683337,42.058282,Noyes,Noyes (Purple Line),40400,0,0,0,0,0,1,1,0,0,0
|
225
|
+
30078,N,Noyes (Linden-bound),-87.683337,42.058282,Noyes,Noyes (Purple Line),40400,0,0,0,0,0,1,1,0,0,0
|
226
|
+
30035,W,Oak Park (Forest Pk-bound),-87.791602,41.872108,Oak Park,Oak Park (Blue Line),40180,0,0,1,0,0,0,0,0,0,0
|
227
|
+
30034,E,Oak Park (O'Hare-bound),-87.791602,41.872108,Oak Park,Oak Park (Blue Line),40180,0,0,1,0,0,0,0,0,0,0
|
228
|
+
30263,E,Oak Park (63rd-bound),-87.793783,41.886988,Oak Park,Oak Park (Green Line),41350,0,0,0,0,1,0,0,0,0,0
|
229
|
+
30264,W,Oak Park (Harlem-bound),-87.793783,41.886988,Oak Park,Oak Park (Green Line),41350,0,0,0,0,1,0,0,0,0,0
|
230
|
+
30297,N,Oakton (Dempster-Skokie-bound),-87.74722084,42.02624348,Oakton-Skokie,Oakton-Skokie (Yellow Line),41680,1,0,0,0,0,0,0,1,0,0
|
231
|
+
30298,S,Oakton (Howard-bound),-87.74722084,42.02624348,Oakton-Skokie,Oakton-Skokie (Yellow Line),41680,1,0,0,0,0,0,0,1,0,0
|
232
|
+
30172,S,O'Hare Airport (Forest Pk-bound),-87.90422307,41.97766526,O'Hare,O'Hare (Blue Line),40890,1,0,1,0,0,0,0,0,0,0
|
233
|
+
30171,N,O'Hare Airport (Terminal Arrival),-87.90422307,41.97766526,O'Hare,O'Hare (Blue Line),40890,1,0,1,0,0,0,0,0,0,0
|
234
|
+
30253,N,Paulina (Kimball-bound),-87.670907,41.943623,Paulina,Paulina (Brown Line),41310,1,0,0,1,0,0,0,0,0,0
|
235
|
+
30254,S,Paulina (Loop-bound),-87.670907,41.943623,Paulina,Paulina (Brown Line),41310,1,0,0,1,0,0,0,0,0,0
|
236
|
+
30200,W,Polk (54th/Cermak-bound),-87.66953,41.871551,Polk,Polk (Pink Line),41030,1,0,0,0,0,0,0,0,1,0
|
237
|
+
30199,E,Polk (Loop-bound),-87.66953,41.871551,Polk,Polk (Pink Line),41030,1,0,0,0,0,0,0,0,1,0
|
238
|
+
30185,N,Pulaski (Loop-bound),-87.724493,41.799756,Pulaski,Pulaski (Orange Line),40960,1,0,0,0,0,0,0,0,0,1
|
239
|
+
30186,S,Pulaski (Midway-bound),-87.724493,41.799756,Pulaski,Pulaski (Orange Line),40960,1,0,0,0,0,0,0,0,0,1
|
240
|
+
30029,W,Pulaski (54th/Cermak-bound),-87.724311,41.853732,Pulaski,Pulaski (Pink Line),40150,1,0,0,0,0,0,0,0,1,0
|
241
|
+
30028,E,Pulaski (Loop-bound),-87.724311,41.853732,Pulaski,Pulaski (Pink Line),40150,1,0,0,0,0,0,0,0,1,0
|
242
|
+
30180,W,Pulaski (Forest Pk-bound),-87.725663,41.873797,Pulaski,Pulaski (Blue Line),40920,0,0,1,0,0,0,0,0,0,0
|
243
|
+
30179,E,Pulaski (O'Hare-bound),-87.725663,41.873797,Pulaski,Pulaski (Blue Line),40920,0,0,1,0,0,0,0,0,0,0
|
244
|
+
30005,E,Pulaski (63rd-bound),-87.725404,41.885412,Pulaski,Pulaski (Green Line),40030,1,0,0,0,1,0,0,0,0,0
|
245
|
+
30006,W,Pulaski (Harlem-bound),-87.725404,41.885412,Pulaski,Pulaski (Green Line),40030,1,0,0,0,1,0,0,0,0,0
|
246
|
+
30007,N,Quincy/Wells (Inner Loop),-87.63374,41.878723,Quincy/Wells,"Quincy/Wells (Brown, Orange, Purple & Pink Lines)",40040,0,0,0,0,0,0,1,0,1,1
|
247
|
+
30008,S,Quincy/Wells (Outer Loop),-87.63374,41.878723,Quincy/Wells,"Quincy/Wells (Brown, Orange, Purple & Pink Lines)",40040,0,0,0,1,0,0,0,0,0,0
|
248
|
+
30093,W,Racine (Forest Pk-bound),-87.659458,41.87592,Racine,Racine (Blue Line),40470,0,0,1,0,0,0,0,0,0,0
|
249
|
+
30092,E,Racine (O'Hare-bound),-87.659458,41.87592,Racine,Racine (Blue Line),40470,0,0,1,0,0,0,0,0,0,0
|
250
|
+
30039,S,Randolph/Wabash (Inner Loop),-87.626149,41.884431,Randolph/Wabash,"Randolph/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40200,0,0,0,0,1,0,1,0,1,1
|
251
|
+
30038,N,Randolph/Wabash (Outer Loop),-87.626149,41.884431,Randolph/Wabash,"Randolph/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40200,0,0,0,1,1,0,0,0,0,0
|
252
|
+
30119,E,Ridgeland (63rd-bound),-87.783661,41.887159,Ridgeland,Ridgeland (Green Line),40610,0,0,0,0,1,0,0,0,0,0
|
253
|
+
30120,W,Ridgeland (Harlem-bound),-87.783661,41.887159,Ridgeland,Ridgeland (Green Line),40610,0,0,0,0,1,0,0,0,0,0
|
254
|
+
30195,N,Rockwell (Kimball-bound),-87.6941,41.966115,Rockwell,Rockwell (Brown Line),41010,1,0,0,1,0,0,0,0,0,0
|
255
|
+
30196,S,Rockwell (Loop-bound),-87.6941,41.966115,Rockwell,Rockwell (Brown Line),41010,1,0,0,1,0,0,0,0,0,0
|
256
|
+
30080,N,Roosevelt/Wabash (Loop-Harlem-bound),-87.62659,41.867405,Roosevelt,"Roosevelt (Red, Orange & Green Lines)",41400,1,0,0,0,1,0,0,0,0,1
|
257
|
+
30081,S,Roosevelt/Wabash (Midway-63rd-bound),-87.62659,41.867405,Roosevelt,"Roosevelt (Red, Orange & Green Lines)",41400,1,0,0,0,1,0,0,0,0,1
|
258
|
+
30269,N,Roosevelt/State (Howard-bound),-87.627402,41.867368,Roosevelt,"Roosevelt (Red, Orange & Green Lines)",41400,1,1,0,0,0,0,0,0,0,0
|
259
|
+
30270,S,Roosevelt/State (Howard-bound),-87.627402,41.867368,Roosevelt,"Roosevelt (Red, Orange & Green Lines)",41400,1,1,0,0,0,0,0,0,0,0
|
260
|
+
30160,S,Rosemont (Forest Pk-bound),-87.859388,41.983507,Rosemont,Rosemont (Blue Line),40820,1,0,1,0,0,0,0,0,0,0
|
261
|
+
30159,N,Rosemont (O'Hare-bound),-87.859388,41.983507,Rosemont,Rosemont (Blue Line),40820,1,0,1,0,0,0,0,0,0,0
|
262
|
+
30155,N,Sedgwick (Kimball-Linden-bound),-87.639302,41.910409,Sedgwick,Sedgwick (Brown & Purple Lines),40800,1,0,0,1,0,0,1,0,0,0
|
263
|
+
30156,S,Sedgwick (Loop-bound),-87.639302,41.910409,Sedgwick,Sedgwick (Brown & Purple Lines),40800,1,0,0,1,0,0,1,0,0,0
|
264
|
+
30017,S,Sheridan (95th-bound),-87.654929,41.953775,Sheridan,Sheridan (Red Line),40080,0,1,0,0,0,0,0,0,0,0
|
265
|
+
30016,N,Sheridan (Howard-bound),-87.654929,41.953775,Sheridan,Sheridan (Red Line),40080,0,1,0,0,0,0,0,0,0,0
|
266
|
+
30293,N,Sheridan (Howard-Linden-bound),-87.654929,41.953775,Sheridan,Sheridan (Red Line),40080,0,0,0,0,0,0,0,0,0,0
|
267
|
+
30294,S,Sheridan (Loop-bound),-87.654929,41.953775,Sheridan,Sheridan (Red Line),40080,0,0,0,0,0,0,0,0,0,0
|
268
|
+
30026,N,Skokie (Arrival),-87.751919,42.038951,Skokie,Dempster-Skokie (Yellow Line),40140,1,0,0,0,0,0,0,1,0,0
|
269
|
+
30027,S,Skokie (Howard-bound),-87.751919,42.038951,Skokie,Dempster-Skokie (Yellow Line),40140,1,0,0,0,0,0,0,1,0,0
|
270
|
+
30164,S,South Blvd (Howard-Loop-bound),-87.678329,42.027612,South Boulevard,South Boulevard (Purple Line),40840,0,0,0,0,0,1,1,0,0,0
|
271
|
+
30163,N,South Blvd (Linden-bound),-87.678329,42.027612,South Boulevard,South Boulevard (Purple Line),40840,0,0,0,0,0,1,1,0,0,0
|
272
|
+
30070,N,Southport (Kimball-bound),-87.663619,41.943744,Southport,Southport (Brown Line),40360,1,0,0,1,0,0,0,0,0,0
|
273
|
+
30071,S,Southport (Loop-bound),-87.663619,41.943744,Southport,Southport (Brown Line),40360,1,0,0,1,0,0,0,0,0,0
|
274
|
+
30037,S,Sox-35th (95th-bound),-87.630636,41.831191,Sox-35th,Sox-35th (Red Line),40190,1,1,0,0,0,0,0,0,0,0
|
275
|
+
30036,N,Sox-35th (Howard-bound),-87.630636,41.831191,Sox-35th,Sox-35th (Red Line),40190,1,1,0,0,0,0,0,0,0,0
|
276
|
+
30050,E,State/Lake (Inner Loop),-87.627835,41.88574,State/Lake,"State/Lake (Brown, Green, Orange, Pink & Purple Lines)",40260,0,0,0,0,1,0,1,0,1,1
|
277
|
+
30051,W,State/Lake (Outer Loop),-87.627835,41.88574,State/Lake,"State/Lake (Brown, Green, Orange, Pink & Purple Lines)",40260,0,0,0,1,1,0,0,0,0,0
|
278
|
+
30170,S,Thorndale (95th-bound),-87.659076,41.990259,Thorndale,Thorndale (Red Line),40880,0,1,0,0,0,0,0,0,0,0
|
279
|
+
30169,N,Thorndale (Howard-bound),-87.659076,41.990259,Thorndale,Thorndale (Red Line),40880,0,1,0,0,0,0,0,0,0,0
|
280
|
+
30069,W,UIC-Halsted (Forest Pk-bound),-87.649707,41.875474,UIC-Halsted,UIC-Halsted (Blue Line),40350,1,0,1,0,0,0,0,0,0,0
|
281
|
+
30068,E,UIC-Halsted (O'Hare-bound),-87.649707,41.875474,UIC-Halsted,UIC-Halsted (Blue Line),40350,1,0,1,0,0,0,0,0,0,0
|
282
|
+
30073,S,Washington/Dearborn (Forest Pk-bound),-87.62944,41.883164,Washington,Washington (Blue Line),40370,0,0,1,0,0,0,0,0,0,0
|
283
|
+
30072,N,Washington/Dearborn (O'Hare-bound),-87.62944,41.883164,Washington,Washington (Blue Line),40370,0,0,1,0,0,0,0,0,0,0
|
284
|
+
30141,N,Washington/Wells (Inner Loop),-87.63378,41.882695,Washington/Wells,"Washington/Wells (Brown, Orange, Purple & Pink Lines)",40730,1,0,0,0,0,0,1,0,1,1
|
285
|
+
30142,S,Washington/Wells (Outer Loop),-87.63378,41.882695,Washington/Wells,"Washington/Wells (Brown, Orange, Purple & Pink Lines)",40730,1,0,0,1,0,0,0,0,0,0
|
286
|
+
30231,N,Wellington (Kimball-Linden-bound),-87.653266,41.936033,Wellington,Wellington (Brown & Purple Lines),41210,1,0,0,1,0,0,1,0,0,0
|
287
|
+
30232,S,Wellington (Loop-bound),-87.653266,41.936033,Wellington,Wellington (Brown & Purple Lines),41210,1,0,0,1,0,0,1,0,0,0
|
288
|
+
30060,N,Western (Loop-bound),-87.684019,41.804546,Western,Western (Orange Line),40310,1,0,0,0,0,0,0,0,0,1
|
289
|
+
30061,S,Western (Midway-bound),-87.684019,41.804546,Western,Western (Orange Line),40310,1,0,0,0,0,0,0,0,0,1
|
290
|
+
30144,W,Western (54th/Cermak-bound),-87.685129,41.854225,Western,Western (Pink Line),40740,1,0,0,0,0,0,0,0,1,0
|
291
|
+
30143,E,Western (Loop-bound),-87.685129,41.854225,Western,Western (Pink Line),40740,1,0,0,0,0,0,0,0,1,0
|
292
|
+
30043,W,Western (Forest Pk-bound),-87.688436,41.875478,Western,Western (Blue Line - Forest Park Branch),40220,0,0,1,0,0,0,0,0,0,0
|
293
|
+
30042,E,Western (O'Hare-bound),-87.688436,41.875478,Western,Western (Blue Line - Forest Park Branch),40220,0,0,1,0,0,0,0,0,0,0
|
294
|
+
30130,S,Western/Milwaukee (Forest Pk-bound),-87.687364,41.916157,Western,Western (Blue Line - O'Hare Branch),40670,1,0,1,0,0,0,0,0,0,0
|
295
|
+
30129,N,Western/Milwaukee (O'Hare-bound),-87.687364,41.916157,Western,Western (Blue Line - O'Hare Branch),40670,1,0,1,0,0,0,0,0,0,0
|
296
|
+
30283,N,Western (Kimball-bound),-87.688502,41.966163,Western,Western (Brown Line),41480,1,0,0,1,0,0,0,0,0,0
|
297
|
+
30284,S,Western (Loop-bound),-87.688502,41.966163,Western,Western (Brown Line),41480,1,0,0,1,0,0,0,0,0,0
|
298
|
+
30106,S,Wilson (95th-bound),-87.657588,41.964273,Wilson,Wilson (Red Line),40540,0,1,0,0,0,0,0,0,0,0
|
299
|
+
30105,N,Wilson (Howard-bound),-87.657588,41.964273,Wilson,Wilson (Red Line),40540,0,1,0,0,0,0,0,0,0,0
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module CTA
|
2
|
+
class TrainTracker
|
3
|
+
class Estimate
|
4
|
+
attr_reader :station_id, :stop_id, :station_name, :stop_description, :run_number, :route, :destination_stop_id, :destination_name, :direction, :timestamp, :arrival_time, :approaching, :schedule, :fit, :delay
|
5
|
+
|
6
|
+
def initialize(params)
|
7
|
+
params.each do |key, value|
|
8
|
+
self.instance_variable_set("@#{ key }".to_sym, value)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module CTA
|
2
|
+
class TrainTracker
|
3
|
+
|
4
|
+
def initialize(key)
|
5
|
+
@key = key
|
6
|
+
@line_table = {
|
7
|
+
:red => "Red",
|
8
|
+
:blue => "Blue",
|
9
|
+
:brown => "Brn",
|
10
|
+
:orange => "Org",
|
11
|
+
:purple => "P",
|
12
|
+
:pink => "Pink",
|
13
|
+
:yellow => "Y"
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def arrivals(params)
|
18
|
+
station_id = params[:station_id]
|
19
|
+
stop_id = params[:stop_id]
|
20
|
+
max = params[:max]
|
21
|
+
route = @line_table[params[:route]]
|
22
|
+
|
23
|
+
base_url = "http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?"
|
24
|
+
url = "#{ base_url }key=#{ @key }&mapid=#{ station_id }&stpid=#{ stop_id }&max=#{ max }&rt=#{ route }"
|
25
|
+
|
26
|
+
estimate_array = Nokogiri::XML(open(url)).xpath("//eta").map do |item|
|
27
|
+
Estimate.new({
|
28
|
+
:station_id => item.at("staId").text,
|
29
|
+
:stop_id => item.at("stpId").text,
|
30
|
+
:station_name => item.at("staNm").text,
|
31
|
+
:stop_description => item.at("stpDe").text,
|
32
|
+
:run_number => item.at("rn").text,
|
33
|
+
:route => @line_table.key(item.at("rt").text),
|
34
|
+
:destination_stop_id => item.at("destSt").text,
|
35
|
+
:destination_name => item.at("destNm").text,
|
36
|
+
:direction => item.at("trDr").text,
|
37
|
+
:timestamp => Time.parse(item.at("prdt").text),
|
38
|
+
:arrival_time => Time.parse(item.at("arrT").text),
|
39
|
+
:approaching => item.at("isApp").text.to_bool,
|
40
|
+
:schedule => item.at("isSch").text.to_bool,
|
41
|
+
:fit => item.at("isFlt").text.to_bool,
|
42
|
+
:delay => item.at("isDly").text.to_bool
|
43
|
+
})
|
44
|
+
end
|
45
|
+
estimate_array
|
46
|
+
end
|
47
|
+
|
48
|
+
def stops
|
49
|
+
CSV.read("lib/cta_L_stops.csv").map { |x| {x[0] => x[2]} }
|
50
|
+
end
|
51
|
+
|
52
|
+
def stations
|
53
|
+
CSV.read("lib/cta_L_stops.csv").map { |x| {x[7] => x[5]} }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
#$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cta-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Frank Bonetti
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-02 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: nokogiri
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.5.6
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.5.6
|
30
|
+
description: An easy way to access the Chicago Transit Authority API via the Ruby
|
31
|
+
programming language
|
32
|
+
email: frank.r.bonetti@gmail.com
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- cta-api-1.0.0.gem
|
38
|
+
- cta-api.gemspec
|
39
|
+
- Gemfile
|
40
|
+
- lib/bus-tracker/bus-tracker.rb
|
41
|
+
- lib/bus-tracker/pattern.rb
|
42
|
+
- lib/bus-tracker/point.rb
|
43
|
+
- lib/bus-tracker/prediction.rb
|
44
|
+
- lib/bus-tracker/service-bulletin.rb
|
45
|
+
- lib/bus-tracker/service.rb
|
46
|
+
- lib/bus-tracker/stop.rb
|
47
|
+
- lib/bus-tracker/vehicle.rb
|
48
|
+
- lib/cta-api/version.rb
|
49
|
+
- lib/cta-api.rb
|
50
|
+
- lib/cta_L_stops.csv
|
51
|
+
- lib/train-tracker/estimate.rb
|
52
|
+
- lib/train-tracker/train-tracker.rb
|
53
|
+
- LICENSE
|
54
|
+
- Rakefile
|
55
|
+
- README.md
|
56
|
+
- spec/spec_helper.rb
|
57
|
+
homepage:
|
58
|
+
licenses:
|
59
|
+
- MIT
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 1.8.24
|
79
|
+
signing_key:
|
80
|
+
specification_version: 3
|
81
|
+
summary: An easy way to access the Chicago Transit Authority API via the Ruby programming
|
82
|
+
language
|
83
|
+
test_files: []
|