├── .gitignore ├── README.rst ├── add_phonegap_script_tag.py ├── app ├── config-production.js ├── config-staging.js ├── phonegap │ └── config.xml └── web │ ├── css │ ├── base.css │ └── transit.css │ ├── data │ └── bus-stops.js │ ├── images │ ├── apple-touch-icon-114x114.png │ ├── apple-touch-icon-72x72.png │ ├── apple-touch-icon.png │ ├── favicon.ico │ └── maps │ │ ├── 100.png │ │ ├── 101.png │ │ ├── 102.png │ │ ├── 103.png │ │ ├── 104.png │ │ ├── 105.png │ │ ├── 106.png │ │ ├── 107.png │ │ ├── 108.png │ │ ├── 109.png │ │ ├── 110.png │ │ ├── 111.png │ │ ├── 112.png │ │ ├── 113.png │ │ ├── 114.png │ │ ├── 115.png │ │ ├── 116.png │ │ ├── 117.png │ │ ├── 118.png │ │ ├── 119.png │ │ ├── 120.png │ │ ├── 121.png │ │ ├── 122.png │ │ ├── 123.png │ │ ├── 124.png │ │ ├── 125.png │ │ ├── 126.png │ │ ├── 127.png │ │ ├── 128.png │ │ ├── 129.png │ │ ├── 130.png │ │ ├── 131.png │ │ ├── 132.png │ │ ├── 133.png │ │ ├── 134.png │ │ ├── 135.png │ │ ├── 136.png │ │ ├── 137.png │ │ ├── 138.png │ │ ├── 139.png │ │ ├── 140.png │ │ ├── 141.png │ │ ├── 142.png │ │ ├── 200.png │ │ ├── 201.png │ │ ├── 202.png │ │ ├── 203.png │ │ ├── 204.png │ │ ├── 205.png │ │ ├── 206.png │ │ ├── 207.png │ │ ├── 208.png │ │ ├── 209.png │ │ ├── 210.png │ │ ├── 211.png │ │ ├── 212.png │ │ ├── 213.png │ │ ├── 214.png │ │ ├── 215.png │ │ ├── 216.png │ │ ├── 217.png │ │ ├── 218.png │ │ ├── 219.png │ │ ├── 220.png │ │ ├── 221.png │ │ ├── 222.png │ │ ├── 223.png │ │ ├── 224.png │ │ ├── 225.png │ │ ├── 226.png │ │ ├── 227.png │ │ ├── 228.png │ │ ├── 229.png │ │ ├── 230.png │ │ ├── 231.png │ │ ├── 300.png │ │ ├── 301.png │ │ ├── 302.png │ │ ├── 303.png │ │ ├── 304.png │ │ ├── 305.png │ │ ├── 306.png │ │ ├── 307.png │ │ ├── 308.png │ │ ├── 309.png │ │ ├── 310.png │ │ ├── 311.png │ │ ├── 312.png │ │ ├── 313.png │ │ ├── 314.png │ │ ├── 315.png │ │ ├── 316.png │ │ ├── 317.png │ │ ├── 318.png │ │ ├── 319.png │ │ ├── 320.png │ │ ├── 321.png │ │ ├── 322.png │ │ ├── 323.png │ │ ├── 324.png │ │ ├── 325.png │ │ ├── 326.png │ │ ├── 327.png │ │ ├── 328.png │ │ ├── 329.png │ │ ├── 330.png │ │ ├── 331.png │ │ ├── 332.png │ │ ├── 400.png │ │ ├── 401.png │ │ ├── 402.png │ │ ├── 403.png │ │ ├── 404.png │ │ ├── 405.png │ │ ├── 406.png │ │ ├── 407.png │ │ ├── 408.png │ │ ├── 409.png │ │ ├── 410.png │ │ ├── 411.png │ │ ├── 412.png │ │ ├── 413.png │ │ ├── 414.png │ │ ├── 415.png │ │ ├── 416.png │ │ ├── 417.png │ │ ├── 418.png │ │ ├── 419.png │ │ ├── 420.png │ │ ├── 421.png │ │ ├── 422.png │ │ ├── 423.png │ │ ├── 424.png │ │ ├── 425.png │ │ ├── 426.png │ │ ├── 427.png │ │ ├── 500.png │ │ ├── 501.png │ │ ├── 502.png │ │ ├── 503.png │ │ ├── 504.png │ │ ├── 505.png │ │ ├── 506.png │ │ ├── 507.png │ │ ├── 508.png │ │ ├── 509.png │ │ ├── 510.png │ │ ├── 511.png │ │ ├── 512.png │ │ ├── 513.png │ │ ├── 514.png │ │ ├── 515.png │ │ ├── 516.png │ │ ├── 517.png │ │ ├── 518.png │ │ ├── 519.png │ │ ├── 520.png │ │ ├── 521.png │ │ ├── 522.png │ │ ├── 523.png │ │ ├── 524.png │ │ ├── 525.png │ │ ├── 526.png │ │ ├── 527.png │ │ ├── 528.png │ │ ├── 529.png │ │ ├── 530.png │ │ ├── 531.png │ │ ├── 532.png │ │ ├── 533.png │ │ ├── 534.png │ │ ├── 535.png │ │ ├── 536.png │ │ ├── 600.png │ │ ├── 601.png │ │ ├── 602.png │ │ ├── 603.png │ │ ├── 604.png │ │ ├── 605.png │ │ ├── 606.png │ │ ├── 607.png │ │ ├── 608.png │ │ ├── 609.png │ │ ├── 610.png │ │ ├── 611.png │ │ ├── 612.png │ │ ├── 613.png │ │ ├── 614.png │ │ ├── 615.png │ │ ├── 616.png │ │ ├── 617.png │ │ ├── 618.png │ │ ├── 619.png │ │ ├── 620.png │ │ ├── 622.png │ │ ├── 700.png │ │ ├── 701.png │ │ ├── 702.png │ │ ├── 703.png │ │ ├── 704.png │ │ ├── 705.png │ │ ├── 706.png │ │ ├── 707.png │ │ ├── 708.png │ │ ├── 709.png │ │ ├── 710.png │ │ ├── 711.png │ │ ├── 712.png │ │ ├── 713.png │ │ ├── 714.png │ │ ├── 715.png │ │ ├── 716.png │ │ ├── 717.png │ │ ├── 718.png │ │ ├── 719.png │ │ ├── 720.png │ │ ├── 721.png │ │ ├── 722.png │ │ ├── 723.png │ │ ├── 724.png │ │ ├── 725.png │ │ ├── 726.png │ │ ├── 727.png │ │ ├── 728.png │ │ ├── 729.png │ │ ├── 730.png │ │ ├── 731.png │ │ ├── 732.png │ │ ├── 733.png │ │ ├── 734.png │ │ ├── 735.png │ │ ├── 800.png │ │ ├── 801.png │ │ ├── 802.png │ │ ├── 803.png │ │ ├── 804.png │ │ ├── 805.png │ │ ├── 806.png │ │ ├── 807.png │ │ ├── 808.png │ │ ├── 809.png │ │ ├── 810.png │ │ ├── 811.png │ │ ├── 812.png │ │ ├── 813.png │ │ ├── 814.png │ │ ├── 815.png │ │ ├── 816.png │ │ ├── 817.png │ │ ├── 818.png │ │ └── 819.png │ ├── index.html │ └── js │ ├── backbone-min.js │ ├── config.js │ ├── jquery-1.5.2.min.js │ ├── store.min.js │ ├── transit.js │ ├── underscore-min.js │ └── underscore.date.min.js ├── data ├── routes │ ├── Bus Route Map 1-10-08.pdf │ ├── bus_routes │ │ ├── BUS_ROUTE.dbf │ │ ├── BUS_ROUTE.prj │ │ ├── BUS_ROUTE.sbn │ │ ├── BUS_ROUTE.sbx │ │ ├── BUS_ROUTE.shp │ │ ├── BUS_ROUTE.shp.xml │ │ └── BUS_ROUTE.shx │ ├── bus_routes_4326 │ │ ├── bus_routes_4326.dbf │ │ ├── bus_routes_4326.prj │ │ ├── bus_routes_4326.shp │ │ └── bus_routes_4326.shx │ ├── centerline │ │ ├── Centerline.dbf │ │ ├── Centerline.prj │ │ ├── Centerline.sbn │ │ ├── Centerline.sbx │ │ ├── Centerline.shp │ │ ├── Centerline.shp.xml │ │ └── Centerline.shx │ ├── centerline_4326 │ │ ├── centerline_4326.dbf │ │ ├── centerline_4326.prj │ │ ├── centerline_4326.qpj │ │ ├── centerline_4326.shp │ │ └── centerline_4326.shx │ ├── city_limits │ │ ├── City Limits.dbf │ │ ├── City Limits.prj │ │ ├── City Limits.sbn │ │ ├── City Limits.sbx │ │ ├── City Limits.shp │ │ ├── City Limits.shp.xml │ │ └── City Limits.shx │ └── city_limits_4326 │ │ ├── city_limits_4326.dbf │ │ ├── city_limits_4326.prj │ │ ├── city_limits_4326.qpj │ │ ├── city_limits_4326.shp │ │ └── city_limits_4326.shx ├── schedules │ ├── README │ ├── Saturday Bus Schedule.pdf │ ├── Weekday Bus Schedule.pdf │ ├── bus_routes_weekday │ │ ├── blue_line_north_west.csv │ │ ├── blue_line_south_west.csv │ │ ├── green_line_north_east.csv │ │ ├── green_line_south_east.csv │ │ ├── red_line_north.csv │ │ ├── red_line_south.csv │ │ ├── yellow_line_south_east.csv │ │ └── yellow_line_south_west.csv │ ├── bus_routes_weekday_clean │ │ ├── blue_line_north_west.csv │ │ ├── blue_line_south_west.csv │ │ ├── green_line_north_east.csv │ │ ├── green_line_south_east.csv │ │ ├── red_line_north.csv │ │ ├── red_line_south.csv │ │ ├── yellow_line_south_east.csv │ │ └── yellow_line_south_west.csv │ └── clean_bus_routes.py ├── stops │ ├── README │ ├── bus-stops-schedule.csv │ ├── bus-stops.csv │ ├── bus-stops.pdf │ ├── bus_stops │ │ ├── BUS_STOPS.dbf │ │ ├── BUS_STOPS.prj │ │ ├── BUS_STOPS.sbn │ │ ├── BUS_STOPS.sbx │ │ ├── BUS_STOPS.shp │ │ ├── BUS_STOPS.shp.xml │ │ └── BUS_STOPS.shx │ ├── bus_stops_4326 │ │ ├── bus_stops_4326.dbf │ │ ├── bus_stops_4326.prj │ │ ├── bus_stops_4326.shp │ │ └── bus_stops_4326.shx │ ├── bus_stops_data │ │ ├── bus_stops_data.dbf │ │ ├── bus_stops_data.shp │ │ └── bus_stops_data.shx │ ├── compute_estimated_schedule.py │ ├── make_json.py │ ├── make_pts_csv.py │ └── make_shapefile.py └── transit.qgs ├── fabfile.py ├── gzip_assets.py ├── maps ├── make_maps.py ├── make_tiles.py ├── make_xml.sh ├── setup.sh ├── style.mss ├── transit.mml └── transit.xml ├── requirements.txt ├── s3exclude ├── update_data.sh ├── update_phonegap.sh └── update_phonegap_version.py /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.pyc 3 | *.swp 4 | gzip 5 | maps/*.dbf 6 | maps/*.prj 7 | maps/*.sbn 8 | maps/*.sbx 9 | maps/*.shp 10 | maps/*.shp.xml 11 | maps/*.shx 12 | maps/*.zip 13 | .tiles 14 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | The Tyler Transit App 2 | ===================== 3 | 4 | Currently this repo only contains source data, processing scripts, and some processed data. 5 | 6 | This is part of the `Hack Tyler `_ project. 7 | 8 | -------------------------------------------------------------------------------- /add_phonegap_script_tag.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import sys 4 | 5 | from lxml.html import parse 6 | from lxml.cssselect import CSSSelector 7 | 8 | filename = sys.argv[1] 9 | 10 | doc = parse(open(filename, 'r')) 11 | 12 | s = doc.xpath( CSSSelector('script').path )[0] 13 | e = s.makeelement('script', attrib={'type': 'text/javascript','src': 'phonegap.js'}) 14 | s.addprevious(e) 15 | 16 | doc.write(open(filename, 'w'), method='html', pretty_print=True) 17 | 18 | -------------------------------------------------------------------------------- /app/config-production.js: -------------------------------------------------------------------------------- 1 | window.TRANSIT_CONFIG = { 2 | api_host: 'http://transit.hacktyler.com', 3 | deployment_target: 'production', 4 | build: '20110430.01' 5 | } 6 | -------------------------------------------------------------------------------- /app/config-staging.js: -------------------------------------------------------------------------------- 1 | window.TRANSIT_CONFIG = { 2 | api_host: 'http://transit-beta.hacktyler.com', 3 | deployment_target: 'staging', 4 | build: '20110430.01' 5 | } 6 | -------------------------------------------------------------------------------- /app/phonegap/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Tyler On Time 5 | 6 | 7 | A transit app for Tyler, TX. 8 | 9 | 10 | 11 | Christopher Groskopf 12 | 13 | 14 | 15 | 16 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/web/css/transit.css: -------------------------------------------------------------------------------- 1 | /* General */ 2 | html, body { height: 100%; } 3 | #not-footer { min-height: 100%; } 4 | 5 | #container { width: 960px; position: relative; margin: 0 auto; padding: 0 0 35px 0; overflow:auto; } 6 | 7 | footer { width: 960px; position: relative; margin: -35px auto 0 auto; height: 35px; clear:both; background-color: #ccc; } 8 | footer .credits { width: 100%; padding-top: 7px; padding-left: 7px; } 9 | 10 | /* Content */ 11 | header h1 { font-size: 42px; padding-top: 20px; cursor: pointer; } 12 | header hr { margin-bottom: 20px; } 13 | 14 | .page { display: none; } 15 | 16 | li { margin: 0; padding: 10px 0 10px 5px; } 17 | li.even { background-color: #eee; } 18 | 19 | #home .button { width: 274px; font-size: 20px; margin-bottom: 10px; text-align: center; padding: 8px 12px; } 20 | #home .transit-map { display: none; } 21 | 22 | #lines .line { font-size: 18px; cursor: pointer; } 23 | 24 | #stops .stop, 25 | #favorites .stop { font-size: 18px; cursor: pointer; } 26 | #stops .stop .transfer, 27 | #favorites .stop .line-name { font-size: 13px; color: #999; } 28 | 29 | #detail .contents { padding-bottom: 10px; } 30 | #detail .line { font-size: 20px; color: #999; font-family: "Georgia", "Times New Roman", Helvetica, Arial, sans-serif; } 31 | #detail .date { font-size: 20px; color: #999; font-family: "Georgia", "Times New Roman", Helvetica, Arial, sans-serif; } 32 | #detail .subhead { line-height: 40px; } 33 | #detail .departures li { padding: 5px 0 5px 5px; } 34 | #detail .departures .next { background-color: #feffaf; } 35 | #detail .asterisk { font-size: 12px; margin-top:-10px; } 36 | #detail .buttons { padding-top: 15px; } 37 | 38 | /* iPad Portrait/Browser */ 39 | @media only screen and (min-width: 768px) and (max-width: 991px) { 40 | #container { width: 960px; } 41 | footer { width: 960px; } 42 | } 43 | 44 | /* Mobile/Browser */ 45 | @media only screen and (max-width: 767px) { 46 | #container { width: 300px; } 47 | footer { width: 300px; } 48 | } 49 | 50 | /* Mobile Landscape/Browser */ 51 | @media only screen and (min-width: 480px) and (max-width: 767px) { 52 | #container { width: 420px; } 53 | footer { width: 420px; } 54 | } 55 | 56 | /* Anything smaller than standard 960 */ 57 | @media only screen and (max-width: 959px) {} 58 | 59 | /* iPad Portrait Only */ 60 | @media only screen and (min-width: 768px) and (max-width: 991px) and (max-device-width: 1000px) {} 61 | 62 | /* Mobile Only */ 63 | @media only screen and (max-width: 767px) and (max-device-width: 1000px) {} 64 | 65 | /* Mobile Landscape Only */ 66 | @media only screen and (min-width: 480px) and (max-width: 767px) and (max-device-width: 1000px) {} 67 | -------------------------------------------------------------------------------- /app/web/images/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /app/web/images/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /app/web/images/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/apple-touch-icon.png -------------------------------------------------------------------------------- /app/web/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/favicon.ico -------------------------------------------------------------------------------- /app/web/images/maps/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/100.png -------------------------------------------------------------------------------- /app/web/images/maps/101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/101.png -------------------------------------------------------------------------------- /app/web/images/maps/102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/102.png -------------------------------------------------------------------------------- /app/web/images/maps/103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/103.png -------------------------------------------------------------------------------- /app/web/images/maps/104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/104.png -------------------------------------------------------------------------------- /app/web/images/maps/105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/105.png -------------------------------------------------------------------------------- /app/web/images/maps/106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/106.png -------------------------------------------------------------------------------- /app/web/images/maps/107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/107.png -------------------------------------------------------------------------------- /app/web/images/maps/108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/108.png -------------------------------------------------------------------------------- /app/web/images/maps/109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/109.png -------------------------------------------------------------------------------- /app/web/images/maps/110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/110.png -------------------------------------------------------------------------------- /app/web/images/maps/111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/111.png -------------------------------------------------------------------------------- /app/web/images/maps/112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/112.png -------------------------------------------------------------------------------- /app/web/images/maps/113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/113.png -------------------------------------------------------------------------------- /app/web/images/maps/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/114.png -------------------------------------------------------------------------------- /app/web/images/maps/115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/115.png -------------------------------------------------------------------------------- /app/web/images/maps/116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/116.png -------------------------------------------------------------------------------- /app/web/images/maps/117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/117.png -------------------------------------------------------------------------------- /app/web/images/maps/118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/118.png -------------------------------------------------------------------------------- /app/web/images/maps/119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/119.png -------------------------------------------------------------------------------- /app/web/images/maps/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/120.png -------------------------------------------------------------------------------- /app/web/images/maps/121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/121.png -------------------------------------------------------------------------------- /app/web/images/maps/122.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/122.png -------------------------------------------------------------------------------- /app/web/images/maps/123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/123.png -------------------------------------------------------------------------------- /app/web/images/maps/124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/124.png -------------------------------------------------------------------------------- /app/web/images/maps/125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/125.png -------------------------------------------------------------------------------- /app/web/images/maps/126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/126.png -------------------------------------------------------------------------------- /app/web/images/maps/127.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/127.png -------------------------------------------------------------------------------- /app/web/images/maps/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/128.png -------------------------------------------------------------------------------- /app/web/images/maps/129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/129.png -------------------------------------------------------------------------------- /app/web/images/maps/130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/130.png -------------------------------------------------------------------------------- /app/web/images/maps/131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/131.png -------------------------------------------------------------------------------- /app/web/images/maps/132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/132.png -------------------------------------------------------------------------------- /app/web/images/maps/133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/133.png -------------------------------------------------------------------------------- /app/web/images/maps/134.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/134.png -------------------------------------------------------------------------------- /app/web/images/maps/135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/135.png -------------------------------------------------------------------------------- /app/web/images/maps/136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/136.png -------------------------------------------------------------------------------- /app/web/images/maps/137.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/137.png -------------------------------------------------------------------------------- /app/web/images/maps/138.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/138.png -------------------------------------------------------------------------------- /app/web/images/maps/139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/139.png -------------------------------------------------------------------------------- /app/web/images/maps/140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/140.png -------------------------------------------------------------------------------- /app/web/images/maps/141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/141.png -------------------------------------------------------------------------------- /app/web/images/maps/142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/142.png -------------------------------------------------------------------------------- /app/web/images/maps/200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/200.png -------------------------------------------------------------------------------- /app/web/images/maps/201.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/201.png -------------------------------------------------------------------------------- /app/web/images/maps/202.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/202.png -------------------------------------------------------------------------------- /app/web/images/maps/203.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/203.png -------------------------------------------------------------------------------- /app/web/images/maps/204.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/204.png -------------------------------------------------------------------------------- /app/web/images/maps/205.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/205.png -------------------------------------------------------------------------------- /app/web/images/maps/206.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/206.png -------------------------------------------------------------------------------- /app/web/images/maps/207.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/207.png -------------------------------------------------------------------------------- /app/web/images/maps/208.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/208.png -------------------------------------------------------------------------------- /app/web/images/maps/209.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/209.png -------------------------------------------------------------------------------- /app/web/images/maps/210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/210.png -------------------------------------------------------------------------------- /app/web/images/maps/211.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/211.png -------------------------------------------------------------------------------- /app/web/images/maps/212.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/212.png -------------------------------------------------------------------------------- /app/web/images/maps/213.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/213.png -------------------------------------------------------------------------------- /app/web/images/maps/214.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/214.png -------------------------------------------------------------------------------- /app/web/images/maps/215.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/215.png -------------------------------------------------------------------------------- /app/web/images/maps/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/216.png -------------------------------------------------------------------------------- /app/web/images/maps/217.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/217.png -------------------------------------------------------------------------------- /app/web/images/maps/218.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/218.png -------------------------------------------------------------------------------- /app/web/images/maps/219.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/219.png -------------------------------------------------------------------------------- /app/web/images/maps/220.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/220.png -------------------------------------------------------------------------------- /app/web/images/maps/221.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/221.png -------------------------------------------------------------------------------- /app/web/images/maps/222.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/222.png -------------------------------------------------------------------------------- /app/web/images/maps/223.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/223.png -------------------------------------------------------------------------------- /app/web/images/maps/224.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/224.png -------------------------------------------------------------------------------- /app/web/images/maps/225.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/225.png -------------------------------------------------------------------------------- /app/web/images/maps/226.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/226.png -------------------------------------------------------------------------------- /app/web/images/maps/227.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/227.png -------------------------------------------------------------------------------- /app/web/images/maps/228.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/228.png -------------------------------------------------------------------------------- /app/web/images/maps/229.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/229.png -------------------------------------------------------------------------------- /app/web/images/maps/230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/230.png -------------------------------------------------------------------------------- /app/web/images/maps/231.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/231.png -------------------------------------------------------------------------------- /app/web/images/maps/300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/300.png -------------------------------------------------------------------------------- /app/web/images/maps/301.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/301.png -------------------------------------------------------------------------------- /app/web/images/maps/302.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/302.png -------------------------------------------------------------------------------- /app/web/images/maps/303.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/303.png -------------------------------------------------------------------------------- /app/web/images/maps/304.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/304.png -------------------------------------------------------------------------------- /app/web/images/maps/305.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/305.png -------------------------------------------------------------------------------- /app/web/images/maps/306.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/306.png -------------------------------------------------------------------------------- /app/web/images/maps/307.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/307.png -------------------------------------------------------------------------------- /app/web/images/maps/308.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/308.png -------------------------------------------------------------------------------- /app/web/images/maps/309.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/309.png -------------------------------------------------------------------------------- /app/web/images/maps/310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/310.png -------------------------------------------------------------------------------- /app/web/images/maps/311.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/311.png -------------------------------------------------------------------------------- /app/web/images/maps/312.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/312.png -------------------------------------------------------------------------------- /app/web/images/maps/313.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/313.png -------------------------------------------------------------------------------- /app/web/images/maps/314.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/314.png -------------------------------------------------------------------------------- /app/web/images/maps/315.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/315.png -------------------------------------------------------------------------------- /app/web/images/maps/316.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/316.png -------------------------------------------------------------------------------- /app/web/images/maps/317.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/317.png -------------------------------------------------------------------------------- /app/web/images/maps/318.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/318.png -------------------------------------------------------------------------------- /app/web/images/maps/319.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/319.png -------------------------------------------------------------------------------- /app/web/images/maps/320.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/320.png -------------------------------------------------------------------------------- /app/web/images/maps/321.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/321.png -------------------------------------------------------------------------------- /app/web/images/maps/322.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/322.png -------------------------------------------------------------------------------- /app/web/images/maps/323.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/323.png -------------------------------------------------------------------------------- /app/web/images/maps/324.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/324.png -------------------------------------------------------------------------------- /app/web/images/maps/325.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/325.png -------------------------------------------------------------------------------- /app/web/images/maps/326.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/326.png -------------------------------------------------------------------------------- /app/web/images/maps/327.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/327.png -------------------------------------------------------------------------------- /app/web/images/maps/328.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/328.png -------------------------------------------------------------------------------- /app/web/images/maps/329.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/329.png -------------------------------------------------------------------------------- /app/web/images/maps/330.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/330.png -------------------------------------------------------------------------------- /app/web/images/maps/331.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/331.png -------------------------------------------------------------------------------- /app/web/images/maps/332.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/332.png -------------------------------------------------------------------------------- /app/web/images/maps/400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/400.png -------------------------------------------------------------------------------- /app/web/images/maps/401.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/401.png -------------------------------------------------------------------------------- /app/web/images/maps/402.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/402.png -------------------------------------------------------------------------------- /app/web/images/maps/403.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/403.png -------------------------------------------------------------------------------- /app/web/images/maps/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/404.png -------------------------------------------------------------------------------- /app/web/images/maps/405.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/405.png -------------------------------------------------------------------------------- /app/web/images/maps/406.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/406.png -------------------------------------------------------------------------------- /app/web/images/maps/407.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/407.png -------------------------------------------------------------------------------- /app/web/images/maps/408.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/408.png -------------------------------------------------------------------------------- /app/web/images/maps/409.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/409.png -------------------------------------------------------------------------------- /app/web/images/maps/410.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/410.png -------------------------------------------------------------------------------- /app/web/images/maps/411.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/411.png -------------------------------------------------------------------------------- /app/web/images/maps/412.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/412.png -------------------------------------------------------------------------------- /app/web/images/maps/413.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/413.png -------------------------------------------------------------------------------- /app/web/images/maps/414.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/414.png -------------------------------------------------------------------------------- /app/web/images/maps/415.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/415.png -------------------------------------------------------------------------------- /app/web/images/maps/416.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/416.png -------------------------------------------------------------------------------- /app/web/images/maps/417.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/417.png -------------------------------------------------------------------------------- /app/web/images/maps/418.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/418.png -------------------------------------------------------------------------------- /app/web/images/maps/419.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/419.png -------------------------------------------------------------------------------- /app/web/images/maps/420.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/420.png -------------------------------------------------------------------------------- /app/web/images/maps/421.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/421.png -------------------------------------------------------------------------------- /app/web/images/maps/422.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/422.png -------------------------------------------------------------------------------- /app/web/images/maps/423.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/423.png -------------------------------------------------------------------------------- /app/web/images/maps/424.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/424.png -------------------------------------------------------------------------------- /app/web/images/maps/425.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/425.png -------------------------------------------------------------------------------- /app/web/images/maps/426.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/426.png -------------------------------------------------------------------------------- /app/web/images/maps/427.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/427.png -------------------------------------------------------------------------------- /app/web/images/maps/500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/500.png -------------------------------------------------------------------------------- /app/web/images/maps/501.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/501.png -------------------------------------------------------------------------------- /app/web/images/maps/502.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/502.png -------------------------------------------------------------------------------- /app/web/images/maps/503.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/503.png -------------------------------------------------------------------------------- /app/web/images/maps/504.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/504.png -------------------------------------------------------------------------------- /app/web/images/maps/505.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/505.png -------------------------------------------------------------------------------- /app/web/images/maps/506.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/506.png -------------------------------------------------------------------------------- /app/web/images/maps/507.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/507.png -------------------------------------------------------------------------------- /app/web/images/maps/508.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/508.png -------------------------------------------------------------------------------- /app/web/images/maps/509.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/509.png -------------------------------------------------------------------------------- /app/web/images/maps/510.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/510.png -------------------------------------------------------------------------------- /app/web/images/maps/511.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/511.png -------------------------------------------------------------------------------- /app/web/images/maps/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/512.png -------------------------------------------------------------------------------- /app/web/images/maps/513.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/513.png -------------------------------------------------------------------------------- /app/web/images/maps/514.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/514.png -------------------------------------------------------------------------------- /app/web/images/maps/515.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/515.png -------------------------------------------------------------------------------- /app/web/images/maps/516.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/516.png -------------------------------------------------------------------------------- /app/web/images/maps/517.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/517.png -------------------------------------------------------------------------------- /app/web/images/maps/518.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/518.png -------------------------------------------------------------------------------- /app/web/images/maps/519.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/519.png -------------------------------------------------------------------------------- /app/web/images/maps/520.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/520.png -------------------------------------------------------------------------------- /app/web/images/maps/521.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/521.png -------------------------------------------------------------------------------- /app/web/images/maps/522.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/522.png -------------------------------------------------------------------------------- /app/web/images/maps/523.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/523.png -------------------------------------------------------------------------------- /app/web/images/maps/524.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/524.png -------------------------------------------------------------------------------- /app/web/images/maps/525.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/525.png -------------------------------------------------------------------------------- /app/web/images/maps/526.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/526.png -------------------------------------------------------------------------------- /app/web/images/maps/527.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/527.png -------------------------------------------------------------------------------- /app/web/images/maps/528.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/528.png -------------------------------------------------------------------------------- /app/web/images/maps/529.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/529.png -------------------------------------------------------------------------------- /app/web/images/maps/530.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/530.png -------------------------------------------------------------------------------- /app/web/images/maps/531.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/531.png -------------------------------------------------------------------------------- /app/web/images/maps/532.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/532.png -------------------------------------------------------------------------------- /app/web/images/maps/533.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/533.png -------------------------------------------------------------------------------- /app/web/images/maps/534.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/534.png -------------------------------------------------------------------------------- /app/web/images/maps/535.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/535.png -------------------------------------------------------------------------------- /app/web/images/maps/536.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/536.png -------------------------------------------------------------------------------- /app/web/images/maps/600.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/600.png -------------------------------------------------------------------------------- /app/web/images/maps/601.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/601.png -------------------------------------------------------------------------------- /app/web/images/maps/602.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/602.png -------------------------------------------------------------------------------- /app/web/images/maps/603.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/603.png -------------------------------------------------------------------------------- /app/web/images/maps/604.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/604.png -------------------------------------------------------------------------------- /app/web/images/maps/605.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/605.png -------------------------------------------------------------------------------- /app/web/images/maps/606.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/606.png -------------------------------------------------------------------------------- /app/web/images/maps/607.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/607.png -------------------------------------------------------------------------------- /app/web/images/maps/608.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/608.png -------------------------------------------------------------------------------- /app/web/images/maps/609.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/609.png -------------------------------------------------------------------------------- /app/web/images/maps/610.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/610.png -------------------------------------------------------------------------------- /app/web/images/maps/611.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/611.png -------------------------------------------------------------------------------- /app/web/images/maps/612.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/612.png -------------------------------------------------------------------------------- /app/web/images/maps/613.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/613.png -------------------------------------------------------------------------------- /app/web/images/maps/614.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/614.png -------------------------------------------------------------------------------- /app/web/images/maps/615.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/615.png -------------------------------------------------------------------------------- /app/web/images/maps/616.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/616.png -------------------------------------------------------------------------------- /app/web/images/maps/617.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/617.png -------------------------------------------------------------------------------- /app/web/images/maps/618.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/618.png -------------------------------------------------------------------------------- /app/web/images/maps/619.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/619.png -------------------------------------------------------------------------------- /app/web/images/maps/620.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/620.png -------------------------------------------------------------------------------- /app/web/images/maps/622.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/622.png -------------------------------------------------------------------------------- /app/web/images/maps/700.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/700.png -------------------------------------------------------------------------------- /app/web/images/maps/701.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/701.png -------------------------------------------------------------------------------- /app/web/images/maps/702.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/702.png -------------------------------------------------------------------------------- /app/web/images/maps/703.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/703.png -------------------------------------------------------------------------------- /app/web/images/maps/704.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/704.png -------------------------------------------------------------------------------- /app/web/images/maps/705.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/705.png -------------------------------------------------------------------------------- /app/web/images/maps/706.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/706.png -------------------------------------------------------------------------------- /app/web/images/maps/707.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/707.png -------------------------------------------------------------------------------- /app/web/images/maps/708.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/708.png -------------------------------------------------------------------------------- /app/web/images/maps/709.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/709.png -------------------------------------------------------------------------------- /app/web/images/maps/710.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/710.png -------------------------------------------------------------------------------- /app/web/images/maps/711.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/711.png -------------------------------------------------------------------------------- /app/web/images/maps/712.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/712.png -------------------------------------------------------------------------------- /app/web/images/maps/713.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/713.png -------------------------------------------------------------------------------- /app/web/images/maps/714.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/714.png -------------------------------------------------------------------------------- /app/web/images/maps/715.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/715.png -------------------------------------------------------------------------------- /app/web/images/maps/716.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/716.png -------------------------------------------------------------------------------- /app/web/images/maps/717.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/717.png -------------------------------------------------------------------------------- /app/web/images/maps/718.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/718.png -------------------------------------------------------------------------------- /app/web/images/maps/719.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/719.png -------------------------------------------------------------------------------- /app/web/images/maps/720.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/720.png -------------------------------------------------------------------------------- /app/web/images/maps/721.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/721.png -------------------------------------------------------------------------------- /app/web/images/maps/722.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/722.png -------------------------------------------------------------------------------- /app/web/images/maps/723.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/723.png -------------------------------------------------------------------------------- /app/web/images/maps/724.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/724.png -------------------------------------------------------------------------------- /app/web/images/maps/725.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/725.png -------------------------------------------------------------------------------- /app/web/images/maps/726.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/726.png -------------------------------------------------------------------------------- /app/web/images/maps/727.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/727.png -------------------------------------------------------------------------------- /app/web/images/maps/728.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/728.png -------------------------------------------------------------------------------- /app/web/images/maps/729.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/729.png -------------------------------------------------------------------------------- /app/web/images/maps/730.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/730.png -------------------------------------------------------------------------------- /app/web/images/maps/731.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/731.png -------------------------------------------------------------------------------- /app/web/images/maps/732.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/732.png -------------------------------------------------------------------------------- /app/web/images/maps/733.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/733.png -------------------------------------------------------------------------------- /app/web/images/maps/734.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/734.png -------------------------------------------------------------------------------- /app/web/images/maps/735.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/735.png -------------------------------------------------------------------------------- /app/web/images/maps/800.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/800.png -------------------------------------------------------------------------------- /app/web/images/maps/801.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/801.png -------------------------------------------------------------------------------- /app/web/images/maps/802.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/802.png -------------------------------------------------------------------------------- /app/web/images/maps/803.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/803.png -------------------------------------------------------------------------------- /app/web/images/maps/804.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/804.png -------------------------------------------------------------------------------- /app/web/images/maps/805.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/805.png -------------------------------------------------------------------------------- /app/web/images/maps/806.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/806.png -------------------------------------------------------------------------------- /app/web/images/maps/807.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/807.png -------------------------------------------------------------------------------- /app/web/images/maps/808.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/808.png -------------------------------------------------------------------------------- /app/web/images/maps/809.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/809.png -------------------------------------------------------------------------------- /app/web/images/maps/810.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/810.png -------------------------------------------------------------------------------- /app/web/images/maps/811.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/811.png -------------------------------------------------------------------------------- /app/web/images/maps/812.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/812.png -------------------------------------------------------------------------------- /app/web/images/maps/813.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/813.png -------------------------------------------------------------------------------- /app/web/images/maps/814.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/814.png -------------------------------------------------------------------------------- /app/web/images/maps/815.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/815.png -------------------------------------------------------------------------------- /app/web/images/maps/816.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/816.png -------------------------------------------------------------------------------- /app/web/images/maps/817.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/817.png -------------------------------------------------------------------------------- /app/web/images/maps/818.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/818.png -------------------------------------------------------------------------------- /app/web/images/maps/819.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/app/web/images/maps/819.png -------------------------------------------------------------------------------- /app/web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Tyler On Time 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | 18 | 88 | 91 | 92 | 95 | 96 | 108 | 109 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | -------------------------------------------------------------------------------- /app/web/js/backbone-min.js: -------------------------------------------------------------------------------- 1 | // Backbone.js 0.3.3 2 | // (c) 2010 Jeremy Ashkenas, DocumentCloud Inc. 3 | // Backbone may be freely distributed under the MIT license. 4 | // For all details and documentation: 5 | // http://documentcloud.github.com/backbone 6 | (function(){var e;e=typeof exports!=="undefined"?exports:this.Backbone={};e.VERSION="0.3.3";var f=this._;if(!f&&typeof require!=="undefined")f=require("underscore")._;var h=this.jQuery||this.Zepto;e.emulateHTTP=false;e.emulateJSON=false;e.Events={bind:function(a,b){this._callbacks||(this._callbacks={});(this._callbacks[a]||(this._callbacks[a]=[])).push(b);return this},unbind:function(a,b){var c;if(a){if(c=this._callbacks)if(b){c=c[a];if(!c)return this;for(var d=0,g=c.length;d/g,">").replace(/"/g, 9 | """)},set:function(a,b){b||(b={});if(!a)return this;if(a.attributes)a=a.attributes;var c=this.attributes,d=this._escapedAttributes;if(!b.silent&&this.validate&&!this._performValidation(a,b))return false;if("id"in a)this.id=a.id;for(var g in a){var i=a[g];if(!f.isEqual(c[g],i)){c[g]=i;delete d[g];if(!b.silent){this._changed=true;this.trigger("change:"+g,this,i,b)}}}!b.silent&&this._changed&&this.change(b);return this},unset:function(a,b){b||(b={});var c={};c[a]=void 0;if(!b.silent&&this.validate&& 10 | !this._performValidation(c,b))return false;delete this.attributes[a];delete this._escapedAttributes[a];if(!b.silent){this._changed=true;this.trigger("change:"+a,this,void 0,b);this.change(b)}return this},clear:function(a){a||(a={});var b=this.attributes,c={};for(attr in b)c[attr]=void 0;if(!a.silent&&this.validate&&!this._performValidation(c,a))return false;this.attributes={};this._escapedAttributes={};if(!a.silent){this._changed=true;for(attr in b)this.trigger("change:"+attr,this,void 0,a);this.change(a)}return this}, 11 | fetch:function(a){a||(a={});var b=this,c=j(a.error,b,a);(this.sync||e.sync)("read",this,function(d){if(!b.set(b.parse(d),a))return false;a.success&&a.success(b,d)},c);return this},save:function(a,b){b||(b={});if(a&&!this.set(a,b))return false;var c=this,d=j(b.error,c,b),g=this.isNew()?"create":"update";(this.sync||e.sync)(g,this,function(i){if(!c.set(c.parse(i),b))return false;b.success&&b.success(c,i)},d);return this},destroy:function(a){a||(a={});var b=this,c=j(a.error,b,a);(this.sync||e.sync)("delete", 12 | this,function(d){b.collection&&b.collection.remove(b);a.success&&a.success(b,d)},c);return this},url:function(){var a=k(this.collection);if(this.isNew())return a;return a+(a.charAt(a.length-1)=="/"?"":"/")+this.id},parse:function(a){return a},clone:function(){return new this.constructor(this)},isNew:function(){return!this.id},change:function(a){this.trigger("change",this,a);this._previousAttributes=f.clone(this.attributes);this._changed=false},hasChanged:function(a){if(a)return this._previousAttributes[a]!= 13 | this.attributes[a];return this._changed},changedAttributes:function(a){a||(a=this.attributes);var b=this._previousAttributes,c=false,d;for(d in a)if(!f.isEqual(b[d],a[d])){c=c||{};c[d]=a[d]}return c},previous:function(a){if(!a||!this._previousAttributes)return null;return this._previousAttributes[a]},previousAttributes:function(){return f.clone(this._previousAttributes)},_performValidation:function(a,b){var c=this.validate(a);if(c){b.error?b.error(this,c):this.trigger("error",this,c,b);return false}return true}}); 14 | e.Collection=function(a,b){b||(b={});if(b.comparator){this.comparator=b.comparator;delete b.comparator}this._boundOnModelEvent=f.bind(this._onModelEvent,this);this._reset();a&&this.refresh(a,{silent:true});this.initialize(a,b)};f.extend(e.Collection.prototype,e.Events,{model:e.Model,initialize:function(){},toJSON:function(){return this.map(function(a){return a.toJSON()})},add:function(a,b){if(f.isArray(a))for(var c=0,d=a.length;c').hide().appendTo("body")[0].contentWindow; 22 | "onhashchange"in window&&!a?h(window).bind("hashchange",this.checkUrl):setInterval(this.checkUrl,this.interval);return this.loadUrl()},route:function(a,b){this.handlers.push({route:a,callback:b})},checkUrl:function(){var a=this.getFragment();if(a==this.fragment&&this.iframe)a=this.getFragment(this.iframe.location);if(a==this.fragment||a==decodeURIComponent(this.fragment))return false;if(this.iframe)window.location.hash=this.iframe.location.hash=a;this.loadUrl()},loadUrl:function(){var a=this.fragment= 23 | this.getFragment();return f.any(this.handlers,function(b){if(b.route.test(a)){b.callback(a);return true}})},saveLocation:function(a){a=(a||"").replace(l,"");if(this.fragment!=a){window.location.hash=this.fragment=a;if(this.iframe&&a!=this.getFragment(this.iframe.location)){this.iframe.document.open().close();this.iframe.location.hash=a}}}});e.View=function(a){this._configure(a||{});this._ensureElement();this.delegateEvents();this.initialize(a)};var q=/^(\w+)\s*(.*)$/;f.extend(e.View.prototype,e.Events, 24 | {tagName:"div",$:function(a){return h(a,this.el)},initialize:function(){},render:function(){return this},remove:function(){h(this.el).remove();return this},make:function(a,b,c){a=document.createElement(a);b&&h(a).attr(b);c&&h(a).html(c);return a},delegateEvents:function(a){if(a||(a=this.events)){h(this.el).unbind();for(var b in a){var c=a[b],d=b.match(q),g=d[1];d=d[2];c=f.bind(this[c],this);d===""?h(this.el).bind(g,c):h(this.el).delegate(d,g,c)}}},_configure:function(a){if(this.options)a=f.extend({}, 25 | this.options,a);if(a.model)this.model=a.model;if(a.collection)this.collection=a.collection;if(a.el)this.el=a.el;if(a.id)this.id=a.id;if(a.className)this.className=a.className;if(a.tagName)this.tagName=a.tagName;this.options=a},_ensureElement:function(){if(!this.el){var a={};if(this.id)a.id=this.id;if(this.className)a["class"]=this.className;this.el=this.make(this.tagName,a)}}});var m=function(a,b){var c=r(this,a,b);c.extend=m;return c};e.Model.extend=e.Collection.extend=e.Controller.extend=e.View.extend= 26 | m;var s={create:"POST",update:"PUT","delete":"DELETE",read:"GET"};e.sync=function(a,b,c,d){var g=s[a];a=a==="create"||a==="update"?JSON.stringify(b.toJSON()):null;b={url:k(b),type:g,contentType:"application/json",data:a,dataType:"json",processData:false,success:c,error:d};if(e.emulateJSON){b.contentType="application/x-www-form-urlencoded";b.processData=true;b.data=a?{model:a}:{}}if(e.emulateHTTP)if(g==="PUT"||g==="DELETE"){if(e.emulateJSON)b.data._method=g;b.type="POST";b.beforeSend=function(i){i.setRequestHeader("X-HTTP-Method-Override", 27 | g)}}h.ajax(b)};var n=function(){},r=function(a,b,c){var d;d=b&&b.hasOwnProperty("constructor")?b.constructor:function(){return a.apply(this,arguments)};n.prototype=a.prototype;d.prototype=new n;b&&f.extend(d.prototype,b);c&&f.extend(d,c);d.prototype.constructor=d;d.__super__=a.prototype;return d},k=function(a){if(!(a&&a.url))throw Error("A 'url' property or function must be specified");return f.isFunction(a.url)?a.url():a.url},j=function(a,b,c){return function(d){a?a(b,d):b.trigger("error",b,d,c)}}})(); 28 | -------------------------------------------------------------------------------- /app/web/js/config.js: -------------------------------------------------------------------------------- 1 | window.TRANIST_CONFIG = { 2 | api_host: "http://localhost:8000", 3 | deployment_target: 'local', 4 | build: 'now' 5 | } 6 | -------------------------------------------------------------------------------- /app/web/js/store.min.js: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2010-2011 Marcus Westin */ 2 | var store=function(){var b={},e=window,g=e.document,c;b.disabled=false;b.set=function(){};b.get=function(){};b.remove=function(){};b.clear=function(){};b.transact=function(a,d){var f=b.get(a);if(typeof f=="undefined")f={};d(f);b.set(a,f)};b.serialize=function(a){return JSON.stringify(a)};b.deserialize=function(a){if(typeof a=="string")return JSON.parse(a)};var h;try{h="localStorage"in e&&e.localStorage}catch(k){h=false}if(h){c=e.localStorage;b.set=function(a,d){c.setItem(a,b.serialize(d))};b.get= 3 | function(a){return b.deserialize(c.getItem(a))};b.remove=function(a){c.removeItem(a)};b.clear=function(){c.clear()}}else{var i;try{i="globalStorage"in e&&e.globalStorage&&e.globalStorage[e.location.hostname]}catch(l){i=false}if(i){c=e.globalStorage[e.location.hostname];b.set=function(a,d){c[a]=b.serialize(d)};b.get=function(a){return b.deserialize(c[a]&&c[a].value)};b.remove=function(a){delete c[a]};b.clear=function(){for(var a in c)delete c[a]}}else if(g.documentElement.addBehavior){c=g.createElement("div"); 4 | e=function(a){return function(){var d=Array.prototype.slice.call(arguments,0);d.unshift(c);g.body.appendChild(c);c.addBehavior("#default#userData");c.load("localStorage");d=a.apply(b,d);g.body.removeChild(c);return d}};b.set=e(function(a,d,f){a.setAttribute(d,b.serialize(f));a.save("localStorage")});b.get=e(function(a,d){return b.deserialize(a.getAttribute(d))});b.remove=e(function(a,d){a.removeAttribute(d);a.save("localStorage")});b.clear=e(function(a){var d=a.XMLDocument.documentElement.attributes; 5 | a.load("localStorage");for(var f=0,j;j=d[f];f++)a.removeAttribute(j.name);a.save("localStorage")})}}try{b.set("__storejs__","__storejs__");if(b.get("__storejs__")!="__storejs__")b.disabled=true;b.remove("__storejs__")}catch(m){b.disabled=true}return b}(); 6 | -------------------------------------------------------------------------------- /app/web/js/transit.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | /* PLATFORM DETECTION */ 3 | window.using_phonegap = (!_.isUndefined(window.device)); 4 | var uagent = navigator.userAgent.toLowerCase(); 5 | window.platform = null; 6 | 7 | if (uagent.search('android') > -1) { 8 | platform = 'android'; 9 | } else if (uagent.search('ipad') > -1) { 10 | platform = 'ipad'; 11 | } else if (uagent.search('ipod') > -1 || uagent.search('iphone') > -1) { 12 | platform = 'iphone'; 13 | } else if (uagent.search('blackberry') > -1) { 14 | platform = 'blackberry'; 15 | } 16 | 17 | /* RENDER DYNAMIC CONTENT? */ 18 | window.RENDER_DYNAMIC = false; 19 | 20 | // Render extras when using Phonegap and a strong connection is available 21 | if (window.using_phonegap) { 22 | if (_.indexOf([Connection.ETHERNET, Connection.WIFI, Connection.CELL_4G], navigator.network.connection.type) > 0) { 23 | if (network.isReachable(reachableHostname, reachableCallback, [reachableOptions])) { 24 | window.RENDER_DYNAMIC = true; 25 | } 26 | } 27 | // Also render extras if not on a mobile device (ipad is assumed to be an exception 28 | } else { 29 | if (_.indexOf(['android', 'ios', 'blackberry'], platform) == -1) 30 | { 31 | window.RENDER_DYNAMIC = true; 32 | } 33 | } 34 | 35 | /* GLOBALS */ 36 | window.BUS_LINES = { 37 | "red-line-north": "Red Line North", 38 | "red-line-south": "Red Line South", 39 | "blue-line-northwest":" Blue Line Northwest", 40 | "blue-line-southwest": "Blue Line Southwest", 41 | "green-line-northeast": "Green Line Northeast", 42 | "green-line-southeast": "Green Line Southeast", 43 | "yellow-line-southwest": "Yellow Line Southwest", 44 | "yellow-line-southeast": "Yellow Line Southeast" 45 | }; 46 | 47 | window.STOP_LIST_ITEM_TEMPLATE = _.template($('#stop-list-item-template').html()); 48 | window.FAVORITE_LIST_TEMPLATE = _.template($('#favorite-list-template').html()); 49 | window.STOP_DETAIL_TEMPLATE = _.template($('#stop-detail-template').html()); 50 | 51 | window.currentStop = null; 52 | 53 | /* PAGES */ 54 | function showHome() { 55 | $(".page").hide() 56 | $("#home").show(); 57 | 58 | $(window).scrollTop(0) 59 | currentStop = null; 60 | } 61 | 62 | function showFavorites() { 63 | var favorites = getFavorites(); 64 | 65 | var stops = new Array(); 66 | 67 | _.each(favorites, function(favorite) { 68 | var stop = _.detect(TRANSIT_STOPS, function(stop) { 69 | return stop["order"] == favorite; 70 | }); 71 | 72 | stops.push(stop); 73 | }); 74 | 75 | console.log(stops); 76 | 77 | $("#favorites .contents").html(FAVORITE_LIST_TEMPLATE({ "stops": stops })); 78 | 79 | $('#favorites .stop').click(function() { 80 | window.location.hash = "stop/" + $(this).attr("id").substr("favorite-".length, 3); 81 | }); 82 | 83 | $(".page").hide() 84 | $("#favorites").show(); 85 | 86 | $(window).scrollTop(0) 87 | currentStop = null; 88 | } 89 | 90 | function showMap() { 91 | // Create map on demand 92 | if ($("#transit-map .canvas").is(":empty")) { 93 | // TODO 94 | } 95 | 96 | $(".page").hide(); 97 | $("#transit-map").show(); 98 | 99 | $(window).scrollTop(0) 100 | currentStop = null; 101 | } 102 | 103 | function showAbout() { 104 | $(".page").hide() 105 | $("#about").show(); 106 | 107 | $(window).scrollTop(0) 108 | currentStop = null; 109 | } 110 | 111 | function showLines() { 112 | $(".page").hide() 113 | $("#lines").show(); 114 | 115 | $(window).scrollTop(0) 116 | currentStop = null; 117 | } 118 | 119 | function showStops(line_slug) { 120 | var i = 1; 121 | 122 | $("#stops .stop").removeClass("even").hide(); 123 | 124 | // Show stops for the selected line 125 | _.each(TRANSIT_STOPS, function(stop) { 126 | if (stop["line-slug"] == line_slug) { 127 | $("#stops #stop-" + stop["order"]).show(); 128 | 129 | if (i % 2 == 0) { 130 | $("#stops #stop-" + stop["order"]).addClass("even"); 131 | } 132 | 133 | i += 1; 134 | } 135 | }); 136 | 137 | $("#stops .line-name").text(BUS_LINES[line_slug]); 138 | 139 | $(".page").hide() 140 | $("#stops").show(); 141 | 142 | $(window).scrollTop(0) 143 | currentStop = null; 144 | } 145 | 146 | /* UTILS */ 147 | function addStops(data) { 148 | _.each(data, function(stop, index) { 149 | $("#stops ul").append(STOP_LIST_ITEM_TEMPLATE(stop)); 150 | }); 151 | 152 | $('#stops .stop').click(function() { 153 | window.location.hash = "stop/" + $(this).attr("id").substr("stop-".length, 3); 154 | }); 155 | } 156 | 157 | function timesFromSchedule(entries) { 158 | return _.map(entries, function(time) { 159 | ampm = time.substr(time.length - 2, 2); 160 | no_ampm = time.substr(0, time.length - 3); 161 | parts = no_ampm.split(":"); 162 | hours = parseInt(parts[0]); 163 | minutes = parseInt(parts[1]); 164 | 165 | if (ampm == "PM" && hours != "12") { 166 | hours += 12; 167 | } 168 | 169 | d = new Date(); 170 | d.setHours(hours); 171 | d.setMinutes(minutes); 172 | d.setSeconds(0); 173 | d.setMilliseconds(0); 174 | 175 | return d; 176 | }); 177 | } 178 | 179 | function viewStop(stop) { 180 | if (stop === null) { 181 | throw("No stop provided!"); 182 | } 183 | 184 | var today = new Date(); 185 | var day = today.getDay(); 186 | 187 | // Sunday 188 | if (day == 0) { 189 | stop["schedule"] = null; 190 | stop["schedule_message"] = "Tyler Transit buses do not run on Sunday."; 191 | // Saturday 192 | } else if (day == 6) { 193 | // TODO 194 | stop["schedule"] = null; 195 | stop["schedule_message"] = "The Saturday bus schedule is not yet available."; 196 | // Weekday 197 | } else { 198 | stop["schedule"] = stop["weekday_schedule"]; 199 | stop["schedule_message"] = null; 200 | } 201 | 202 | 203 | // If there is a schedule, highlight next stop 204 | if (!_.isNull(stop["schedule"])) { 205 | times = timesFromSchedule(stop["schedule"]); 206 | 207 | var now = new Date(); 208 | 209 | var next_departure = _.detect(times, function(time) { 210 | return time > now; 211 | }); 212 | 213 | if (_.isUndefined(next_departure) || next_departure === null) { 214 | stop["next_departure"] = null; 215 | stop["next_departure_in"] = null; 216 | } else { 217 | stop["next_departure"] = stop["schedule"][times.indexOf(next_departure)] 218 | 219 | var delta = next_departure.getTime() - now.getTime(); 220 | stop["next_departure_in"] = Math.floor((delta / 1000) / 60); 221 | } 222 | } 223 | 224 | stop["is_favorite"] = isFavorite(stop["order"]); 225 | 226 | $(".page").hide() 227 | $("#detail .contents").html(STOP_DETAIL_TEMPLATE(stop)); 228 | 229 | $('#detail .favorite').click(function() { 230 | if (isFavorite(stop["order"]) === true) { 231 | removeStopFromFavorites(stop["order"]); 232 | $(this).text("Add to favorites"); 233 | } else { 234 | addStopToFavorites(stop["order"]); 235 | $(this).text("Remove from favorites"); 236 | } 237 | }); 238 | 239 | $("#detail").show(); 240 | 241 | $(window).scrollTop(0); 242 | currentStop = stop; 243 | } 244 | 245 | function viewStopById(order) { 246 | var stop = _.detect(TRANSIT_STOPS, function(stop) { 247 | return stop["order"] == order; 248 | }); 249 | 250 | if (stop != null) { 251 | viewStop(stop); 252 | } 253 | } 254 | 255 | /* FAVORITES */ 256 | function getFavorites() { 257 | favs = store.get("favorite_stops"); 258 | 259 | if (_.isUndefined(favs)) { 260 | favs = new Array(); 261 | } 262 | 263 | return favs; 264 | } 265 | 266 | function isFavorite(order) { 267 | return (_.indexOf(getFavorites(), order) > -1); 268 | } 269 | 270 | function setFavorites(favs) { 271 | store.set("favorite_stops", favs); 272 | } 273 | 274 | function addStopToFavorites(order) { 275 | favs = getFavorites(); 276 | favs.push(order); 277 | setFavorites(favs); 278 | } 279 | 280 | function removeStopFromFavorites(order) { 281 | favs = getFavorites(); 282 | setFavorites(_.without(favs, order)); 283 | } 284 | 285 | /* URL ROUTING */ 286 | window.StopController = Backbone.Controller.extend({ 287 | routes: { 288 | "": "home", 289 | "favorites": "favorites", 290 | "map": "map", 291 | "about": "about", 292 | "find": "lines", 293 | "line/:line": "line", 294 | "stop/:stop": "stop", 295 | }, 296 | 297 | home: function() { 298 | showHome(); 299 | }, 300 | 301 | favorites: function() { 302 | showFavorites(); 303 | }, 304 | 305 | map: function() { 306 | showMap(); 307 | }, 308 | 309 | about: function() { 310 | showAbout(); 311 | }, 312 | 313 | lines: function() { 314 | showLines(); 315 | }, 316 | 317 | line: function(line) { 318 | showStops(line); 319 | }, 320 | 321 | stop: function(stop) { 322 | viewStopById(stop); 323 | }, 324 | }); 325 | 326 | window.Controller = new StopController(); 327 | 328 | /* EVENT HANDLERS */ 329 | $('header h1').click(function() { 330 | window.location.hash = ""; 331 | }); 332 | 333 | $("#find-a-stop").click(function() { 334 | window.location.hash = "find"; 335 | }); 336 | 337 | $("#view-favorites").click(function() { 338 | window.location.hash = "favorites"; 339 | }); 340 | 341 | $("#view-map").click(function() { 342 | window.location.hash = "map"; 343 | }); 344 | 345 | $("#view-about").click(function() { 346 | window.location.hash = "about"; 347 | }); 348 | 349 | $('#lines .line').click(function() { 350 | window.location.hash = "line/" + $(this).attr("id"); 351 | }); 352 | 353 | $(".close").click(function() { 354 | history.back(); 355 | }); 356 | 357 | /* SETUP */ 358 | if (window.RENDER_DYNAMIC) { 359 | $("#view-map").show(); 360 | } 361 | 362 | addStops(TRANSIT_STOPS); 363 | Backbone.history.start(); 364 | }); 365 | 366 | -------------------------------------------------------------------------------- /app/web/js/underscore-min.js: -------------------------------------------------------------------------------- 1 | // Underscore.js 1.1.6 2 | // (c) 2011 Jeremy Ashkenas, DocumentCloud Inc. 3 | // Underscore is freely distributable under the MIT license. 4 | // Portions of Underscore are inspired or borrowed from Prototype, 5 | // Oliver Steele's Functional, and John Resig's Micro-Templating. 6 | // For all details and documentation: 7 | // http://documentcloud.github.com/underscore 8 | (function(){var p=this,C=p._,m={},i=Array.prototype,n=Object.prototype,f=i.slice,D=i.unshift,E=n.toString,l=n.hasOwnProperty,s=i.forEach,t=i.map,u=i.reduce,v=i.reduceRight,w=i.filter,x=i.every,y=i.some,o=i.indexOf,z=i.lastIndexOf;n=Array.isArray;var F=Object.keys,q=Function.prototype.bind,b=function(a){return new j(a)};typeof module!=="undefined"&&module.exports?(module.exports=b,b._=b):p._=b;b.VERSION="1.1.6";var h=b.each=b.forEach=function(a,c,d){if(a!=null)if(s&&a.forEach===s)a.forEach(c,d);else if(b.isNumber(a.length))for(var e= 9 | 0,k=a.length;e=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a, 13 | c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);var e={computed:Infinity};h(a,function(a,b,f){b=c?c.call(d,a,b,f):a;bd?1:0}),"value")};b.sortedIndex=function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e>1;d(a[g])=0})})};b.zip=function(){for(var a=f.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c), 16 | e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=function(a,b){return function(){if(--a<1)return b.apply(this,arguments)}};b.keys=F||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)l.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a, 20 | b.identity)};b.functions=b.methods=function(a){return b.filter(b.keys(a),function(c){return b.isFunction(a[c])}).sort()};b.extend=function(a){h(f.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){h(f.call(arguments,1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,c){if(a===c)return!0;var d=typeof a;if(d!= 21 | typeof c)return!1;if(a==c)return!0;if(!a&&c||a&&!c)return!1;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual)return a.isEqual(c);if(b.isDate(a)&&b.isDate(c))return a.getTime()===c.getTime();if(b.isNaN(a)&&b.isNaN(c))return!1;if(b.isRegExp(a)&&b.isRegExp(c))return a.source===c.source&&a.global===c.global&&a.ignoreCase===c.ignoreCase&&a.multiline===c.multiline;if(d!=="object")return!1;if(a.length&&a.length!==c.length)return!1;d=b.keys(a);var e=b.keys(c);if(d.length!=e.length)return!1; 22 | for(var f in a)if(!(f in c)||!b.isEqual(a[f],c[f]))return!1;return!0};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(l.call(a,c))return!1;return!0};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=n||function(a){return E.call(a)==="[object Array]"};b.isArguments=function(a){return!(!a||!l.call(a,"callee"))};b.isFunction=function(a){return!(!a||!a.constructor||!a.call||!a.apply)};b.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)}; 23 | b.isNumber=function(a){return!!(a===0||a&&a.toExponential&&a.toFixed)};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===!0||a===!1};b.isDate=function(a){return!(!a||!a.getTimezoneOffset||!a.setUTCFullYear)};b.isRegExp=function(a){return!(!a||!a.test||!a.exec||!(a.ignoreCase||a.ignoreCase===!1))};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.noConflict=function(){p._=C;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e= 24 | 0;e/g,interpolate:/<%=([\s\S]+?)%>/g};b.template=function(a,c){var d=b.templateSettings;d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,"'")+",'"}).replace(d.evaluate|| 25 | null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+"__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');";d=new Function("obj",d);return c?d(c):d};var j=function(a){this._wrapped=a};b.prototype=j.prototype;var r=function(a,c){return c?b(a).chain():a},H=function(a,c){j.prototype[a]=function(){var a=f.call(arguments);D.call(a,this._wrapped);return r(c.apply(b,a),this._chain)}};b.mixin(b);h(["pop","push","reverse","shift","sort", 26 | "splice","unshift"],function(a){var b=i[a];j.prototype[a]=function(){b.apply(this._wrapped,arguments);return r(this._wrapped,this._chain)}});h(["concat","join","slice"],function(a){var b=i[a];j.prototype[a]=function(){return r(b.apply(this._wrapped,arguments),this._chain)}});j.prototype.chain=function(){this._chain=!0;return this};j.prototype.value=function(){return this._wrapped}})(); 27 | -------------------------------------------------------------------------------- /app/web/js/underscore.date.min.js: -------------------------------------------------------------------------------- 1 | (function(a){function t(a,b){function i(a,b){switch(a){case"M":case"MM":c[1]=~~b-1;break;case"D":case"DD":case"DDD":case"DDDD":c[2]=~~b;break;case"YY":b=~~b,c[0]=b+(b>70?1900:2e3);break;case"YYYY":c[0]=~~b;break;case"a":case"A":h=b.toLowerCase()==="pm";break;case"H":case"HH":case"h":case"hh":c[3]=~~b;break;case"m":case"mm":c[4]=~~b;break;case"s":case"ss":c[5]=~~b}}var c=[0],d=/[0-9a-zA-Z]+/g,e=[],f=[],g,h;a.replace(d,function(a){e.push(a)}),b.replace(d,function(a){f.push(a)});for(g=0;g11?"pm":"am";case"A":return m>11?"PM":"AM";case"H":return m;case"HH":return j(m,2);case"h":return m%12||12;case"hh":return j(m%12||12,2);case"m":return n;case"mm":return j(n,2);case"s":return o;case"ss":return j(o,2);case"z":return s("zz").replace(r,"");case"zz":b=p.indexOf("(");if(b>-1)return p.slice(b+1,p.indexOf(")"));return p.slice(p.indexOf(":")).replace(r,"");default:return a.replace("\\","")}}var b=this.date,c=b.getMonth(),h=b.getDate(),k=b.getFullYear(),l=b.getDay(),m=b.getHours(),n=b.getMinutes(),o=b.getSeconds(),p=b.toString(),q=/(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|dddd?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|zz?)/g,r=/[^A-Z]/g;return a.replace(q,s)},add:function(a){return k(this,a,1)},subtract:function(a){return k(this,a,-1)},customize:function(a){var b=a.ordinal,c=a.relativeTime,j;a.weekdays&&(f=a.weekdays),a.weekdaysShort&&(g=a.weekdaysShort),a.months&&(d=a.months),a.monthsShort&&(e=a.monthsShort);if(c)for(j in c)c.hasOwnProperty(j)&&(h[j]=c[j]);b&&b instanceof Function&&(i=b)},from:function(a,b,c){var d=q(this.date,a),e=d<0?h.past:h.future;return c?d:b?r(d):e.replace(/%s/i,r(d))},fromNow:function(a,b){return this.from(c.now(),a,b)},isLeapYear:function(){return c.isLeapYear(this.date.getFullYear())}},c={date:function(a,b){return b?t(a,b):new s(a)},now:function(a){return a?(new Date).getTime():c.date()},isLeapYear:function(a){return a%4===0&&a%100!==0||a%400===0}},typeof window=="undefined"&&typeof module!="undefined"?module.exports=c:b._!==a?b._.mixin(c):b._date=c})() -------------------------------------------------------------------------------- /data/routes/Bus Route Map 1-10-08.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/Bus Route Map 1-10-08.pdf -------------------------------------------------------------------------------- /data/routes/bus_routes/BUS_ROUTE.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/bus_routes/BUS_ROUTE.dbf -------------------------------------------------------------------------------- /data/routes/bus_routes/BUS_ROUTE.prj: -------------------------------------------------------------------------------- 1 | PROJCS["NAD_1983_StatePlane_Texas_North_Central_FIPS_4202_Feet",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",1968500.0],PARAMETER["False_Northing",6561666.666666666],PARAMETER["Central_Meridian",-98.5],PARAMETER["Standard_Parallel_1",32.13333333333333],PARAMETER["Standard_Parallel_2",33.96666666666667],PARAMETER["Latitude_Of_Origin",31.66666666666667],UNIT["Foot_US",0.3048006096012192]] -------------------------------------------------------------------------------- /data/routes/bus_routes/BUS_ROUTE.sbn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/bus_routes/BUS_ROUTE.sbn -------------------------------------------------------------------------------- /data/routes/bus_routes/BUS_ROUTE.sbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/bus_routes/BUS_ROUTE.sbx -------------------------------------------------------------------------------- /data/routes/bus_routes/BUS_ROUTE.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/bus_routes/BUS_ROUTE.shp -------------------------------------------------------------------------------- /data/routes/bus_routes/BUS_ROUTE.shp.xml: -------------------------------------------------------------------------------- 1 | 2 | 20110531114650001.0FALSEBUS_ROUTE0020.000file://\\COT-PC-MJLXE87\C$\Users\ldowney\Desktop\Trash\New Folder\bus_route\BUS_ROUTE.shpLocal Area NetworkProjectedGCS_North_American_1983NAD_1983_StatePlane_Texas_North_Central_FIPS_4202_Feet<ProjectedCoordinateSystem xsi:type='typens:ProjectedCoordinateSystem' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.0'><WKT>PROJCS[&quot;NAD_1983_StatePlane_Texas_North_Central_FIPS_4202_Feet&quot;,GEOGCS[&quot;GCS_North_American_1983&quot;,DATUM[&quot;D_North_American_1983&quot;,SPHEROID[&quot;GRS_1980&quot;,6378137.0,298.257222101]],PRIMEM[&quot;Greenwich&quot;,0.0],UNIT[&quot;Degree&quot;,0.0174532925199433]],PROJECTION[&quot;Lambert_Conformal_Conic&quot;],PARAMETER[&quot;False_Easting&quot;,1968500.0],PARAMETER[&quot;False_Northing&quot;,6561666.666666666],PARAMETER[&quot;Central_Meridian&quot;,-98.5],PARAMETER[&quot;Standard_Parallel_1&quot;,32.13333333333333],PARAMETER[&quot;Standard_Parallel_2&quot;,33.96666666666667],PARAMETER[&quot;Latitude_Of_Origin&quot;,31.66666666666667],UNIT[&quot;Foot_US&quot;,0.3048006096012192],AUTHORITY[&quot;EPSG&quot;,2276]]</WKT><XOrigin>-123407700</XOrigin><YOrigin>-86123500</YOrigin><XYScale>35920690.11000888</XYScale><ZOrigin>-100000</ZOrigin><ZScale>10000</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>0.0032808333333333335</XYTolerance><ZTolerance>0.001</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision><WKID>2276</WKID></ProjectedCoordinateSystem>FeatureClassToFeatureClass "Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_ROUTE" "C:\Users\ldowney\Desktop\Trash\New Folder\bus_route" BUS_ROUTE.shp # "Id "Id" true true false 4 Long 0 10 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_ROUTE,Id,-1,-1;ROUTE "ROUTE" true true false 10 Text 0 0 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_ROUTE,ROUTE,-1,-1;Length "Length" true true false 8 Double 8 38 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_ROUTE,Length,-1,-1;TYPE "TYPE" true true false 50 Text 0 0 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_ROUTE,TYPE,-1,-1;SHAPE_STLe "SHAPE_STLe" false false true 0 Double 0 0 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_ROUTE,SHAPE.STLength(),-1,-1" #20110531114650002011053111465000Microsoft Windows Server 2008 R2 Version 6.1 (Build 7600) ; ESRI ArcGIS 10.0.0.2414BUS_ROUTE002Shapefile0.000datasetEPSG7.4.1Simple3FALSE0FALSEFALSE0BUS_ROUTEFeature Class0FIDFIDOID400Internal feature number.ESRISequential unique whole numbers that are automatically generated.ShapeShapeGeometry000Feature geometry.ESRICoordinates defining the features.IdIdDouble10100ROUTEROUTEString1000LengthLengthDouble19188TYPETYPEString5000SHAPE_STLeSHAPE_STLeDouble190020110531 3 | -------------------------------------------------------------------------------- /data/routes/bus_routes/BUS_ROUTE.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/bus_routes/BUS_ROUTE.shx -------------------------------------------------------------------------------- /data/routes/bus_routes_4326/bus_routes_4326.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/bus_routes_4326/bus_routes_4326.dbf -------------------------------------------------------------------------------- /data/routes/bus_routes_4326/bus_routes_4326.prj: -------------------------------------------------------------------------------- 1 | GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] -------------------------------------------------------------------------------- /data/routes/bus_routes_4326/bus_routes_4326.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/bus_routes_4326/bus_routes_4326.shp -------------------------------------------------------------------------------- /data/routes/bus_routes_4326/bus_routes_4326.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/bus_routes_4326/bus_routes_4326.shx -------------------------------------------------------------------------------- /data/routes/centerline/Centerline.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/centerline/Centerline.dbf -------------------------------------------------------------------------------- /data/routes/centerline/Centerline.prj: -------------------------------------------------------------------------------- 1 | PROJCS["NAD_1983_StatePlane_Texas_North_Central_FIPS_4202_Feet",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",1968500.0],PARAMETER["False_Northing",6561666.666666666],PARAMETER["Central_Meridian",-98.5],PARAMETER["Standard_Parallel_1",32.13333333333333],PARAMETER["Standard_Parallel_2",33.96666666666667],PARAMETER["Latitude_Of_Origin",31.66666666666667],UNIT["Foot_US",0.3048006096012192]] -------------------------------------------------------------------------------- /data/routes/centerline/Centerline.sbn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/centerline/Centerline.sbn -------------------------------------------------------------------------------- /data/routes/centerline/Centerline.sbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/centerline/Centerline.sbx -------------------------------------------------------------------------------- /data/routes/centerline/Centerline.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/centerline/Centerline.shp -------------------------------------------------------------------------------- /data/routes/centerline/Centerline.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/centerline/Centerline.shx -------------------------------------------------------------------------------- /data/routes/centerline_4326/centerline_4326.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/centerline_4326/centerline_4326.dbf -------------------------------------------------------------------------------- /data/routes/centerline_4326/centerline_4326.prj: -------------------------------------------------------------------------------- 1 | GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] -------------------------------------------------------------------------------- /data/routes/centerline_4326/centerline_4326.qpj: -------------------------------------------------------------------------------- 1 | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4326"]] 2 | -------------------------------------------------------------------------------- /data/routes/centerline_4326/centerline_4326.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/centerline_4326/centerline_4326.shp -------------------------------------------------------------------------------- /data/routes/centerline_4326/centerline_4326.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/centerline_4326/centerline_4326.shx -------------------------------------------------------------------------------- /data/routes/city_limits/City Limits.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/city_limits/City Limits.dbf -------------------------------------------------------------------------------- /data/routes/city_limits/City Limits.prj: -------------------------------------------------------------------------------- 1 | PROJCS["NAD_1983_StatePlane_Texas_North_Central_FIPS_4202_Feet",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",1968500.0],PARAMETER["False_Northing",6561666.666666666],PARAMETER["Central_Meridian",-98.5],PARAMETER["Standard_Parallel_1",32.13333333333333],PARAMETER["Standard_Parallel_2",33.96666666666667],PARAMETER["Latitude_Of_Origin",31.66666666666667],UNIT["Foot_US",0.3048006096012192]] -------------------------------------------------------------------------------- /data/routes/city_limits/City Limits.sbn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/city_limits/City Limits.sbn -------------------------------------------------------------------------------- /data/routes/city_limits/City Limits.sbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/city_limits/City Limits.sbx -------------------------------------------------------------------------------- /data/routes/city_limits/City Limits.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/city_limits/City Limits.shp -------------------------------------------------------------------------------- /data/routes/city_limits/City Limits.shp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {B3DAC203-AC90-410D-B47F-320C30213ACE}2011050922005000FALSE20110509220050002011050922005000FeatureClassToFeatureClass "Database Connections\SmithCounty.sde\SmithCounty.GIS.AdministrativeBoundaries\SmithCounty.GIS.CITY_LIMITS" K:\GIS\WEBSHARE\downloads "City Limits.shp" # "EFFECTIVE 'EFFECTIVE' true true false 15 Text 0 0 ,First,#,Database Connections\SmithCounty.sde\SmithCounty.GIS.AdministrativeBoundaries\SmithCounty.GIS.CITY_LIMITS,EFFECTIVE,-1,-1;City 'City' true true false 35 Text 0 0 ,First,#,Database Connections\SmithCounty.sde\SmithCounty.GIS.AdministrativeBoundaries\SmithCounty.GIS.CITY_LIMITS,City,-1,-1;City_ID 'City_ID' true true false 4 Long 0 10 ,First,#,Database Connections\SmithCounty.sde\SmithCounty.GIS.AdministrativeBoundaries\SmithCounty.GIS.CITY_LIMITS,City_ID,-1,-1;MSAG_Community 'MSAG_Community' true true false 35 Text 0 0 ,First,#,Database Connections\SmithCounty.sde\SmithCounty.GIS.AdministrativeBoundaries\SmithCounty.GIS.CITY_LIMITS,MSAG_Community,-1,-1;Source 'Source' true true false 50 Text 0 0 ,First,#,Database Connections\SmithCounty.sde\SmithCounty.GIS.AdministrativeBoundaries\SmithCounty.GIS.CITY_LIMITS,Source,-1,-1;LastUpLoad 'LastUpLoad' true true false 36 Date 0 0 ,First,#,Database Connections\SmithCounty.sde\SmithCounty.GIS.AdministrativeBoundaries\SmithCounty.GIS.CITY_LIMITS,LastUpLoad,-1,-1;SHAPE_STArea() 'SHAPE_STArea()' false false true 0 Double 0 0 ,First,#,Database Connections\SmithCounty.sde\SmithCounty.GIS.AdministrativeBoundaries\SmithCounty.GIS.CITY_LIMITS,SHAPE.STArea(),-1,-1;SHAPE_STLength() 'SHAPE_STLength()' false false true 0 Double 0 0 ,First,#,Database Connections\SmithCounty.sde\SmithCounty.GIS.AdministrativeBoundaries\SmithCounty.GIS.CITY_LIMITS,SHAPE.STLength(),-1,-1" # "K:\GIS\WEBSHARE\downloads\City Limits.shp"Microsoft Windows Vista Version 6.1 (Build 7600) ; ESRI ArcCatalog 9.3.1.3500enREQUIRED: A brief narrative summary of the data set.REQUIRED: A summary of the intentions with which the data set was developed.REQUIRED: The name of an organization or individual that developed the data set.REQUIRED: The date when the data set is published or otherwise made available for release.City LimitsCity Limitsvector digital data\\GISDATA\GIS\WEBSHARE\downloads\City Limits.shpREQUIRED: The basis on which the time period of content information is determined.REQUIRED: The year (and optionally month, or month and day) for which the data set corresponds to the ground.REQUIRED: The state of the data set.REQUIRED: The frequency with which changes and additions are made to the data set after the initial data set is completed.REQUIRED: Western-most coordinate of the limit of coverage expressed in longitude.REQUIRED: Eastern-most coordinate of the limit of coverage expressed in longitude.REQUIRED: Northern-most coordinate of the limit of coverage expressed in latitude.REQUIRED: Southern-most coordinate of the limit of coverage expressed in latitude.REQUIRED: Reference to a formally registered thesaurus or a similar authoritative source of theme keywords.REQUIRED: Common-use word or phrase used to describe the subject of the data set.REQUIRED: Restrictions and legal prerequisites for accessing the data set.REQUIRED: Restrictions and legal prerequisites for using the data set after access is granted.ShapefileMicrosoft Windows Vista Version 6.1 (Build 7600) ; ESRI ArcCatalog 9.3.1.3500City LimitsenFGDC Content Standards for Digital Geospatial MetadataFGDC-STD-001-1998local timehttp://www.esri.com/metadata/esriprof80.htmlESRI Metadata ProfileREQUIRED: The person responsible for the metadata information.REQUIRED: The organization responsible for the metadata information.REQUIRED: The mailing and/or physical address for the organization or individual.REQUIRED: The city of the address.REQUIRED: The state or province of the address.REQUIRED: The ZIP or other postal code of the address.REQUIRED: The telephone number by which individuals can speak to the organization or individual.20110509ISO 19115 Geographic Information - MetadataDIS_ESRI1.0datasetDownloadable Data0.0000.000002file://\\GISDATA\GIS\WEBSHARE\downloads\City Limits.shpLocal Area Network0.000ShapefileVectorSimplePolygonFALSE0FALSEFALSEG-polygon0GCS_North_American_1983NAD_1983_StatePlane_Texas_North_Central_FIPS_4202_FeetLambert Conformal Conic32.13333333.966667-98.50000031.6666671968500.0000006561666.666667coordinate pairsurvey feet0.0000000.000000North American Datum of 1983Geodetic Reference System 806378137.000000298.257222NAD_1983_StatePlane_Texas_North_Central_FIPS_4202_Feet0City LimitsFeature Class0FIDFIDOID400Internal feature number.ESRISequential unique whole numbers that are automatically generated.ShapeShapeGeometry000Feature geometry.ESRICoordinates defining the features.EFFECTIVEEFFECTIVEString15CityCityString35City_IDCity_IDNumber10MSAG_CommuMSAG_CommuString35SourceSourceString50LastUpLoadLastUpLoadDate8SHAPE_STArSHAPE_STArFloat1911SHAPE_STLeSHAPE_STLeFloat191120110509 4 | -------------------------------------------------------------------------------- /data/routes/city_limits/City Limits.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/city_limits/City Limits.shx -------------------------------------------------------------------------------- /data/routes/city_limits_4326/city_limits_4326.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/city_limits_4326/city_limits_4326.dbf -------------------------------------------------------------------------------- /data/routes/city_limits_4326/city_limits_4326.prj: -------------------------------------------------------------------------------- 1 | GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] -------------------------------------------------------------------------------- /data/routes/city_limits_4326/city_limits_4326.qpj: -------------------------------------------------------------------------------- 1 | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4326"]] 2 | -------------------------------------------------------------------------------- /data/routes/city_limits_4326/city_limits_4326.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/city_limits_4326/city_limits_4326.shp -------------------------------------------------------------------------------- /data/routes/city_limits_4326/city_limits_4326.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/routes/city_limits_4326/city_limits_4326.shx -------------------------------------------------------------------------------- /data/schedules/README: -------------------------------------------------------------------------------- 1 | Bus schedueles: 2 | 3 | * Retrieved from 4 | * Contain NUL bytes (corrected by clean_bus_routes.py) 5 | * Don't include AM/PM descriptor (corrected by clean_bus_routes.py) 6 | -------------------------------------------------------------------------------- /data/schedules/Saturday Bus Schedule.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/schedules/Saturday Bus Schedule.pdf -------------------------------------------------------------------------------- /data/schedules/Weekday Bus Schedule.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/schedules/Weekday Bus Schedule.pdf -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday/blue_line_north_west.csv: -------------------------------------------------------------------------------- 1 | "Roseland & 8th","Glenwood & Erwin","Gentry & Loop 323","Erwin & Lyons","Roseland & 8th" 2 | "6:00","6:05","6:12","6:20","6:28" 3 | "7:00","7:06","7:15","7:23","7:35" 4 | "8:20","8:26","8:35","8:42","8:55" 5 | "9:40","9:46","9:55","10:03","10:15" 6 | "11:00","11:06","11:15","11:23","11:35" 7 | "12:20","12:26","12:35","12:42","12:55" 8 | "1:40","1:46","1:55","2:03","2:15" 9 | "3:00","3:06","3:15","3:23","3:35" 10 | "4:20","4:26","4:35","4:42","4:55" 11 | "5:40","5:46","5:54","6:02","6:10" 12 | "6:45","6:49","6:55","7:03","7:13" 13 | "7:40","7:45","7:52","8:00","8:10" 14 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday/blue_line_south_west.csv: -------------------------------------------------------------------------------- 1 | "Roseland & 8th","Frankston & Walton","Loop 323 & Front","Bellwood & Houston","Roseland & 8th" 2 | "6:30","6:38","6:43","6:48","6:55" 3 | "7:40","7:49","7:56","8:02","8:15" 4 | "9:00","9:09","9:16","9:22","9:35" 5 | "10:20","10:29","10:36","10:42","10:55" 6 | "11:40","11:49","11:56","12:02","12:15" 7 | "1:00","1:09","1:16","1:22","1:35" 8 | "2:20","2:29","2:36","2:42","2:55" 9 | "3:40","3:49","3:56","4:02","4:15" 10 | "5:00","5:09","5:16","5:22","5:35" 11 | "6:15","6:23","6:28","6:33","6:38" 12 | "7:15","7:23","7:28","7:33","7:38" 13 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday/green_line_north_east.csv: -------------------------------------------------------------------------------- 1 | "Roseland & 8th","Beckham & Gentry","Broadway & M.L. King","Golden & 5th","Roseland & 8th" 2 | "6:00","6:10","6:15","6:20","6:28" 3 | "7:00","7:10","7:15","7:20","7:35" 4 | "8:20","8:30","8:35","8:40","8:55" 5 | "9:40","9:50","9:55","10:00","10:15" 6 | "11:00","11:10","11:15","11:20","11:35" 7 | "12:20","12:30","12:35","12:40","12:55" 8 | "1:40","1:50","1:55","2:00","2:15" 9 | "3:00","3:10","3:15","3:20","3:35" 10 | "4:20","4:30","4:35","4:40","4:55" 11 | "5:40","5:50","5:55","6:00","6:10" 12 | "6:45","6:53","6:58","7:03","7:12" 13 | "7:45","7:53","7:58","8:03","8:12" 14 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday/green_line_south_east.csv: -------------------------------------------------------------------------------- 1 | "Roseland & 8th","5th & Loop 323","Spur 248 & Old Omen Rd","Spur 248 & U.T. Tyler","Roseland & 8th" 2 | "6:30","6:38","6:42","6:48","6:55" 3 | "7:40","7:48","7:52","8:00","8:15" 4 | "9:00","9:08","9:12","9:20","9:35" 5 | "10:20","10:28","10:32","10:40","10:55" 6 | "11:40","11:48","11:52","12:00","12:15" 7 | "1:00","1:08","1:12","1:20","1:35" 8 | "2:20","2:28","2:32","2:40","2:55" 9 | "3:40","3:48","3:52","4:00","4:15" 10 | "5:00","5:08","5:12","5:20","5:35" 11 | "6:15","6:22","6:28","6:40","6:44" 12 | "7:15","7:22","7:28","7:40","7:44" 13 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday/red_line_north.csv: -------------------------------------------------------------------------------- 1 | "Roseland & 8th","Broadway & Gentry","Gentry & Glenwood","Houston & Beckham","Roseland & 8th" 2 | "6:00","6:09","6:17","6:22","6:28" 3 | "6:30","6:35","6:45","6:50","7:00" 4 | "7:00","7:10","7:20","7:28","7:35" 5 | "7:40","7:45","7:52","8:05","8:15" 6 | "8:20","8:30","8:40","8:48","8:55" 7 | "9:00","9:05","9:12","9:25","9:35" 8 | "9:40","9:50","10:00","10:08","10:15" 9 | "10:20","10:25","10:32","10:45","10:55" 10 | "11:00","11:10","11:20","11:28","11:35" 11 | "11:40","11:45","11:52","12:05","12:15" 12 | "12:20","12:30","12:40","12:48","12:55" 13 | "1:00","1:05","1:12","1:25","1:35" 14 | "1:40","1:50","2:00","2:08","2:15" 15 | "2:20","2:25","2:32","2:45","2:55" 16 | "3:00","3:10","3:20","3:28","3:35" 17 | "3:40","3:45","3:52","4:05","4:15" 18 | "4:20","4:30","4:40","4:48","4:55" 19 | "5:00","5:05","5:12","5:25","5:33" 20 | "5:40","5:50","6:00","6:08","6:12" 21 | "6:15","6:20","6:27","6:35","6:38" 22 | "6:45","6:52","6:57","7:05","7:13" 23 | "7:15","7:20","7:27","7:37","7:43" 24 | "7:45","7:50","8:00","8:08","8:14" 25 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday/red_line_south.csv: -------------------------------------------------------------------------------- 1 | "Roseland & 8th","Broadway & Loop 323","Broadway & Heritage","Broadway & Shiloh","Roseland & 8th" 2 | "6:00","6:09","6:17","6:22","6:28" 3 | "6:30","6:35","6:45","6:50","7:00" 4 | "7:00","7:10","7:20","7:28","7:35" 5 | "7:40","7:45","7:52","8:05","8:15" 6 | "8:20","8:30","8:40","8:48","8:55" 7 | "9:00","9:05","9:12","9:25","9:35" 8 | "9:40","9:50","10:00","10:08","10:15" 9 | "10:20","10:25","10:32","10:45","10:55" 10 | "11:00","11:10","11:20","11:28","11:35" 11 | "11:40","11:45","11:52","12:05","12:15" 12 | "12:20","12:30","12:40","12:48","12:55" 13 | "1:00","1:05","1:12","1:25","1:35" 14 | "1:40","1:50","2:00","2:08","2:15" 15 | "2:20","2:25","2:32","2:45","2:55" 16 | "3:00","3:10","3:20","3:28","3:35" 17 | "3:40","3:45","3:52","4:05","4:15" 18 | "4:20","4:30","4:40","4:48","4:55" 19 | "5:00","5:05","5:12","5:25","5:33" 20 | "5:40","5:50","6:00","6:08","6:12" 21 | "6:15","6:20","6:27","6:35","6:38" 22 | "6:45","6:52","6:57","7:05","7:13" 23 | "7:15","7:20","7:27","7:37","7:43" 24 | "7:45","7:50","8:00","8:08","8:14" 25 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday/yellow_line_south_east.csv: -------------------------------------------------------------------------------- 1 | "Roseland & 8th","Troup Hwy & Loop 323","Shiloh & Paluxy","Troup Hwy & Loop 323","Roseland & 8th" 2 | "6:30","6:35","6:44","6:49","6:55" 3 | "7:40","7:47","7:55","8:00","8:15" 4 | "9:00","9:07","9:15","9:20","9:35" 5 | "10:20","10:27","10:35","10:40","10:55" 6 | "11:40","11:47","11:55","12:00","12:15" 7 | "1:00","1:07","1:15","1:20","1:35" 8 | "2:20","2:27","2:35","2:40","2:55" 9 | "3:40","3:47","3:55","4:00","4:15" 10 | "5:00","5:07","5:15","5:20","5:30" 11 | "6:15","6:20","6:29","6:39","6:42" 12 | "7:15","7:20","7:29","7:39","7:42" 13 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday/yellow_line_south_west.csv: -------------------------------------------------------------------------------- 1 | "Roseland & 8th","Old Bullard & Loop 323","Grande & Hollytree","Towne Park & Loop 323","Roseland & 8th" 2 | "6:00","6:08","6:13","6:23","6:28" 3 | "7:00","7:08","7:13","7:24","7:35" 4 | "8:20","8:28","8:33","8:43","8:55" 5 | "9:40","9:48","9:53","10:02","10:15" 6 | "11:00","11:08","11:13","11:23","11:35" 7 | "12:20","12:28","12:33","12:34","12:55" 8 | "1:40","1:48","1:53","2:03","2:15" 9 | "3:00","3:08","3:13","3:22","3:35" 10 | "4:20","4:28","4:33","4:36","4:55" 11 | "5:40","5:40","5:45","5:55","6:10" 12 | "6:45","6:53","6:58","7:08","7:12" 13 | "7:45","7:53","7:58","8:08","8:12" 14 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday_clean/blue_line_north_west.csv: -------------------------------------------------------------------------------- 1 | Roseland & 8th,"6:00,7:00,8:20,9:40,11:00,12:20,13:40,15:0,16:20,17:40,18:45,19:40" 2 | Glenwood & Erwin,"6:05,7:06,8:26,9:46,11:06,12:26,13:46,15:6,16:26,17:46,18:49,19:45" 3 | Gentry & Loop 323,"6:12,7:15,8:35,9:55,11:15,12:35,13:55,15:15,16:35,17:54,18:55,19:52" 4 | Erwin & Lyons,"6:20,7:23,8:42,10:03,11:23,12:42,14:3,15:23,16:42,18:2,19:3,20:0" 5 | Roseland & 8th,"6:28,7:35,8:55,10:15,11:35,12:55,14:15,15:35,16:55,18:10,19:13,20:10" 6 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday_clean/blue_line_south_west.csv: -------------------------------------------------------------------------------- 1 | Roseland & 8th,"6:30,7:40,9:00,10:20,11:40,13:0,14:20,15:40,17:0,18:15,19:15" 2 | Frankston & Walton,"6:38,7:49,9:09,10:29,11:49,13:9,14:29,15:49,17:9,18:23,19:23" 3 | Loop 323 & Front,"6:43,7:56,9:16,10:36,11:56,13:16,14:36,15:56,17:16,18:28,19:28" 4 | Bellwood & Houston,"6:48,8:02,9:22,10:42,12:02,13:22,14:42,16:2,17:22,18:33,19:33" 5 | Roseland & 8th,"6:55,8:15,9:35,10:55,12:15,13:35,14:55,16:15,17:35,18:38,19:38" 6 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday_clean/green_line_north_east.csv: -------------------------------------------------------------------------------- 1 | Roseland & 8th,"6:00,7:00,8:20,9:40,11:00,12:20,13:40,15:0,16:20,17:40,18:45,19:45" 2 | Beckham & Gentry,"6:10,7:10,8:30,9:50,11:10,12:30,13:50,15:10,16:30,17:50,18:53,19:53" 3 | Broadway & M.L. King,"6:15,7:15,8:35,9:55,11:15,12:35,13:55,15:15,16:35,17:55,18:58,19:58" 4 | Golden & 5th,"6:20,7:20,8:40,10:00,11:20,12:40,14:0,15:20,16:40,18:0,19:3,20:3" 5 | Roseland & 8th,"6:28,7:35,8:55,10:15,11:35,12:55,14:15,15:35,16:55,18:10,19:12,20:12" 6 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday_clean/green_line_south_east.csv: -------------------------------------------------------------------------------- 1 | Roseland & 8th,"6:30,7:40,9:00,10:20,11:40,13:0,14:20,15:40,17:0,18:15,19:15" 2 | 5th & Loop 323,"6:38,7:48,9:08,10:28,11:48,13:8,14:28,15:48,17:8,18:22,19:22" 3 | Spur 248 & Old Omen Rd,"6:42,7:52,9:12,10:32,11:52,13:12,14:32,15:52,17:12,18:28,19:28" 4 | Spur 248 & U.T. Tyler,"6:48,8:00,9:20,10:40,12:00,13:20,14:40,16:0,17:20,18:40,19:40" 5 | Roseland & 8th,"6:55,8:15,9:35,10:55,12:15,13:35,14:55,16:15,17:35,18:44,19:44" 6 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday_clean/red_line_north.csv: -------------------------------------------------------------------------------- 1 | Roseland & 8th,"6:00,6:30,7:00,7:40,8:20,9:00,9:40,10:20,11:00,11:40,12:20,13:0,13:40,14:20,15:0,15:40,16:20,17:0,17:40,18:15,18:45,19:15,19:45" 2 | Broadway & Gentry,"6:09,6:35,7:10,7:45,8:30,9:05,9:50,10:25,11:10,11:45,12:30,13:5,13:50,14:25,15:10,15:45,16:30,17:5,17:50,18:20,18:52,19:20,19:50" 3 | Gentry & Glenwood,"6:17,6:45,7:20,7:52,8:40,9:12,10:00,10:32,11:20,11:52,12:40,13:12,14:0,14:32,15:20,15:52,16:40,17:12,18:0,18:27,18:57,19:27,20:0" 4 | Houston & Beckham,"6:22,6:50,7:28,8:05,8:48,9:25,10:08,10:45,11:28,12:05,12:48,13:25,14:8,14:45,15:28,16:5,16:48,17:25,18:8,18:35,19:5,19:37,20:8" 5 | Roseland & 8th,"6:28,7:00,7:35,8:15,8:55,9:35,10:15,10:55,11:35,12:15,12:55,13:35,14:15,14:55,15:35,16:15,16:55,17:33,18:12,18:38,19:13,19:43,20:14" 6 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday_clean/red_line_south.csv: -------------------------------------------------------------------------------- 1 | Roseland & 8th,"6:00,6:30,7:00,7:40,8:20,9:00,9:40,10:20,11:00,11:40,12:20,13:0,13:40,14:20,15:0,15:40,16:20,17:0,17:40,18:15,18:45,19:15,19:45" 2 | Broadway & Loop 323,"6:09,6:35,7:10,7:45,8:30,9:05,9:50,10:25,11:10,11:45,12:30,13:5,13:50,14:25,15:10,15:45,16:30,17:5,17:50,18:20,18:52,19:20,19:50" 3 | Broadway & Heritage,"6:17,6:45,7:20,7:52,8:40,9:12,10:00,10:32,11:20,11:52,12:40,13:12,14:0,14:32,15:20,15:52,16:40,17:12,18:0,18:27,18:57,19:27,20:0" 4 | Broadway & Shiloh,"6:22,6:50,7:28,8:05,8:48,9:25,10:08,10:45,11:28,12:05,12:48,13:25,14:8,14:45,15:28,16:5,16:48,17:25,18:8,18:35,19:5,19:37,20:8" 5 | Roseland & 8th,"6:28,7:00,7:35,8:15,8:55,9:35,10:15,10:55,11:35,12:15,12:55,13:35,14:15,14:55,15:35,16:15,16:55,17:33,18:12,18:38,19:13,19:43,20:14" 6 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday_clean/yellow_line_south_east.csv: -------------------------------------------------------------------------------- 1 | Roseland & 8th,"6:30,7:40,9:00,10:20,11:40,13:0,14:20,15:40,17:0,18:15,19:15" 2 | Troup Hwy & Loop 323,"6:35,7:47,9:07,10:27,11:47,13:7,14:27,15:47,17:7,18:20,19:20" 3 | Shiloh & Paluxy,"6:44,7:55,9:15,10:35,11:55,13:15,14:35,15:55,17:15,18:29,19:29" 4 | Troup Hwy & Loop 323,"6:49,8:00,9:20,10:40,12:00,13:20,14:40,16:0,17:20,18:39,19:39" 5 | Roseland & 8th,"6:55,8:15,9:35,10:55,12:15,13:35,14:55,16:15,17:30,18:42,19:42" 6 | -------------------------------------------------------------------------------- /data/schedules/bus_routes_weekday_clean/yellow_line_south_west.csv: -------------------------------------------------------------------------------- 1 | Roseland & 8th,"6:00,7:00,8:20,9:40,11:00,12:20,13:40,15:0,16:20,17:40,18:45,19:45" 2 | Old Bullard & Loop 323,"6:08,7:08,8:28,9:48,11:08,12:28,13:48,15:8,16:28,17:40,18:53,19:53" 3 | Grande & Hollytree,"6:13,7:13,8:33,9:53,11:13,12:33,13:53,15:13,16:33,17:45,18:58,19:58" 4 | Towne Park & Loop 323,"6:23,7:24,8:43,10:02,11:23,12:34,14:3,15:22,16:36,17:55,19:8,20:8" 5 | Roseland & 8th,"6:28,7:35,8:55,10:15,11:35,12:55,14:15,15:35,16:55,18:10,19:12,20:12" 6 | -------------------------------------------------------------------------------- /data/schedules/clean_bus_routes.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | """ 4 | Bus service never starts earlier than 6:00 AM. 5 | Bus service never ends later than 8:30 PM. 6 | """ 7 | 8 | import csv 9 | import os 10 | 11 | INPUT_DIR = 'bus_routes_weekday' 12 | OUTPUT_DIR = 'bus_routes_weekday_clean' 13 | 14 | try: 15 | os.mkdir(OUTPUT_DIR) 16 | except OSError: 17 | pass 18 | 19 | for filename in os.listdir(INPUT_DIR): 20 | path = os.path.join(INPUT_DIR, filename) 21 | 22 | buffered = [] 23 | output = [] 24 | 25 | with open(path, 'rU') as f: 26 | for line in f: 27 | buffered.append(line.replace('\x00', ' ')) 28 | 29 | reader = csv.reader(buffered) 30 | headers = reader.next() 31 | 32 | is_pm = [False for r in headers] 33 | 34 | output.append(headers) 35 | 36 | for row in reader: 37 | o = [] 38 | 39 | for i, v in enumerate(row): 40 | hour, minute = map(int, v.split(':')) 41 | 42 | if is_pm[i]: 43 | o.append('%i:%i' % (hour + 12, minute)) 44 | else: 45 | if hour < 6: 46 | o.append('%i:%i' % (hour + 12, minute)) 47 | is_pm[i] = True 48 | else: 49 | o.append(v) 50 | 51 | output.append(o) 52 | 53 | headers = output[0] 54 | formatted_output = zip(output[0], [','.join(i) for i in zip(*output[1:])]) 55 | 56 | with open(os.path.join(OUTPUT_DIR, filename), 'w') as f: 57 | writer = csv.writer(f) 58 | 59 | writer.writerows(formatted_output) 60 | -------------------------------------------------------------------------------- /data/stops/README: -------------------------------------------------------------------------------- 1 | bus-stops.pdf acquired from Tyler Transit via email request on May 17th, 2011. 2 | -------------------------------------------------------------------------------- /data/stops/bus-stops.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/stops/bus-stops.pdf -------------------------------------------------------------------------------- /data/stops/bus_stops/BUS_STOPS.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/stops/bus_stops/BUS_STOPS.dbf -------------------------------------------------------------------------------- /data/stops/bus_stops/BUS_STOPS.prj: -------------------------------------------------------------------------------- 1 | PROJCS["NAD_1983_StatePlane_Texas_North_Central_FIPS_4202_Feet",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",1968500.0],PARAMETER["False_Northing",6561666.666666666],PARAMETER["Central_Meridian",-98.5],PARAMETER["Standard_Parallel_1",32.13333333333333],PARAMETER["Standard_Parallel_2",33.96666666666667],PARAMETER["Latitude_Of_Origin",31.66666666666667],UNIT["Foot_US",0.3048006096012192]] -------------------------------------------------------------------------------- /data/stops/bus_stops/BUS_STOPS.sbn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/stops/bus_stops/BUS_STOPS.sbn -------------------------------------------------------------------------------- /data/stops/bus_stops/BUS_STOPS.sbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/stops/bus_stops/BUS_STOPS.sbx -------------------------------------------------------------------------------- /data/stops/bus_stops/BUS_STOPS.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/stops/bus_stops/BUS_STOPS.shp -------------------------------------------------------------------------------- /data/stops/bus_stops/BUS_STOPS.shp.xml: -------------------------------------------------------------------------------- 1 | 2 | 20110531114618001.0FALSEBUS_STOPS0020.000file://\\COT-PC-MJLXE87\C$\Users\ldowney\Desktop\Trash\New Folder\bus_stops\BUS_STOPS.shpLocal Area NetworkProjectedGCS_North_American_1983NAD_1983_StatePlane_Texas_North_Central_FIPS_4202_Feet<ProjectedCoordinateSystem xsi:type='typens:ProjectedCoordinateSystem' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.0'><WKT>PROJCS[&quot;NAD_1983_StatePlane_Texas_North_Central_FIPS_4202_Feet&quot;,GEOGCS[&quot;GCS_North_American_1983&quot;,DATUM[&quot;D_North_American_1983&quot;,SPHEROID[&quot;GRS_1980&quot;,6378137.0,298.257222101]],PRIMEM[&quot;Greenwich&quot;,0.0],UNIT[&quot;Degree&quot;,0.0174532925199433]],PROJECTION[&quot;Lambert_Conformal_Conic&quot;],PARAMETER[&quot;False_Easting&quot;,1968500.0],PARAMETER[&quot;False_Northing&quot;,6561666.666666666],PARAMETER[&quot;Central_Meridian&quot;,-98.5],PARAMETER[&quot;Standard_Parallel_1&quot;,32.13333333333333],PARAMETER[&quot;Standard_Parallel_2&quot;,33.96666666666667],PARAMETER[&quot;Latitude_Of_Origin&quot;,31.66666666666667],UNIT[&quot;Foot_US&quot;,0.3048006096012192],AUTHORITY[&quot;EPSG&quot;,2276]]</WKT><XOrigin>-123407700</XOrigin><YOrigin>-86123500</YOrigin><XYScale>35920690.11000888</XYScale><ZOrigin>-100000</ZOrigin><ZScale>10000</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>0.0032808333333333335</XYTolerance><ZTolerance>0.001</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision><WKID>2276</WKID></ProjectedCoordinateSystem>FeatureClassToFeatureClass "Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_STOPS" "C:\Users\ldowney\Desktop\Trash\New Folder\bus_stops" BUS_STOPS.shp # "ID "ID" true true false 8 Double 0 10 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_STOPS,ID,-1,-1;LINE "LINE" true true false 16 Text 0 0 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_STOPS,LINE,-1,-1;TYPE "TYPE" true true false 16 Text 0 0 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_STOPS,TYPE,-1,-1;CONDITION "CONDITION" true true false 30 Text 0 0 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_STOPS,CONDITION,-1,-1;TRANSFER "TRANSFER" true true false 4 Long 0 10 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_STOPS,TRANSFER,-1,-1;BLOCK "BLOCK" true true false 8 Double 0 10 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_STOPS,BLOCK,-1,-1;STREET "STREET" true true false 30 Text 0 0 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_STOPS,STREET,-1,-1;ORDER_NO "ORDER_NO" true true false 2 Short 0 5 ,First,#,Database Connections\Tyler@GISDATA - Windows - DC.sde\Tyler.GIS.Transportation\Tyler.GIS.BUS_STOPS,ORDER_NO,-1,-1" #20110531114618002011053111461800Microsoft Windows Server 2008 R2 Version 6.1 (Build 7600) ; ESRI ArcGIS 10.0.0.2414BUS_STOPS002Shapefile0.000datasetEPSG7.4.1Simple1FALSE0FALSEFALSE0BUS_STOPSFeature Class0FIDFIDOID400Internal feature number.ESRISequential unique whole numbers that are automatically generated.ShapeShapeGeometry000Feature geometry.ESRICoordinates defining the features.IDIDDouble10100LINELINEString1600TYPETYPEString1600CONDITIONCONDITIONString3000TRANSFERTRANSFERDouble10100BLOCKBLOCKDouble10100STREETSTREETString3000ORDER_NOORDER_NOInteger55020110531 3 | -------------------------------------------------------------------------------- /data/stops/bus_stops/BUS_STOPS.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/stops/bus_stops/BUS_STOPS.shx -------------------------------------------------------------------------------- /data/stops/bus_stops_4326/bus_stops_4326.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/stops/bus_stops_4326/bus_stops_4326.dbf -------------------------------------------------------------------------------- /data/stops/bus_stops_4326/bus_stops_4326.prj: -------------------------------------------------------------------------------- 1 | GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] -------------------------------------------------------------------------------- /data/stops/bus_stops_4326/bus_stops_4326.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/stops/bus_stops_4326/bus_stops_4326.shp -------------------------------------------------------------------------------- /data/stops/bus_stops_4326/bus_stops_4326.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/stops/bus_stops_4326/bus_stops_4326.shx -------------------------------------------------------------------------------- /data/stops/bus_stops_data/bus_stops_data.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/stops/bus_stops_data/bus_stops_data.dbf -------------------------------------------------------------------------------- /data/stops/bus_stops_data/bus_stops_data.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/stops/bus_stops_data/bus_stops_data.shp -------------------------------------------------------------------------------- /data/stops/bus_stops_data/bus_stops_data.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacktyler/hacktyler-transit/17de7422457d1eb955c2ccaca7f064642a0f9bad/data/stops/bus_stops_data/bus_stops_data.shx -------------------------------------------------------------------------------- /data/stops/compute_estimated_schedule.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import csv 4 | from datetime import date, datetime, time 5 | 6 | DUMMY_TIME = date(2100, 12, 31) 7 | 8 | LINE = 1 9 | DIRECTION = 2 10 | WEEKDAY_SCHEDULE = 12 11 | HAS_OFFICIAL_TIMES = 14 12 | 13 | lines = {} 14 | 15 | def get_lines(): 16 | line_order = [] 17 | lines = {} 18 | 19 | with open('bus-stops.csv', 'r') as f: 20 | reader = csv.reader(f) 21 | header = reader.next() 22 | 23 | for row in reader: 24 | line = row[LINE] + " Line " + row[DIRECTION] 25 | 26 | if line in lines: 27 | lines[line].append(row) 28 | else: 29 | lines[line] = [row] 30 | line_order.append(line) 31 | 32 | return header, line_order, lines 33 | 34 | def extract_waypoints(stops): 35 | waypoints = [] 36 | 37 | for i, stop in enumerate(stops): 38 | if stop[HAS_OFFICIAL_TIMES]: 39 | waypoints.append(i) 40 | 41 | return waypoints 42 | 43 | def extract_schedule_from_stop(stop): 44 | schedule = [] 45 | 46 | for t in stop[WEEKDAY_SCHEDULE].split(','): 47 | hours, minutes = map(int, t.split(':')) 48 | t = time(hours, minutes) 49 | schedule.append(datetime.combine(DUMMY_TIME, t)) 50 | 51 | return schedule 52 | 53 | def calculate_time_deltas(schedule1, schedule2): 54 | if len(schedule1) != len(schedule2): 55 | raise ValueError('Got schedules with different lengths.') 56 | 57 | deltas = [] 58 | 59 | for i in range(len(schedule1)): 60 | t1 = schedule1[i] 61 | t2 = schedule2[i] 62 | 63 | deltas.append(t2 - t1) 64 | 65 | return deltas 66 | 67 | def compute_schedule(stops, waypoints): 68 | previous_waypoint = waypoints[0] 69 | 70 | for next_waypoint in waypoints[1:]: 71 | num_stops = next_waypoint - previous_waypoint 72 | previous_waypoint_schedule = extract_schedule_from_stop(stops[previous_waypoint]) 73 | next_waypoint_schedule = extract_schedule_from_stop(stops[next_waypoint]) 74 | deltas = calculate_time_deltas(previous_waypoint_schedule, next_waypoint_schedule) 75 | increments = [d / num_stops for d in deltas] 76 | 77 | for i in range(num_stops): 78 | stop = stops[previous_waypoint + i] 79 | 80 | times = [] 81 | 82 | for j in range(len(increments)): 83 | t = previous_waypoint_schedule[j] + (increments[j] * i) 84 | t = '%s:%s' % (t.hour, str(t.minute).rjust(2 ,'0')) 85 | times.append(t) 86 | 87 | stop[WEEKDAY_SCHEDULE] = ','.join(times) 88 | 89 | #print stop[1], stop[WEEKDAY_SCHEDULE] 90 | 91 | previous_waypoint = next_waypoint; 92 | 93 | def write_lines(header, line_order, lines): 94 | with open('bus-stops-schedule.csv', 'w') as f: 95 | writer = csv.writer(f) 96 | writer.writerow(header) 97 | 98 | for line in line_order: 99 | for stop in lines[line]: 100 | writer.writerow(stop) 101 | 102 | if __name__ == "__main__": 103 | header, line_order, lines = get_lines() 104 | 105 | for line, stops in lines.items(): 106 | waypoints = extract_waypoints(stops) 107 | compute_schedule(stops, waypoints) 108 | 109 | write_lines(header, line_order, lines) 110 | -------------------------------------------------------------------------------- /data/stops/make_json.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import csv 4 | import json 5 | 6 | stops = [] 7 | slugs = [] 8 | 9 | with open('bus-stops-schedule.csv', 'r') as f: 10 | reader = csv.DictReader(f) 11 | 12 | for row in reader: 13 | # Don't serialize endpoints (they duplicate first stop) 14 | if row['order'] == 'END': 15 | continue 16 | 17 | # Fix up types for client 18 | row['order'] = int(row['order']) 19 | row['estimated_location'] = (row['estimated_location'] == 'TRUE') 20 | 21 | row['latitude'] = float(row['latitude']) if row['latitude'] else None 22 | row['longitude'] = float(row['longitude']) if row['longitude'] else None 23 | 24 | def format_time(t): 25 | h, m = map(int, t.split(':')) 26 | if h > 12: 27 | return '%i:%02i PM' % (h - 12, m) 28 | elif h == 12: 29 | return '%i:%02i PM' % (h, m) 30 | else: 31 | return '%i:%02i AM' % (h, m) 32 | 33 | row['weekday_schedule'] = map(format_time, row['weekday_schedule'].split(',')) 34 | 35 | # Append a few useful attributes 36 | row['line-slug'] = row['line'].lower() + '-line-' + row['direction'].lower() 37 | 38 | stops.append(row) 39 | 40 | with open('../../app/web/data/bus-stops.js', 'w') as f: 41 | f.write('TRANSIT_STOPS = %s' % json.dumps(stops)) 42 | -------------------------------------------------------------------------------- /data/stops/make_pts_csv.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from osgeo import ogr 4 | 5 | ds = ogr.Open("bus_stops_4326/bus_stops_4326.shp") 6 | layer = ds.GetLayerByName("bus_stops_4326") 7 | 8 | layer.ResetReading() 9 | 10 | points = [] 11 | 12 | for feature in layer: 13 | stop_id = feature.GetFieldAsInteger(5) 14 | geom = feature.GetGeometryRef() 15 | 16 | points.append((stop_id, geom.GetX(), geom.GetY())) 17 | 18 | with open("pts.csv", "w") as f: 19 | for pt in points: 20 | f.write("%s,%s,%s\n" % pt) 21 | 22 | ds = None 23 | -------------------------------------------------------------------------------- /data/stops/make_shapefile.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import csv 4 | import os 5 | import shutil 6 | 7 | from osgeo import ogr 8 | 9 | try: 10 | shutil.rmtree('bus_stops_data') 11 | except OSError: 12 | pass 13 | 14 | os.mkdir('bus_stops_data') 15 | 16 | shp_driver = ogr.GetDriverByName('ESRI Shapefile') 17 | output = shp_driver.CreateDataSource("bus_stops_data/bus_stops_data.shp") 18 | 19 | stops = output.CreateLayer("bus_stops_data", geom_type=ogr.wkbPoint) 20 | 21 | fields = { 22 | 'ORDER': ogr.OFTString, 23 | 'LINE': ogr.OFTString, 24 | 'DIRECTION': ogr.OFTString, 25 | 'NAME': ogr.OFTString, 26 | 'BLOCK': ogr.OFTString, 27 | 'STREET': ogr.OFTString, 28 | 'LANDMARK': ogr.OFTString, 29 | 'MARKER': ogr.OFTString, 30 | 'LATITUDE': ogr.OFTReal, 31 | 'LONGITUDE': ogr.OFTReal, 32 | 'ESTIMATED': ogr.OFTString, 33 | 'TRANSFER': ogr.OFTString, 34 | 'WEEKDAY': ogr.OFTString, 35 | 'SATURDAY': ogr.OFTString, 36 | 'OFC_TIMES': ogr.OFTString, 37 | 'NOTES': ogr.OFTString, 38 | } 39 | 40 | for name, ogr_type in fields.items(): 41 | field = ogr.FieldDefn(name, ogr_type) 42 | stops.CreateField(field) 43 | 44 | with open('bus-stops-schedule.csv', 'r') as f: 45 | reader = csv.DictReader(f) 46 | 47 | for row in reader: 48 | lat = row['latitude'] 49 | lon = row['longitude'] 50 | 51 | if not lat: 52 | continue 53 | 54 | feature = ogr.Feature(feature_def=stops.GetLayerDefn()) 55 | 56 | feature.SetField('ORDER', row['order']) 57 | feature.SetField('LINE', row['line']) 58 | feature.SetField('DIRECTION', row['direction']) 59 | feature.SetField('NAME', row['name']) 60 | feature.SetField('BLOCK', row['block']) 61 | feature.SetField('STREET', row['street']) 62 | feature.SetField('LANDMARK', row['landmark']) 63 | feature.SetField('MARKER', row['marker']) 64 | feature.SetField('LATITUDE', row['latitude']) 65 | feature.SetField('LONGITUDE', row['longitude']) 66 | feature.SetField('ESTIMATED', row['estimated_location']) 67 | feature.SetField('TRANSFER', row['transfer_to']) 68 | feature.SetField('WEEKDAY', row['weekday_schedule']) 69 | feature.SetField('SATURDAY', row['saturday_schedule']) 70 | feature.SetField('OFC_TIMES', row['has_official_times']) 71 | feature.SetField('NOTES', row['notes']) 72 | 73 | wkt = "POINT(%s %s)" % (row['longitude'], row['latitude']) 74 | point = ogr.CreateGeometryFromWkt(wkt) 75 | 76 | feature.SetGeometryDirectly(point) 77 | stops.CreateFeature(feature) 78 | 79 | feature.Destroy() 80 | 81 | # Render blows away prj file 82 | shutil.copyfile('bus_stops_4326/bus_stops_4326.prj', 'bus_stops_data/bus_stops_data.prj') 83 | 84 | output.Destroy() 85 | -------------------------------------------------------------------------------- /fabfile.py: -------------------------------------------------------------------------------- 1 | from fabric.api import * 2 | 3 | """ 4 | Base configuration 5 | """ 6 | #name of the deployed site if different from the name of the project 7 | env.site_name = 'transit' 8 | 9 | env.project_name = 'transit' 10 | env.site_media_prefix = "site_media" 11 | env.admin_media_prefix = "admin_media" 12 | env.repository_url = "git@github.com:hacktyler/hacktyler-transit.git" 13 | env.phonegap_repo = "git@git.phonegap.com:onyxfish/13467_hacktylertransit.git" 14 | 15 | """ 16 | Environments 17 | """ 18 | def production(): 19 | """ 20 | Work on production environment 21 | """ 22 | env.settings = 'production' 23 | env.s3_bucket = 'media.hacktyler.com' 24 | env.app_s3_bucket = 'transit.hacktyler.com' 25 | 26 | def staging(): 27 | """ 28 | Work on staging environment 29 | """ 30 | env.settings = 'staging' 31 | env.s3_bucket = 'media-beta.hacktyler.com' 32 | env.app_s3_bucket = 'transit-beta.hacktyler.com' 33 | 34 | """ 35 | Branches 36 | """ 37 | def stable(): 38 | """ 39 | Work on stable branch. 40 | """ 41 | env.branch = 'stable' 42 | 43 | def master(): 44 | """ 45 | Work on development branch. 46 | """ 47 | env.branch = 'master' 48 | 49 | def branch(branch_name): 50 | """ 51 | Work on any specified branch. 52 | """ 53 | env.branch = branch_name 54 | 55 | """ 56 | Commands - deployment 57 | """ 58 | def deploy_phonegap(): 59 | require('settings', provided_by=[production, staging]) 60 | local('DEPLOYMENT_TARGET=%(settings)s PHONEGAP_REPO=%(phonegap_repo)s ./update_phonegap.sh' % env) 61 | 62 | def gzip_assets(): 63 | """ 64 | GZips every file in the assets directory and places the new file 65 | in the gzip directory with the same filename. 66 | """ 67 | local('python gzip_assets.py') 68 | 69 | def deploy_s3(): 70 | """ 71 | Deploy the latest project site media to S3. 72 | """ 73 | require('settings', provided_by=[production, staging]) 74 | 75 | gzip_assets() 76 | 77 | env.gzip_path = 'gzip/' 78 | local('s3cmd -P --add-header=Content-encoding:gzip --guess-mime-type --rexclude-from=s3exclude sync %(gzip_path)s s3://%(app_s3_bucket)s/' % env) 79 | local('s3cmd put -P app/config-%(settings)s.js s3://%(app_s3_bucket)s/js/config.js' % env) 80 | 81 | def local_app(): 82 | """ 83 | Runs a local web server to test the web app 84 | """ 85 | local('cd app/web && python -m SimpleHTTPServer 8000') 86 | 87 | -------------------------------------------------------------------------------- /gzip_assets.py: -------------------------------------------------------------------------------- 1 | #!/bin/env python 2 | 3 | import os 4 | import gzip 5 | import shutil 6 | 7 | class FakeTime: 8 | def time(self): 9 | return 1261130520.0 10 | 11 | # Hack to override gzip's time implementation 12 | # See: http://stackoverflow.com/questions/264224/setting-the-gzip-timestamp-from-python 13 | gzip.time = FakeTime() 14 | 15 | shutil.rmtree('gzip', ignore_errors=True) 16 | shutil.copytree('app/web', 'gzip') 17 | 18 | for path, dirs, files in os.walk('gzip'): 19 | for filename in files: 20 | file_path = os.path.join(path, filename) 21 | 22 | f_in = open(file_path, 'rb') 23 | contents = f_in.readlines() 24 | f_in.close() 25 | f_out = gzip.open(file_path, 'wb') 26 | f_out.writelines(contents) 27 | f_out.close(); 28 | -------------------------------------------------------------------------------- /maps/make_maps.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | from math import pi,sin,log,exp,atan 4 | 5 | import mapnik2 6 | 7 | DEG_TO_RAD = pi/180 8 | RAD_TO_DEG = 180/pi 9 | 10 | mapnik2.register_fonts('/Library/Fonts/') 11 | mapnik2.register_fonts('/usr/share/fonts') 12 | 13 | def minmax (a,b,c): 14 | a = max(a,b) 15 | a = min(a,c) 16 | return a 17 | 18 | class GoogleProjection: 19 | def __init__(self, levels=18): 20 | self.Bc = [] 21 | self.Cc = [] 22 | self.zc = [] 23 | self.Ac = [] 24 | c = 256 25 | 26 | for d in range(levels + 1): 27 | e = c/2; 28 | self.Bc.append(c/360.0) 29 | self.Cc.append(c/(2 * pi)) 30 | self.zc.append((e,e)) 31 | self.Ac.append(c) 32 | c *= 2 33 | 34 | def fromLLtoPixel(self, ll, zoom): 35 | d = self.zc[zoom] 36 | e = round(d[0] + ll[0] * self.Bc[zoom]) 37 | f = minmax(sin(DEG_TO_RAD * ll[1]),-0.9999,0.9999) 38 | g = round(d[1] + 0.5*log((1+f)/(1-f))*-self.Cc[zoom]) 39 | return (e,g) 40 | 41 | def fromPixelToLL(self, px, zoom): 42 | e = self.zc[zoom] 43 | f = (px[0] - e[0])/self.Bc[zoom] 44 | g = (px[1] - e[1])/-self.Cc[zoom] 45 | h = RAD_TO_DEG * ( 2 * atan(exp(g)) - 0.5 * pi) 46 | return (f,h) 47 | 48 | def render_centered(filename, latitude, longitude, zoom, width=256, height=256, filetype='png256'): 49 | mmap = mapnik2.Map(width, height) 50 | mapnik2.load_map(mmap, 'transit.xml', True) 51 | map_proj = mapnik2.Projection(mmap.srs) 52 | 53 | tile_proj = GoogleProjection() 54 | x, y = tile_proj.fromLLtoPixel([longitude, latitude], zoom) 55 | 56 | # Calculate pixel positions of bottom-left & top-right 57 | half_width = width / 2 58 | half_height = height / 2 59 | p0 = (x - half_width, y + half_height) 60 | p1 = (x + half_width, y - half_height) 61 | 62 | # Convert tile coords to LatLng 63 | l0 = tile_proj.fromPixelToLL(p0, zoom); 64 | l1 = tile_proj.fromPixelToLL(p1, zoom); 65 | 66 | # Convert LatLng to map coords 67 | c0 = map_proj.forward(mapnik2.Coord(l0[0], l0[1])) 68 | c1 = map_proj.forward(mapnik2.Coord(l1[0], l1[1])) 69 | 70 | # Create bounding box for the render 71 | bbox = mapnik2.Box2d(c0.x, c0.y, c1.x, c1.y) 72 | 73 | mmap.zoom_to_box(bbox) 74 | mmap.buffer_size = max([half_width, half_height]) 75 | 76 | # Render image with default Agg renderer 77 | image = mapnik2.Image(width, height) 78 | mapnik2.render(mmap, image) 79 | image.save(filename, filetype) 80 | 81 | if __name__ == "__main__": 82 | # Tyler lower-left: -95.393,32.2307 83 | # Tyler upper-right: -95.1928,32.4419 84 | # Tyler center: -95.301, 32.351 85 | import csv 86 | 87 | zoom = 16 88 | width = 300 89 | height = 225 90 | filetype = 'png256' 91 | 92 | with open('../data/stops/bus-stops.csv', 'r') as f: 93 | rows = csv.DictReader(f) 94 | 95 | for row in rows: 96 | if row['order'] == 'END': 97 | continue 98 | 99 | if not row['latitude'] or not row['longitude']: 100 | continue 101 | 102 | lat = float(row['latitude']) 103 | lon = float(row['longitude']) 104 | 105 | print 'Rendering %s.png' % row['order'] 106 | render_centered('../app/web/images/maps/%s.png' % row['order'], lat, lon, zoom, width, height, filetype) 107 | 108 | -------------------------------------------------------------------------------- /maps/make_tiles.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | # Inspired by generate_tiles.py, part of the Open Street Map project: 4 | # http://svn.openstreetmap.org/applications/rendering/mapnik/generate_tiles.py 5 | 6 | import argparse 7 | from math import pi, sin, log, exp, atan 8 | import multiprocessing 9 | import Queue 10 | import os 11 | import sys 12 | 13 | import mapnik2 14 | 15 | mapnik2.register_fonts('/Library/Fonts/') 16 | mapnik2.register_fonts('/usr/share/fonts') 17 | 18 | DEFAULT_TILE_WIDTH = 256 19 | DEFAULT_TILE_HEIGHT = 256 20 | DEFAULT_MIN_ZOOM = 9 21 | DEFAULT_MAX_ZOOM = 12 22 | DEFAULT_PROCESS_COUNT = 2 23 | DEFAULT_FILE_TYPE = 'png256' 24 | 25 | DEG_TO_RAD = pi / 180 26 | RAD_TO_DEG = 180 / pi 27 | 28 | def minmax (a,b,c): 29 | a = max(a,b) 30 | a = min(a,c) 31 | return a 32 | 33 | class GoogleProjection: 34 | """ 35 | Google projection transformations. Sourced from the OSM. 36 | Have not taken the time to figure out how this works. 37 | """ 38 | def __init__(self, levels=18): 39 | self.Bc = [] 40 | self.Cc = [] 41 | self.zc = [] 42 | self.Ac = [] 43 | c = 256 44 | 45 | for d in range(levels + 1): 46 | e = c/2; 47 | self.Bc.append(c/360.0) 48 | self.Cc.append(c/(2 * pi)) 49 | self.zc.append((e,e)) 50 | self.Ac.append(c) 51 | c *= 2 52 | 53 | def fromLLtoPixel(self, ll, zoom): 54 | d = self.zc[zoom] 55 | e = round(d[0] + ll[0] * self.Bc[zoom]) 56 | f = minmax(sin(DEG_TO_RAD * ll[1]),-0.9999,0.9999) 57 | g = round(d[1] + 0.5*log((1+f)/(1-f))*-self.Cc[zoom]) 58 | return (e,g) 59 | 60 | def fromPixelToLL(self, px, zoom): 61 | e = self.zc[zoom] 62 | f = (px[0] - e[0])/self.Bc[zoom] 63 | g = (px[1] - e[1])/-self.Cc[zoom] 64 | h = RAD_TO_DEG * ( 2 * atan(exp(g)) - 0.5 * pi) 65 | return (f,h) 66 | 67 | class Renderer(multiprocessing.Process): 68 | """ 69 | A tile renderer optimized for running in an isolated process. 70 | """ 71 | def __init__(self, tile_queue, config, width=DEFAULT_TILE_WIDTH, height=DEFAULT_TILE_HEIGHT, filetype=DEFAULT_FILE_TYPE): 72 | multiprocessing.Process.__init__(self) 73 | 74 | self.config = config 75 | self.tile_queue = tile_queue 76 | self.width = width 77 | self.height = height 78 | self.filetype = filetype 79 | 80 | def run(self): 81 | self.mapnik_map = mapnik2.Map(self.width, self.height) 82 | mapnik2.load_map(self.mapnik_map, self.config, True) 83 | 84 | self.map_projection = mapnik2.Projection(self.mapnik_map.srs) 85 | self.tile_projection = GoogleProjection() 86 | 87 | while True: 88 | try: 89 | tile_parameters = self.tile_queue.get_nowait() 90 | except Queue.Empty: 91 | break 92 | 93 | self.render_tile(*tile_parameters) 94 | self.tile_queue.task_done() 95 | 96 | def render_tile(self, filename, tile_x, tile_y, zoom): 97 | """ 98 | Render a single tile to a given filename. 99 | """ 100 | print 'Rendering %s' % (filename) 101 | 102 | # Calculate pixel positions of bottom-left & top-right 103 | half_width = self.width / 2 104 | half_height = self.height / 2 105 | px0 = (tile_x * self.width, (tile_y + 1) * self.height) 106 | px1 = ((tile_x + 1) * self.width, tile_y * self.height) 107 | 108 | # Convert tile coords to LatLng 109 | ll0 = self.tile_projection.fromPixelToLL(px0, zoom); 110 | ll1 = self.tile_projection.fromPixelToLL(px1, zoom); 111 | 112 | # Convert LatLng to map coords 113 | c0 = self.map_projection.forward(mapnik2.Coord(ll0[0], ll0[1])) 114 | c1 = self.map_projection.forward(mapnik2.Coord(ll1[0], ll1[1])) 115 | 116 | # Create bounding box for the render 117 | bbox = mapnik2.Box2d(c0.x, c0.y, c1.x, c1.y) 118 | 119 | self.mapnik_map.zoom_to_box(bbox) 120 | self.mapnik_map.buffer_size = max([half_width, half_height]) 121 | 122 | # Render image with default Agg renderer 123 | image = mapnik2.Image(self.width, self.height) 124 | mapnik2.render(self.mapnik_map, image) 125 | image.save(filename, self.filetype) 126 | 127 | def render_tiles(bbox, config, tile_dir, min_zoom=DEFAULT_MIN_ZOOM, max_zoom=DEFAULT_MAX_ZOOM, process_count=DEFAULT_PROCESS_COUNT): 128 | """ 129 | Renders a batch of tiles for a given bounding-box. 130 | """ 131 | if not os.path.isdir(tile_dir): 132 | os.mkdir(tile_dir) 133 | 134 | tile_projection = GoogleProjection(max_zoom) 135 | 136 | ll0 = (bbox[1], bbox[0]) 137 | ll1 = (bbox[3], bbox[2]) 138 | 139 | tile_queue = multiprocessing.JoinableQueue() 140 | 141 | for zoom in range(min_zoom, max_zoom + 1): 142 | px0 = tile_projection.fromLLtoPixel(ll0, zoom) 143 | px1 = tile_projection.fromLLtoPixel(ll1, zoom) 144 | 145 | tile_x1 = int(px0[0] / 256.0) 146 | tile_x2 = int(px1[0] / 256.0) + 1 147 | tile_y1 = int(px0[1] / 256.0) 148 | tile_y2 = int(px1[1] / 256.0) + 1 149 | 150 | zoom_dir = os.path.join(tile_dir, str(zoom)) 151 | 152 | if not os.path.isdir(zoom_dir): 153 | os.mkdir(zoom_dir) 154 | 155 | for tile_x in range(tile_x1, tile_x2): 156 | # Validate x coordinate 157 | if (tile_x < 0) or (tile_x >= 2**zoom): 158 | continue 159 | 160 | x_dir = os.path.join(zoom_dir, str(tile_x)) 161 | 162 | if not os.path.isdir(x_dir): 163 | os.mkdir(x_dir) 164 | 165 | for tile_y in range(tile_y1, tile_y2): 166 | # Validate y coordinate 167 | if (tile_y < 0) or (tile_y >= 2**zoom): 168 | continue 169 | 170 | filename = os.path.join(x_dir, '%s.png' % str(tile_y)) 171 | 172 | # Submit tile to be rendered into the queue 173 | t = (filename, tile_x, tile_y, zoom) 174 | tile_queue.put(t) 175 | 176 | print 'Using %i processes to render %i tiles' % (process_count, tile_queue.qsize()) 177 | 178 | processes = [] 179 | 180 | for i in range(process_count): 181 | renderer = Renderer(tile_queue, config) 182 | renderer.start() 183 | 184 | processes.append(renderer) 185 | 186 | try: 187 | tile_queue.join() 188 | except KeyboardInterrupt: 189 | for p in processes: 190 | p.terminate() 191 | 192 | if __name__ == "__main__": 193 | 194 | #python render_tiles.py tilemill/wards.xml mayor-2011/.tiles/wards/ -89.03 41.07 -87.51 42.50 9 16 2 195 | parser = argparse.ArgumentParser(description='Render tiles for a given bounding box from a Mapnik2 XML configuration file.') 196 | parser.add_argument('config', help="Mapnik2 XML configuration file") 197 | parser.add_argument('tile_dir', help="Destination directory for rendered tiles") 198 | parser.add_argument('lat_1', type=float, help="Most nortern latitude") 199 | parser.add_argument('lon_1', type=float, help="Most western longitude") 200 | parser.add_argument('lat_2', type=float, help="Most southern latitude") 201 | parser.add_argument('lon_2', type=float, help="Most eastern longitude") 202 | parser.add_argument('min_zoom', help="Minimum zoom level to render", type=int, default=DEFAULT_MIN_ZOOM) 203 | parser.add_argument('max_zoom', help="Maximum zoom level to render", type=int, default=DEFAULT_MAX_ZOOM) 204 | parser.add_argument('process_count', help="Number of rendering processes to create", type=int, default=DEFAULT_PROCESS_COUNT) 205 | args = parser.parse_args() 206 | 207 | bbox = (args.lat_1, args.lon_1, args.lat_2, args.lon_2) 208 | 209 | render_tiles(bbox, args.config, args.tile_dir, args.min_zoom, args.max_zoom, args.process_count) 210 | -------------------------------------------------------------------------------- /maps/make_xml.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ~/src/tilemill/bin/node ~/src/tilemill/bin/carto transit.mml > transit.xml 4 | -------------------------------------------------------------------------------- /maps/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | createdb -T template_postgis transit 4 | 5 | echo "INSERT into spatial_ref_sys (srid, auth_name, auth_srid, proj4text, srtext) values ( 900913, 'spatialreference.org', 6, '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs', 'PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378137,0]],PRIMEM[\"Greenwich\",0] 6 | ,UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Mercator_2SP\"],PARAMETER[\"standard 7 | _parallel_1\",0],PARAMETER[\"central_meridian\",0],PARAMETER[\"false_easting\",0],PARAMETER 8 | [\"false_northing\",0],UNIT[\"Meter\",1],EXTENSION[\"PROJ4\",\"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs\"]]');" | psql -q transit 9 | 10 | wget http://downloads.cloudmade.com/americas/northern_america/united_states/texas/texas.osm.bz2 11 | bunzip2 texas.osm.bz2 12 | osm2pgsql --bbox -95.393,32.2307,-95.1933,32.4309 --database transit --create texas.osm 13 | 14 | ogr2ogr -f "PostgreSQL" PG:"dbname=transit" ../data/stops/bus_stops_data/bus_stops_data.shp -nln bus_stops -t_srs EPSG:900913 15 | 16 | ogr2ogr -f "PostgreSQL" PG:"dbname=transit" ../data/routes/bus_routes_4326/bus_routes_4326.shp -nln bus_routes -t_srs EPSG:900913 17 | 18 | echo "ALTER TABLE bus_routes RENAME COLUMN ROUTE TO line" | psql -q transit 19 | 20 | wget http://www.smithcountymapsite.org/webshare/downloads/railroads.zip 21 | unzip railroads.zip 22 | 23 | ogr2ogr -f "PostgreSQL" PG:"dbname=transit" Railroads.shp -nln railroads -t_srs EPSG:900913 24 | 25 | wget http://www.smithcountymapsite.org/webshare/downloads/parks.zip 26 | unzip parks.zip 27 | 28 | ogr2ogr -f "PostgreSQL" PG:"dbname=transit" Parks.shp -nln parks -t_srs EPSG:900913 -nlt multipolygon 29 | 30 | wget http://www.smithcountymapsite.org/webshare/downloads/structures.zip 31 | unzip structures.zip 32 | 33 | ogr2ogr -f "PostgreSQL" PG:"dbname=transit" Structures.shp -nln buildings -t_srs EPSG:900913 34 | -------------------------------------------------------------------------------- /maps/style.mss: -------------------------------------------------------------------------------- 1 | /*----------------------------------- 2 | Colors 3 | ------------------------------------- */ 4 | @greenery: #9FC069; 5 | @redline: #ffd4c6; 6 | @grey: #666; 7 | 8 | /*----------------------------------- 9 | Fonts 10 | ------------------------------------- */ 11 | @sans: "DejaVu Sans Condensed"; 12 | @sansitalic: "DejaVu Sans Condensed Italic"; 13 | @sansbold: "DejaVu Sans Bold"; 14 | 15 | Map { 16 | background-color: #fff; 17 | } 18 | 19 | #bus-stops { 20 | [line='Red'] { 21 | marker-fill: red; 22 | } 23 | [line='Blue'] { 24 | marker-fill: blue; 25 | } 26 | [line='Green'] { 27 | marker-fill: green; 28 | } 29 | [line='Yellow'] { 30 | marker-fill: yellow; 31 | } 32 | [order='100'], 33 | [order='200'], 34 | [order='300'], 35 | [order='400'], 36 | [order='500'], 37 | [order='600'], 38 | [order='700'], 39 | [order='800'],{ 40 | marker-fill: purple; 41 | } 42 | [order='END'] { 43 | marker-opacity: 0.0; 44 | } 45 | marker-line-color: black; 46 | marker-allow-overlap: true; 47 | } 48 | 49 | #bus-routes { 50 | [line='RED'] { 51 | line-color: red; 52 | marker-fill: red; 53 | marker-line-color: red; 54 | } 55 | [line='BLUE'] { 56 | line-color: blue; 57 | marker-fill: blue; 58 | marker-line-color: blue; 59 | } 60 | [line='GREEN'] { 61 | line-color: green; 62 | marker-fill: green; 63 | marker-line-color: green; 64 | } 65 | [line='YELLOW'] { 66 | line-color: yellow; 67 | marker-fill: yellow; 68 | marker-line-color: yellow; 69 | } 70 | line-width: 2.0; 71 | } 72 | 73 | #water { 74 | line-color: @water; 75 | line-opacity: .15; 76 | line-width: 1; 77 | } 78 | 79 | #tyler { 80 | line-width: 2.0; 81 | line-color: #000; 82 | } 83 | 84 | #road-labels { 85 | text-name:"''"; 86 | text-face-name: @sansbold; 87 | text-fill: @grey; 88 | text-placement: line; 89 | text-avoid-edges: true; 90 | text-size: 9; 91 | text-halo-radius: 1; 92 | [zoom>14] { text-name: "[name]"; } 93 | [highway='motorway'], 94 | [highway='primary'], 95 | [highway='secondary'] { 96 | [zoom >= 14] { text-name: "[name]"; } 97 | } 98 | } 99 | 100 | #roads-underlay { 101 | line-color: #cacaca; 102 | [zoom>9] { line-width: 0.2; } 103 | [zoom>12] { line-width: 0.5; } 104 | } 105 | 106 | #roads[highway='trunk'], 107 | #roads[highway='trunk_link'], 108 | #roads[highway='construction'], 109 | #roads[highway='service'], 110 | #roads[highway='unclassified'], 111 | #roads[highway='residential'] { 112 | [zoom>15] { 113 | line-width: 8; 114 | line-color: white; 115 | line-join: round; 116 | line-cap: round; 117 | } 118 | } 119 | #roads-underlay[highway='trunk'], 120 | #roads-underlay[highway='trunk_link'], 121 | #roads-underlay[highway='construction'], 122 | #roads-underlay[highway='service'], 123 | #roads-underlay[highway='unclassified'], 124 | #roads-underlay[highway='residential'] { 125 | [zoom>15] { 126 | line-join: round; 127 | line-cap: round; 128 | line-color: #cacaca; 129 | line-width: 10; 130 | } 131 | } 132 | 133 | #roads[highway='motorway'], 134 | #roads[highway='motorway_link'], 135 | #roads[highway='primary'], 136 | #roads[highway='primary_link'], 137 | #roads[highway='secondary'], 138 | #roads[highway='secondary_link'], 139 | #roads[highway='tertiary'], 140 | #roads[highway='tertiary_link'] { 141 | line-color: white; 142 | line-width: 0.25; 143 | line-join: round; 144 | line-cap: round; 145 | [zoom >= 13] { line-width: 0.5; } 146 | [zoom >= 14] { line-width: 3; } 147 | [zoom >= 15] { line-width: 5; } 148 | [zoom >= 17] { line-width: 9; } 149 | } 150 | 151 | #roads-underlay[highway='motorway'], 152 | #roads-underlay[highway='motorway_link'], 153 | #roads-underlay[highway='primary'], 154 | #roads-underlay[highway='primary_link'], 155 | #roads-underlay[highway='secondary'], 156 | #roads-underlay[highway='secondary_link'], 157 | #roads-underlay[highway='tertiary'], 158 | #roads-underlay[highway='tertiary_link'] { 159 | line-join: round; 160 | line-cap: round; 161 | line-color: #cacaca; 162 | line-width: 0.25; 163 | [zoom >= 13] { line-width: 1; } 164 | [zoom >= 14] { line-width: 4; } 165 | [zoom >= 15] { line-width: 7; } 166 | [zoom >= 17] { line-width: 11; } 167 | } 168 | 169 | #roads[highway='cycleway'], 170 | #roads[highway='footway'] { 171 | line-color: @grey; 172 | line-opacity: .15; 173 | line-width: 1; 174 | line-dasharray: 2,2; 175 | } 176 | 177 | #roads[highway='steps'] { 178 | line-color: @grey; 179 | line-opacity: 0.2; 180 | [zoom>17] { line-width: 20; line-dasharray: 2; } 181 | [zoom>18] { line-dasharray: 3; } 182 | [zoom>19] { line-dasharray: 4; } 183 | } 184 | 185 | #parks { 186 | polygon-fill: @greenery; 187 | polygon-opacity: .1; 188 | line-color: @greenery; 189 | line-opacity: .25; 190 | line-width: .5; 191 | } 192 | 193 | #buildings { 194 | building-fill: #f8f8f8; 195 | building-height: 3; 196 | } 197 | 198 | #railroads { 199 | line-color: @redline; 200 | line-width: 0.6; 201 | [zoom>12] { line-width: 0.8; } 202 | [zoom >= 17] { line-width: 9; } 203 | } 204 | -------------------------------------------------------------------------------- /maps/transit.mml: -------------------------------------------------------------------------------- 1 | { 2 | "_center": { 3 | "lat": 32.34132305892808, 4 | "lon": -95.31781733035922, 5 | "zoom": 14 6 | }, 7 | "_format": "png", 8 | "_interactivity": false, 9 | "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over", 10 | "Stylesheet": [ 11 | "style.mss" 12 | ], 13 | "Layer": [ 14 | { 15 | "Datasource": { 16 | "host": "", 17 | "port": "", 18 | "user": "", 19 | "password": "", 20 | "dbname": "transit", 21 | "table": "parks", 22 | "geometry_field": "", 23 | "extent": "", 24 | "type": "postgis" 25 | }, 26 | "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over", 27 | "id": "parks", 28 | "name": "parks", 29 | "class": "", 30 | "geometry": "unknown" 31 | }, 32 | { 33 | "Datasource": { 34 | "host": "", 35 | "port": "", 36 | "user": "", 37 | "password": "", 38 | "dbname": "transit", 39 | "table": "buildings", 40 | "geometry_field": "", 41 | "extent": "", 42 | "type": "postgis" 43 | }, 44 | "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over", 45 | "id": "buildings", 46 | "name": "buildings", 47 | "class": "", 48 | "geometry": "polygon" 49 | }, 50 | { 51 | "Datasource": { 52 | "host": "", 53 | "port": "", 54 | "user": "", 55 | "password": "", 56 | "dbname": "transit", 57 | "table": "planet_osm_line", 58 | "geometry_field": "", 59 | "extent": "", 60 | "type": "postgis" 61 | }, 62 | "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over", 63 | "id": "roads-underlay", 64 | "name": "roads-underlay", 65 | "class": "", 66 | "geometry": "linestring" 67 | }, 68 | { 69 | "Datasource": { 70 | "host": "", 71 | "port": "", 72 | "user": "", 73 | "password": "", 74 | "dbname": "transit", 75 | "table": "planet_osm_line", 76 | "geometry_field": "", 77 | "extent": "", 78 | "type": "postgis" 79 | }, 80 | "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over", 81 | "id": "roads", 82 | "name": "roads", 83 | "class": "", 84 | "geometry": "linestring" 85 | }, 86 | { 87 | "Datasource": { 88 | "host": "", 89 | "port": "", 90 | "user": "", 91 | "password": "", 92 | "dbname": "transit", 93 | "table": "railroads", 94 | "geometry_field": "", 95 | "extent": "", 96 | "type": "postgis" 97 | }, 98 | "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over", 99 | "id": "railroads", 100 | "name": "railroads", 101 | "class": "", 102 | "geometry": "linestring" 103 | }, 104 | { 105 | "Datasource": { 106 | "host": "", 107 | "port": "", 108 | "user": "", 109 | "password": "", 110 | "dbname": "transit", 111 | "table": "bus_routes", 112 | "geometry_field": "", 113 | "extent": "", 114 | "type": "postgis" 115 | }, 116 | "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over", 117 | "id": "bus-routes", 118 | "name": "bus-routes", 119 | "class": "", 120 | "geometry": "linestring" 121 | }, 122 | { 123 | "Datasource": { 124 | "host": "", 125 | "port": "", 126 | "user": "", 127 | "password": "", 128 | "dbname": "transit", 129 | "table": "bus_stops", 130 | "geometry_field": "", 131 | "extent": "", 132 | "type": "postgis" 133 | }, 134 | "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over", 135 | "id": "bus-stops", 136 | "name": "bus-stops", 137 | "class": "", 138 | "geometry": "point" 139 | }, 140 | { 141 | "Datasource": { 142 | "host": "", 143 | "port": "", 144 | "user": "", 145 | "password": "", 146 | "dbname": "transit", 147 | "table": "planet_osm_line", 148 | "geometry_field": "", 149 | "extent": "", 150 | "type": "postgis" 151 | }, 152 | "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over", 153 | "id": "road-labels", 154 | "name": "road-labels", 155 | "class": "", 156 | "geometry": "linestring" 157 | } 158 | ] 159 | } 160 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | GDAL==1.7.1 2 | fabric==1.0.1 3 | lxml==2.3 4 | -------------------------------------------------------------------------------- /s3exclude: -------------------------------------------------------------------------------- 1 | .git 2 | -------------------------------------------------------------------------------- /update_data.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Run the entire process to update the stop data 4 | cd data/stops 5 | ./compute_estimated_schedule.py 6 | ./make_json.py 7 | ./make_shapefile.py 8 | 9 | ogr2ogr -f "PostgreSQL" PG:"dbname=transit" bus_stops_data/bus_stops_data.shp -nln bus_stops -t_srs EPSG:900913 -overwrite 10 | 11 | cd ../../maps 12 | ./make_xml.sh 13 | ./make_maps.py 14 | -------------------------------------------------------------------------------- /update_phonegap.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Clone phonegap repo to temp directory 4 | rm -rf /tmp/phonegap_repo 5 | git clone git@git.phonegap.com:onyxfish/13467_hacktylertransit.git /tmp/phonegap_repo 6 | 7 | # Iterate version 8 | ./update_phonegap_version.py 9 | 10 | # Copy over updated files 11 | cp -r app/phonegap/* /tmp/phonegap_repo 12 | cp -r app/web/* /tmp/phonegap_repo 13 | 14 | # Write phonegap script tag onto page 15 | ./add_phonegap_script_tag.py /tmp/phonegap_repo/index.html 16 | 17 | # Copy correct config file into repo 18 | cp app/config-${DEPLOYMENT_TARGET}.js /tmp/phonegap_repo/js/config.js 19 | 20 | # Commit and push changes 21 | cd /tmp/phonegap_repo && git add . && git commit -am "deploying" && git push origin master 22 | -------------------------------------------------------------------------------- /update_phonegap_version.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from lxml.etree import parse 4 | 5 | doc = parse(open("app/phonegap/config.xml", 'r')) 6 | 7 | version_parts = map(int,doc.getroot().attrib['version'].split(".")) 8 | version_parts[-1] += 1 9 | 10 | doc.getroot().attrib['version'] = ".".join(map(str, version_parts)) 11 | doc.write("app/phonegap/config.xml", encoding="utf-8", xml_declaration=True) 12 | 13 | --------------------------------------------------------------------------------