diff --git a/README.md b/README.md index 870a61f..f1f9165 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,27 @@ BUCKET_PRIVATE='chn-ghost-buses-private' ``` Note that there may be permissions issues when running `rt_daily_aggregations.py` with `BUCKET_PUBLIC` as the `BUCKET_NAME`. +You may also need to set the PROJECT_NAME environment variable: + +``` +PROJECT_NAME=chn-ghost-buses +``` + +## Updating data + +The `update_data` script reads realtime and schedule data, combines it, and produces output files used by the frontend. The common use case will be to process data that has arrived since the previous frontend data deploy. To do this, check out the `ghost-buses-frontend` repository alongside this backend repository. Then run the following: + +`python3 -m update_data --update ../ghost-buses-frontend/src/Routes/schedule_vs_realtime_all_day_types_routes.json` + +To calculate all data from the start of the project, run the script with no arguments: + +`python3 -m update_data` + +In either case, output files will be written under the `data_output/scratch` directory with names indicating the date ranges that they cover. You can then deploy by copying the following output files: + +- `schedule_vs_realtime_all_day_types_overall__to_.json` to `ghost-buses-frontend/src/Routes/schedule_vs_realtime_all_day_types_routes.json` +- `frontend_data__to__wk.json` to `ghost-buses-frontend/src/Routes/data.json` + ## Pre-commit hooks Pre-commit hooks are defined in `.pre-commit-config.yaml`, based on this [post](https://towardsdatascience.com/pre-commit-hooks-you-must-know-ff247f5feb7e). The hooks will enforce style with the linter `black`, check for commited credentials and extraneous debugger breakpoints, and sort imports, among other things. diff --git a/data_analysis/common.py b/data_analysis/common.py new file mode 100644 index 0000000..fb725a0 --- /dev/null +++ b/data_analysis/common.py @@ -0,0 +1,51 @@ +""" +Utility functions common to both schedule and realtime analysis. +""" +from dataclasses import dataclass, field +from typing import List, Tuple + +import pandas as pd + + +@dataclass +class AggInfo: + """A class for storing information about + aggregation of route and schedule data + + Args: + freq (str, optional): An offset alias described in the Pandas + time series docs. Defaults to None. + https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases + aggvar (str, optional): variable to aggregate by. + Defaults to trip_count + byvars (List[str], optional): variables to passed to + pd.DataFrame.groupby. Defaults to ['date', 'route_id']. + """ + freq: str = 'D' + aggvar: str = 'trip_count' + byvars: List[str] = field(default_factory=lambda: ['date', 'route_id']) + + +def sum_by_frequency( + df: pd.DataFrame, + agg_info: AggInfo) -> pd.DataFrame: + """Calculate total trips per route per frequency + + Args: + df (pd.DataFrame): A DataFrame of route or scheduled route data + agg_info (AggInfo): An AggInfo object describing how data + is to be aggregated. + + Returns: + pd.DataFrame: A DataFrame with the total number of trips per route + by a specified frequency. + """ + df = df.copy() + out = ( + df.set_index(agg_info.byvars) + .groupby( + [pd.Grouper(level='date', freq=agg_info.freq), + pd.Grouper(level='route_id')])[agg_info.aggvar] + .sum().reset_index() + ) + return out diff --git a/data_analysis/compare_scheduled_and_rt.py b/data_analysis/compare_scheduled_and_rt.py index 509fe38..34dcc32 100644 --- a/data_analysis/compare_scheduled_and_rt.py +++ b/data_analysis/compare_scheduled_and_rt.py @@ -1,20 +1,21 @@ import os -from dataclasses import dataclass, field from typing import List, Tuple +import datetime import logging -# required for pandas to read csv from aws -import s3fs from s3path import S3Path import pandas as pd import pendulum from tqdm import tqdm from dotenv import load_dotenv -import data_analysis.static_gtfs_analysis as static_gtfs_analysis -from scrape_data.scrape_schedule_versions import create_schedule_list -from utils import s3_csv_reader +from data_analysis.common import AggInfo, sum_by_frequency +from data_analysis.cache_manager import CacheManager +from data_analysis.gtfs_fetcher import GTFSFetcher +from data_analysis.realtime_analysis import RealtimeProvider +from data_analysis.schedule_manager import ScheduleIndexer +from data_analysis.static_gtfs_analysis import ScheduleSummarizer load_dotenv() @@ -26,85 +27,26 @@ datefmt='%m/%d/%Y %I:%M:%S %p' ) -BASE_PATH = S3Path(f"/{BUCKET_PUBLIC}") +S3_BASE_PATH = S3Path(f"/{BUCKET_PUBLIC}") -SCHEDULE_RT_PATH = BASE_PATH / "schedule_rt_comparisons" / "route_level" -SCHEDULE_SUMMARY_PATH = BASE_PATH / "schedule_summaries" / "route_level" +SCHEDULE_RT_PATH = S3_BASE_PATH / "schedule_rt_comparisons" / "route_level" +SCHEDULE_SUMMARY_PATH = S3_BASE_PATH / "schedule_summaries" / "route_level" -@dataclass -class AggInfo: - """A class for storing information about - aggregation of route and schedule data - - Args: - freq (str, optional): An offset alias described in the Pandas - time series docs. Defaults to None. - https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases - aggvar (str, optional): variable to aggregate by. - Defaults to trip_count - byvars (List[str], optional): variables to passed to - pd.DataFrame.groupby. Defaults to ['date', 'route_id']. - """ - freq: str = 'D' - aggvar: str = 'trip_count' - byvars: List[str] = field(default_factory=lambda: ['date', 'route_id']) - - -def make_daily_summary(df: pd.DataFrame) -> pd.DataFrame: - """Make a summary of trips that actually happened. The result will be - used as base data for further aggregations. - - Args: - df (pd.DataFrame): A DataFrame read from bus_full_day_data_v2/{date}. - - Returns: - pd.DataFrame: A summary of full day data by - date, route, and destination. - """ - df = df.copy() - df = ( - df.groupby(["data_date", "rt"]) - .agg({"vid": set, "tatripid": set, "tablockid": set}) - .reset_index() - ) - df["vh_count"] = df["vid"].apply(len) - df["trip_count"] = df["tatripid"].apply(len) - df["block_count"] = df["tablockid"].apply(len) - return df - - -def sum_by_frequency( - df: pd.DataFrame, - agg_info: AggInfo) -> pd.DataFrame: - """Calculate total trips per route per frequency - - Args: - df (pd.DataFrame): A DataFrame of route or scheduled route data - agg_info (AggInfo): An AggInfo object describing how data - is to be aggregated. - - Returns: - pd.DataFrame: A DataFrame with the total number of trips per route - by a specified frequency. - """ - df = df.copy() - return ( - df.set_index(agg_info.byvars) - .groupby( - [pd.Grouper(level='date', freq=agg_info.freq), - pd.Grouper(level='route_id')])[agg_info.aggvar] - .sum().reset_index() +def calc_sched_freq_by_rte(sched_df: pd.DataFrame, agg_info: AggInfo) -> pd.DataFrame: + sched_df = sched_df.copy() + sched_freq_by_rte = sum_by_frequency( + sched_df, + agg_info=agg_info ) - + return sched_freq_by_rte def sum_trips_by_rt_by_freq( - rt_df: pd.DataFrame, - sched_df: pd.DataFrame, - agg_info: AggInfo, - holidays: List[str] = ["2022-05-30", "2022-07-04", "2022-09-05", "2022-11-24", "2022-12-25"]) -> Tuple[pd.DataFrame, pd.DataFrame]: - """Calculate ratio of trips to scheduled trips per route - per specified frequency. + rt_freq_by_rte: pd.DataFrame, + sched_freq_by_rte: pd.DataFrame, + holidays: List[str]) -> pd.DataFrame: + """Combine and aggregate realtime and schedule data to allow comparison of + scheduled and actual trips. Args: rt_df (pd.DataFrame): A DataFrame of daily route data @@ -116,24 +58,8 @@ def sum_trips_by_rt_by_freq( Returns: pd.DataFrame: DataFrame a row per day per route with the number of scheduled and observed trips. - pd.DataFrame: DataFrame with the total number of trips per route - by specified frequency and the ratio of actual trips to - scheduled trips. """ - rt_df = rt_df.copy() - sched_df = sched_df.copy() - - rt_freq_by_rte = sum_by_frequency( - rt_df, - agg_info=agg_info - ) - - sched_freq_by_rte = sum_by_frequency( - sched_df, - agg_info=agg_info - ) - compare_freq_by_rte = rt_freq_by_rte.merge( sched_freq_by_rte, how="inner", @@ -156,8 +82,22 @@ def sum_trips_by_rt_by_freq( holidays), "day_type" ] = "hol" + return compare_freq_by_rte + +def calculate_trip_ratio(freq_by_rte: pd.DataFrame) -> pd.DataFrame: + """Calculate ratio of trips to scheduled trips per route + per specified frequency. + + Args: + freq_by_rte (pd.DataFrame): a row per day per route with the number of scheduled and observed trips. + + Returns: + pd.DataFrame: DataFrame with the total number of trips per route + by specified frequency and the ratio of actual trips to + scheduled trips. + """ compare_by_day_type = ( - compare_freq_by_rte.groupby(["route_id", "day_type"])[ + freq_by_rte.groupby(["route_id", "day_type"])[ ["trip_count_rt", "trip_count_sched"] ] .sum() @@ -168,93 +108,55 @@ def sum_trips_by_rt_by_freq( compare_by_day_type["trip_count_rt"] / compare_by_day_type["trip_count_sched"] ) - - return compare_freq_by_rte, compare_by_day_type - + return compare_by_day_type # Read in pre-computed files of RT and scheduled data and compare! -def combine_real_time_rt_comparison( - schedule_feeds: List[dict], - schedule_data_list: List[dict], - agg_info: AggInfo, - holidays: List[str] = ["2022-05-31", "2022-07-04", "2022-09-05", "2022-11-24", "2022-12-25"], - save: bool = True) -> Tuple[pd.DataFrame, pd.DataFrame]: - """Generate a combined DataFrame with the realtime route comparisons +class Combiner: + """Class to generate a combined DataFrame with the realtime route comparisons Args: - schedule_feeds (List[dict]): A list of dictionaries with the keys - "schedule_version", "feed_start_date", and "feed_end_date" - schedule_data_list (List[dict]): A list of dictionaries with a - "schedule_version" key and "data" key with a value corresponding to - the daily route summary for that version. + cache_manager (CacheManager): instance of class that retrieves downloaded files from the cache + schedule_summarizer (ScheduleSummarizer): instance of class with schedule information. agg_info (AggInfo): An AggInfo object describing how data is to be aggregated. - holidays (List[str], optional): List of holidays in analyzed period in YYYY-MM-DD format. + holidays (List[str]): List of holidays in analyzed period in YYYY-MM-DD format. Defaults to ["2022-05-31", "2022-07-04", "2022-09-05", "2022-11-24", "2022-12-25"]. - save (bool, optional): whether to save the csv file to s3 bucket. - - Returns: - pd.DataFrame: Combined DataFrame of various schedule versions - with daily counts of observed and scheduled trip count by route. - pd.DataFrame: Combined DataFrame of various schedule versions - with totals per route by a specified frequency. + save_to_s3 (bool, optional): whether to save the csv file to s3 bucket. """ - combined_grouped = pd.DataFrame() - combined_long = pd.DataFrame() - pbar = tqdm(schedule_feeds) - for feed in pbar: - start_date = feed["feed_start_date"] - end_date = feed["feed_end_date"] - date_range = [ - d - for d in pendulum.period( - pendulum.from_format(start_date, "YYYY-MM-DD"), - pendulum.from_format(end_date, "YYYY-MM-DD"), - ).range("days") - ] - pbar.set_description( - f"Loading schedule version {feed['schedule_version']}" - ) - - schedule_raw = ( - next( - data_dict["data"] for data_dict in schedule_data_list - if feed["schedule_version"] == data_dict["schedule_version"] - ) - ) - - rt_raw = pd.DataFrame() - date_pbar = tqdm(date_range) - for day in date_pbar: - date_str = day.to_date_string() - pbar.set_description( - f" Processing {date_str} at " - f"{pendulum.now().to_datetime_string()}" - ) - - daily_data = s3_csv_reader.read_csv(BASE_PATH / f"bus_full_day_data_v2/{date_str}.csv") - daily_data = make_daily_summary(daily_data) - - rt_raw = pd.concat([rt_raw, daily_data]) - - # basic reformatting - rt = rt_raw.copy() - schedule = schedule_raw.copy() - rt["date"] = pd.to_datetime(rt.data_date, format="%Y-%m-%d") - rt["route_id"] = rt["rt"] + def __init__(self, + cache_manager: CacheManager, + schedule_summarizer: ScheduleSummarizer, + agg_info: AggInfo, + holidays: List[str], + save_to_s3=False): + self.cache_manager = cache_manager + self.schedule_summarizer = schedule_summarizer + self.rt_provider = RealtimeProvider(schedule_summarizer, agg_info) + self.holidays = holidays + self.agg_info = agg_info + self.save_to_s3 = save_to_s3 + + def combine(self): + feed = self.schedule_summarizer.schedule_feed_info + + schedule = self.schedule_summarizer.get_route_daily_summary() + if schedule.empty: + return pd.DataFrame() schedule["date"] = pd.to_datetime(schedule.date, format="%Y-%m-%d") - compare_freq_by_rte, compare_by_day_type = sum_trips_by_rt_by_freq( - rt_df=rt, - sched_df=schedule, - agg_info=agg_info, - holidays=holidays + sched_freq_by_rte = calc_sched_freq_by_rte(schedule, agg_info=self.agg_info) + rt_freq_by_rte = self.rt_provider.provide() + + compare_freq_by_rte = sum_trips_by_rt_by_freq( + rt_freq_by_rte=rt_freq_by_rte, + sched_freq_by_rte=sched_freq_by_rte, + holidays=self.holidays ) - compare_by_day_type['feed_version'] = feed['schedule_version'] compare_freq_by_rte['feed_version'] = feed['schedule_version'] - if save: + if self.save_to_s3: + compare_by_day_type = calculate_trip_ratio(compare_freq_by_rte) outpath = ( (SCHEDULE_RT_PATH / f'schedule_v{feed["schedule_version"]}_' @@ -265,107 +167,133 @@ def combine_real_time_rt_comparison( outpath, index=False, ) - logger.info(f" Processing version {feed['schedule_version']}") - combined_grouped = pd.concat([combined_grouped, compare_by_day_type]) - combined_long = pd.concat([combined_long, compare_freq_by_rte]) - - return combined_long, combined_grouped - - -def build_summary( - combined_df: pd.DataFrame, - save: bool = True) -> pd.DataFrame: - """Create a summary by route and day type - - Args: - combined_df (pd.DataFrame): A DataFrame with all schedule versions - save (bool, optional): whether to save DataFrame to s3. - Defaults to True. - - Returns: - pd.DataFrame: A DataFrame summary across - versioned schedule comparisons. - """ - combined_df = combined_df.copy(deep=True) - summary = ( - combined_df.groupby(["route_id", "day_type"])[ - ["trip_count_rt", "trip_count_sched"] - ] - .sum() - .reset_index() - ) - - summary["ratio"] = summary["trip_count_rt"] / summary["trip_count_sched"] - - if save: - outpath = ( - (SCHEDULE_RT_PATH / - f"combined_schedule_realtime_rt_level_comparison_" - f"{pendulum.now()}.csv").as_uri() - ) - summary.to_csv( - outpath, - index=False, + return compare_freq_by_rte + + +class RouteSummarizer: + def __init__(self, + cache_manager: CacheManager, + freq: str = 'D', + save_to_s3: bool = False, + start_date: datetime.datetime = None, + end_date: datetime.datetime = None): + """Calculate the summary by route and day across multiple schedule versions + + Args: + cache_manager (CacheManager): instance of class that retrieves downloaded files from the cache + freq (str): Frequency of aggregation. Defaults to Daily. + save_to_s3 (bool, optional): whether to save DataFrame to s3. + Defaults to True. + start_date (datetime, optional): if set, first date to analyze. + end_date (datetime, optional): if set, last date to analyze. + """ + self.freq = freq + self.save_to_s3 = save_to_s3 + self.start_date = None + self.end_date = None + month = 5 + year = 2022 + if start_date: + self.start_date = start_date.date() + month = self.start_date.month + year = self.start_date.year + if end_date: + self.end_date = end_date.date() + self.cache_manager = cache_manager + self.schedules = ScheduleIndexer(self.cache_manager, month, year).get_schedules() + self.agg_info = AggInfo(freq=self.freq) + self.holidays: List[str] = ["2022-05-31", "2022-07-04", "2022-09-05", "2022-11-24", "2022-12-25"] + + def build_summary(self, combined_df: pd.DataFrame) -> pd.DataFrame: + """Create a summary by route and day type + + Args: + combined_df (pd.DataFrame): A DataFrame with all schedule versions + + Returns: + pd.DataFrame: A DataFrame summary across + versioned schedule comparisons. + """ + combined_df = combined_df.copy(deep=True) + summary = ( + combined_df.groupby(["route_id", "day_type"])[ + ["trip_count_rt", "trip_count_sched"] + ] + .sum() + .reset_index() ) - return summary - -def main(freq: str = 'D') -> Tuple[List[dict],pd.DataFrame, pd.DataFrame]: - """Calculate the summary by route and day across multiple schedule versions - - Args: - freq (str): Frequency of aggregation. Defaults to Daily. - Returns: - pd.DataFrame: A DataFrame of every day in the specified data with - scheduled and observed count of trips. - pd.DataFrame: A DataFrame summary across - versioned schedule comparisons. - """ - schedule_feeds = create_schedule_list(month=5, year=2022) - - schedule_data_list = [] - pbar = tqdm(schedule_feeds) - for feed in pbar: - schedule_version = feed["schedule_version"] - pbar.set_description( - f"Generating daily schedule data for " - f"schedule version {schedule_version}" - ) - logger.info( - f"\nDownloading zip file for schedule version " - f"{schedule_version}" - ) - CTA_GTFS = static_gtfs_analysis.download_zip(schedule_version) - logger.info("\nExtracting data") - data = static_gtfs_analysis.GTFSFeed.extract_data( - CTA_GTFS, - version_id=schedule_version, - cta_download=False - ) - data = static_gtfs_analysis.format_dates_hours(data) - - logger.info("\nSummarizing trip data") - trip_summary = static_gtfs_analysis.make_trip_summary(data, - pendulum.from_format(feed['feed_start_date'], 'YYYY-MM-DD'), - pendulum.from_format(feed['feed_end_date'], 'YYYY-MM-DD')) - - route_daily_summary = ( - static_gtfs_analysis - .summarize_date_rt(trip_summary) - ) - - schedule_data_list.append( - {"schedule_version": schedule_version, - "data": route_daily_summary} - ) - agg_info = AggInfo(freq=freq) - combined_long, combined_grouped = combine_real_time_rt_comparison( - schedule_feeds, - schedule_data_list=schedule_data_list, - agg_info=agg_info, - save=False) - return combined_long, build_summary(combined_grouped, save=False) + summary["ratio"] = summary["trip_count_rt"] / summary["trip_count_sched"] + if self.save_to_s3: + outpath = ( + (SCHEDULE_RT_PATH / + f"combined_schedule_realtime_rt_level_comparison_" + f"{pendulum.now()}.csv").as_uri() + ) + summary.to_csv( + outpath, + index=False, + ) + return summary + + def main(self, existing=None) -> Tuple[pd.DataFrame, pd.DataFrame]: + """Calculate the summary by route and day across multiple schedule versions + + Returns: + pd.DataFrame: A DataFrame of every day in the specified data with + scheduled and observed count of trips. + pd.DataFrame: A DataFrame summary across + versioned schedule comparisons. + """ + agg_info = AggInfo(freq=self.freq) + if existing is not None: + combined_long = existing + else: + combined_long = pd.DataFrame() + if self.start_date is not None: + logger.info(f'Starting from date {self.start_date}') + if self.end_date is not None: + logger.info(f'Filtering to {self.end_date}') + gtfs_fetcher = GTFSFetcher(self.cache_manager) + + logging.info(f'Processing {len(self.schedules)} schedules.') + for schedule in self.schedules: + feed = ScheduleSummarizer(self.cache_manager, gtfs_fetcher, schedule) + new_start_date = None + new_end_date = None + if self.start_date is not None: + if feed.end_date().date() < self.start_date: + logger.debug(f'Skipping out-of-range feed {feed.schedule_feed_info}') + continue + if self.start_date > feed.start_date().date(): + new_start_date = self.start_date + if self.end_date is not None: + if feed.start_date().date() > self.end_date: + logger.debug(f'Skipping out-of-range feed {feed.schedule_feed_info}') + continue + if self.end_date < feed.end_date().date(): + new_end_date = self.end_date + if new_start_date: + logger.debug(f'Using start date {new_start_date}') + if new_end_date: + logger.debug(f'Using end date {new_end_date}') + combiner = Combiner(self.cache_manager, feed, agg_info, self.holidays, self.save_to_s3) + this_iter = combiner.combine() + if this_iter.empty: + continue + if new_start_date: + this_iter = this_iter[this_iter.date >= new_start_date.strftime('%Y%m%d')] + if new_end_date: + this_iter = this_iter[this_iter.date <= new_end_date.strftime('%Y%m%d')] + combined_long = pd.concat([combined_long, this_iter]) + combined_grouped = calculate_trip_ratio(combined_long) + return combined_long, self.build_summary(combined_grouped) + + +def main(cache_manager: CacheManager, freq: str = 'D', save_to_s3: bool = False, start_date = None, end_date = None, existing=None): + summarizer = RouteSummarizer(cache_manager, freq, save_to_s3, start_date, end_date) + return summarizer.main(existing) if __name__ == "__main__": - main() + main(CacheManager()) diff --git a/data_analysis/gtfs_fetcher.py b/data_analysis/gtfs_fetcher.py new file mode 100644 index 0000000..f651d9f --- /dev/null +++ b/data_analysis/gtfs_fetcher.py @@ -0,0 +1,119 @@ +from __future__ import annotations + +import os +from enum import Enum +from dataclasses import dataclass + +# required for pandas to read csv from aws +import boto3 +from botocore import UNSIGNED +from botocore.client import Config +import pendulum + +from data_analysis.cache_manager import CacheManager + +BUCKET_PUBLIC = os.getenv('BUCKET_PUBLIC', 'chn-ghost-buses-public') + +# Enable reading from public buckets without setting up credentials +# https://stackoverflow.com/questions/34865927/can-i-use-boto3-anonymously +s3 = boto3.client('s3', config=Config(signature_version=UNSIGNED)) + + +class ScheduleSource(Enum): + TRANSITFEEDS = 1 + S3 = 2 + + +@dataclass +class ScheduleFeedInfo: + """Represents a single schedule version with feed start and end dates. + """ + schedule_version: str + feed_start_date: str + feed_end_date: str + schedule_source: ScheduleSource + + def __str__(self): + if self.schedule_source == ScheduleSource.TRANSITFEEDS: + label = '' + else: + label = '_cta' + return f'v_{self.schedule_version}_fs_{self.feed_start_date}_fe_{self.feed_end_date}{label}' + + def __getitem__(self, item): + if item not in frozenset(['schedule_version', 'feed_start_date', 'feed_end_date']): + raise KeyError(item) + return self.__dict__[item] + + @classmethod + def from_pendulum(cls, version, start_date, end_date, schedule_source: ScheduleSource): + return cls(version.format("YYYYMMDD"), + start_date.format("YYYY-MM-DD"), + end_date.format("YYYY-MM-DD"), + schedule_source) + + @classmethod + def from_dict(cls, d): + return cls(d['schedule_version'], + d['feed_start_date'], + d['feed_end_date'], + ScheduleSource.TRANSITFEEDS) + + def interval(self): + start = pendulum.parse(self.feed_start_date) + end = pendulum.parse(self.feed_end_date) + return pendulum.interval(start, end) + + def contains(self, date_str: str) -> bool: + d = pendulum.parse(date_str) + return d in self.interval() + + +class GTFSFetcher: + def __init__(self, cache_manager: CacheManager): + self.cache_manager = cache_manager + files = s3.list_objects_v2(Bucket=BUCKET_PUBLIC, Prefix='cta_schedule_zipfiles_raw/') + self.unique_files = {} + self.versions = {} + for fc in files['Contents']: + key = fc['ETag'] + filename = fc['Key'].split('/')[1] + if not filename.startswith('google_transit_'): + continue + size = fc['Size'] + version = filename.removeprefix('google_transit_').removesuffix('.zip').replace('-', '') + self.unique_files.setdefault(key, []).append((filename, size, fc['Key'], version)) + for v in self.unique_files.values(): + v.sort() + tup = v[0] + self.versions[tup[-1]] = tup + + def list(self): + tups = [] + for v in self.unique_files.values(): + tups.append(v[0]) + tups.sort() + return tups + + def get_versions(self): + return list(sorted(self.versions.keys())) + + def retrieve_file(self, schedule_feed_info: ScheduleFeedInfo): + version_id = schedule_feed_info.schedule_version + if schedule_feed_info.schedule_source == ScheduleSource.S3: + local_filename, _, s3_filename, _ = self.versions[version_id] + url = f'https://{BUCKET_PUBLIC}.s3.us-east-2.amazonaws.com/{s3_filename}' + return self.cache_manager.retrieve('cta_zipfiles', local_filename, url) + elif schedule_feed_info.schedule_source == ScheduleSource.TRANSITFEEDS: + url = f"https://transitfeeds.com/p/chicago-transit-authority/165/{version_id}/download" + return self.cache_manager.retrieve("downloads", f"{version_id}.zip", url) + else: + return None + + +# Prints cached downloaded schedules for local debugging purposes. Run from project root: +# python -m data_analysis.gtfs_fetcher +if __name__ == "__main__": + fetcher = GTFSFetcher(CacheManager()) + for filename, size, fullkey, version in fetcher.list(): + print(f'{version} {filename:30} {size:10} {fullkey}') diff --git a/data_analysis/plots.py b/data_analysis/plots.py index c1704c3..f2a26a5 100644 --- a/data_analysis/plots.py +++ b/data_analysis/plots.py @@ -23,6 +23,7 @@ import data_analysis.compare_scheduled_and_rt as compare_scheduled_and_rt import data_analysis.static_gtfs_analysis as static_gtfs_analysis +from data_analysis.cache_manager import CacheManager CHICAGO_COORDINATES = (41.85, -87.68) @@ -33,6 +34,7 @@ project_dir = next(p for p in current_dir.parents if p.name == f"{project_name}") PLOTS_PATH = project_dir / "plots" / "scratch" DATA_PATH = project_dir / "data_output" / "scratch" +ASSETS_PATH = project_dir / "data_output" logger = logging.getLogger() logging.basicConfig(level=logging.INFO) @@ -356,10 +358,14 @@ def fetch_ridership_data() -> pd.DataFrame: available date. """ logger.info("Fetching ridership data") + fm = CacheManager() ridership_by_rte_date = pd.read_csv( - "https://data.cityofchicago.org/api/views/" - "jyb9-n7fm/rows.csv?accessType=DOWNLOAD" + fm.retrieve( + "ridership", + "ridership.csv", + "https://data.cityofchicago.org/api/views/jyb9-n7fm/rows.csv?accessType=DOWNLOAD" + ) ) ridership_by_rte_date.loc[:, "date"] = pd.to_datetime( diff --git a/data_analysis/realtime_analysis.py b/data_analysis/realtime_analysis.py new file mode 100644 index 0000000..e773842 --- /dev/null +++ b/data_analysis/realtime_analysis.py @@ -0,0 +1,88 @@ +import os + +from s3path import S3Path +import pandas as pd +import pendulum +from tqdm import tqdm + +from utils import s3_csv_reader +from data_analysis.common import sum_by_frequency + +BUCKET_PUBLIC = os.getenv('BUCKET_PUBLIC', 'chn-ghost-buses-public') +BASE_PATH = S3Path(f"/{BUCKET_PUBLIC}") + +SCHEDULE_RT_PATH = BASE_PATH / "schedule_rt_comparisons" / "route_level" +SCHEDULE_SUMMARY_PATH = BASE_PATH / "schedule_summaries" / "route_level" + + + +class RealtimeProvider: + def __init__(self, feed, agg_info): + self.feed = feed + self.agg_info = agg_info + + @staticmethod + def make_daily_summary(df: pd.DataFrame) -> pd.DataFrame: + """Make a summary of trips that actually happened. The result will be + used as base data for further aggregations. + + Args: + df (pd.DataFrame): A DataFrame read from bus_full_day_data_v2/{date}. + + Returns: + pd.DataFrame: A summary of full day data by + date, route, and destination. + """ + df = df.copy() + df = ( + df.groupby(["data_date", "rt"]) + .agg({"vid": set, "tatripid": set, "tablockid": set}) + .reset_index() + ) + df["vh_count"] = df["vid"].apply(len) + df["trip_count"] = df["tatripid"].apply(len) + df["block_count"] = df["tablockid"].apply(len) + return df + + def rt_summarize(self, rt_df: pd.DataFrame) -> pd.DataFrame: + rt_df = rt_df.copy() + rt_freq_by_rte = sum_by_frequency(rt_df, self.agg_info) + return rt_freq_by_rte + + def provide(self): + feed = self.feed.schedule_feed_info + start_date = feed["feed_start_date"] + end_date = feed["feed_end_date"] + date_range = [ + d + for d in pendulum.period( + pendulum.from_format(start_date, "YYYY-MM-DD"), + pendulum.from_format(end_date, "YYYY-MM-DD"), + ).range("days") + ] + + rt_raw = pd.DataFrame() + date_pbar = tqdm(date_range) + date_pbar.set_description('Realtime analysis') + for day in date_pbar: + date_str = day.to_date_string() + date_pbar.set_description( + f" Processing {date_str} at " + f"{pendulum.now().to_datetime_string()}" + ) + + # realtime bus position data + daily_data = s3_csv_reader.read_csv(BASE_PATH / f"bus_full_day_data_v2/{date_str}.csv") + daily_data = self.make_daily_summary(daily_data) + + rt_raw = pd.concat([rt_raw, daily_data]) + if rt_raw.empty: + return pd.DataFrame(), pd.DataFrame() + + # basic reformatting + rt = rt_raw.copy() + rt["date"] = pd.to_datetime(rt.data_date, format="%Y-%m-%d") + rt["route_id"] = rt["rt"] + + rt_freq_by_rte = self.rt_summarize(rt) + return rt_freq_by_rte \ No newline at end of file diff --git a/data_analysis/schedule_manager.py b/data_analysis/schedule_manager.py new file mode 100644 index 0000000..4b235bc --- /dev/null +++ b/data_analysis/schedule_manager.py @@ -0,0 +1,123 @@ +from __future__ import annotations +from dataclasses import dataclass +import zipfile +from tqdm import tqdm +from typing import List, Tuple + +import pendulum +import logging +import pandas as pd + +from scrape_data.scrape_schedule_versions import create_schedule_list +from data_analysis.gtfs_fetcher import GTFSFetcher, ScheduleFeedInfo, ScheduleSource + +logger = logging.getLogger() +logging.basicConfig(level=logging.INFO) +logger.setLevel(logging.INFO) + +BASE_URL = "https://transitfeeds.com" + +# Last historical schedule available on transitfeeds.com +LAST_TRANSITFEEDS = pendulum.date(2023, 12, 7) +FIRST_CTA = pendulum.date(2023, 12, 16) + + +@dataclass +class GTFSFeed: + """Class for storing GTFSFeed data. + """ + stops: pd.DataFrame + stop_times: pd.DataFrame + routes: pd.DataFrame + trips: pd.DataFrame + calendar: pd.DataFrame + calendar_dates: pd.DataFrame + shapes: pd.DataFrame + + @classmethod + def extract_data(cls, gtfs_zipfile: zipfile.ZipFile, version_id: str) -> GTFSFeed: + """Load each text file in zipfile into a DataFrame + + Args: + gtfs_zipfile (zipfile.ZipFile): Zipfile downloaded from + transitfeeds.com or transitchicago.com e.g. + https://transitfeeds.com/p/chicago-transit-authority/ + 165/20220718/download or https://www.transitchicago.com/downloads/sch_data/ + version_id (str, optional): The schedule version in use. + Defaults to None. + + Returns: + GTFSFeed: A GTFSFeed object containing multiple DataFrames + accessible by name. + """ + data_dict = {} + pbar = tqdm(cls.__annotations__.keys()) + pbar.set_description(f'Loading schedule {version_id}') + for txt_file in pbar: + try: + with gtfs_zipfile.open(f'{txt_file}.txt') as file: + df = pd.read_csv(file, dtype="object") + + except KeyError as ke: + logger.info(f"{gtfs_zipfile} is missing required file") + logger.info(ke) + df = None + data_dict[txt_file] = df + return cls(**data_dict) + + +class ScheduleIndexer: + def __init__(self, cache_manager: CacheManager, month: int, year: int): + self.month = month + self.year = year + self.gtfs_fetcher = GTFSFetcher(cache_manager) + self.schedules: List[ScheduleFeedInfo] = [] + schedule_start = pendulum.date(self.year, self.month, 1) + if schedule_start <= LAST_TRANSITFEEDS: + self.get_transitfeeds_schedules() + else: + logger.info(f'Skipping transitfeeds schedule fetch because schedule start {schedule_start} is after the ' + 'last available transitfeeds schedule.') + self.get_gtfs_schedules() + + @staticmethod + def calculate_latest_rt_data_date() -> str: + """Calculate the latest available date of real-time bus data + + Returns: + str: A string of the latest date in YYYY-MM-DD format. + """ + if pendulum.now("America/Chicago").hour >= 11: + end_date = ( + pendulum.yesterday("America/Chicago") + .date().format('YYYY-MM-DD') + ) + else: + end_date = ( + pendulum.now("America/Chicago").subtract(days=2) + .date().format('YYYY-MM-DD') + ) + return end_date + + def get_transitfeeds_schedules(self): + transitfeeds_schedules = create_schedule_list(month=self.month, + year=self.year) + for schedule_dict in transitfeeds_schedules: + self.schedules.append(ScheduleFeedInfo.from_dict(schedule_dict)) + + def get_gtfs_schedules(self): + pd = lambda version: pendulum.parse(version).date() + gtfs_versions = [version for version in self.gtfs_fetcher.get_versions() if pd(version) >= FIRST_CTA] + gtfs_versions.append(self.calculate_latest_rt_data_date()) + current = gtfs_versions.pop(0) + while gtfs_versions: + next = gtfs_versions[0] + sfi = ScheduleFeedInfo.from_pendulum(current, + pd(current).add(days=1), + pd(next).subtract(days=1), + ScheduleSource.S3) + self.schedules.append(sfi) + current = gtfs_versions.pop(0) + + def get_schedules(self): + return self.schedules diff --git a/data_analysis/static_gtfs_analysis.py b/data_analysis/static_gtfs_analysis.py index 759966f..927af3c 100644 --- a/data_analysis/static_gtfs_analysis.py +++ b/data_analysis/static_gtfs_analysis.py @@ -10,27 +10,24 @@ # imports from __future__ import annotations -import os from pathlib import Path -from dataclasses import dataclass -from typing import Tuple import logging import calendar +import datetime + import pandas as pd import zipfile -import requests import pendulum -from io import BytesIO import shapely import geopandas - from tqdm import tqdm -from scrape_data.scrape_schedule_versions import create_schedule_list + from data_analysis.cache_manager import CacheManager +from data_analysis.gtfs_fetcher import GTFSFetcher, ScheduleFeedInfo +from data_analysis.schedule_manager import GTFSFeed, ScheduleIndexer +from scrape_data.scrape_schedule_versions import create_schedule_list -VERSION_ID = "20220718" -BUCKET = os.getenv('BUCKET_PUBLIC', 'chn-ghost-buses-public') logger = logging.getLogger() logging.basicConfig( @@ -39,62 +36,6 @@ datefmt='%m/%d/%Y %I:%M:%S %p' ) -@dataclass -class GTFSFeed: - """Class for storing GTFSFeed data. - """ - stops: pd.DataFrame - stop_times: pd.DataFrame - routes: pd.DataFrame - trips: pd.DataFrame - calendar: pd.DataFrame - calendar_dates: pd.DataFrame - shapes: pd.DataFrame - - @classmethod - def extract_data(cls, gtfs_zipfile: zipfile.ZipFile, - version_id: str = None, cta_download: bool = True) -> GTFSFeed: - """Load each text file in zipfile into a DataFrame - - Args: - gtfs_zipfile (zipfile.ZipFile): Zipfile downloaded from - transitfeeds.com or transitchicago.com e.g. - https://transitfeeds.com/p/chicago-transit-authority/ - 165/20220718/download or https://www.transitchicago.com/downloads/sch_data/ - version_id (str, optional): The schedule version in use. - Defaults to None. - - Returns: - GTFSFeed: A GTFSFeed object containing multiple DataFrames - accessible by name. - """ - if cta_download: - if version_id is not None: - raise ValueError("version_id is not used for downloads directly from CTA") - else: - logging.info(f"Extracting data from transitchicago.com zipfile") - - else: - if version_id is None: - version_id = VERSION_ID - logging.info(f"Extracting data from transitfeeds.com zipfile version {version_id}") - - data_dict = {} - pbar = tqdm(cls.__annotations__.keys()) - for txt_file in pbar: - pbar.set_description(f'Loading {txt_file}.txt') - try: - with gtfs_zipfile.open(f'{txt_file}.txt') as file: - df = pd.read_csv(file, dtype="object") - logger.info(f'{txt_file}.txt loaded') - - except KeyError as ke: - logger.info(f"{gtfs_zipfile} is missing required file") - logger.info(ke) - df = None - data_dict[txt_file] = df - return cls(**data_dict) - # Basic data transformations # Ex. creating actual timestamps @@ -146,174 +87,218 @@ def format_dates_hours(data: GTFSFeed) -> GTFSFeed: return data -def make_trip_summary( - data: GTFSFeed, - feed_start_date: pendulum.datetime = None, - feed_end_date: pendulum.datetime = None) -> pd.DataFrame: - """Create a summary of trips with one row per date +class ScheduleSummarizer: + def __init__(self, + cache_manager: CacheManager, + gtfs_fetcher: GTFSFetcher, + schedule_feed_info : ScheduleFeedInfo): + self.cache_manager = cache_manager + self.gtfs_fetcher = gtfs_fetcher + self.schedule_feed_info = schedule_feed_info - Args: - data (GTFSFeed): GTFS data from CTA - feed_start_date (datetime): Date from which this feed is valid (inclusive). - Defaults to None - feed_end_date (datetime): Date until which this feed is valid (inclusive). - Defaults to None + def start_date(self): + return pendulum.parse(self.schedule_feed_info.feed_start_date) - Returns: - pd.DataFrame: A DataFrame with each trip that occurred per row. - """ - # construct a datetime index that has every day between calendar start and - # end - calendar_date_range = pd.DataFrame( - pd.date_range( - min(data.calendar.start_date_dt), - max(data.calendar.end_date_dt) - ), - columns=["raw_date"], - ) - - # cross join calendar index with actual calendar to get all combos of - # possible dates & services - calendar_cross = calendar_date_range.merge(data.calendar, how="cross") - - # extract day of week from date index date - calendar_cross["dayofweek"] = calendar_cross["raw_date"].dt.dayofweek - - # take wide calendar data (one col per day of week) and make it long (one - # row per day of week) - actual_service = calendar_cross.melt( - id_vars=[ - "raw_date", - "start_date_dt", - "end_date_dt", - "start_date", - "end_date", - "service_id", - "dayofweek", - ], - var_name="cal_dayofweek", - value_name="cal_val", - ) + def end_date(self): + return pendulum.parse(self.schedule_feed_info.feed_end_date) + + def schedule_version(self): + return self.schedule_feed_info.schedule_version + + def get_route_daily_summary(self): + trip_summary = self.make_trip_summary() + route_daily_summary = self.summarize_date_rt(trip_summary) + route_daily_summary['version'] = self.schedule_feed_info.schedule_version + return route_daily_summary - # map the calendar input strings to day of week integers to align w pandas - # dayofweek output - actual_service["cal_daynum"] = ( - actual_service["cal_dayofweek"].str.title().map( - dict(zip(calendar.day_name, range(7))) + def make_trip_summary(self) -> pd.DataFrame: + """Create a summary of trips with one row per date + + Args: + data (GTFSFeed): GTFS data from CTA + feed_start_date (datetime): Date from which this feed is valid (inclusive). + Defaults to None + feed_end_date (datetime): Date until which this feed is valid (inclusive). + Defaults to None + + Returns: + pd.DataFrame: A DataFrame with each trip that occurred per row. + """ + data = self.download_and_extract() + data = format_dates_hours(data) + + # construct a datetime index that has every day between calendar start and + # end + calendar_date_range = pd.DataFrame( + pd.date_range( + min(data.calendar.start_date_dt), + max(data.calendar.end_date_dt) + ), + columns=["raw_date"], ) - ) - # now check for rows that "work" - # i.e., the day of week matches between datetime index & calendar input - # and the datetime index is between the calendar row's start and end dates - actual_service = actual_service[ - (actual_service.dayofweek == actual_service.cal_daynum) - & (actual_service.start_date_dt <= actual_service.raw_date) - & (actual_service.end_date_dt >= actual_service.raw_date) - ] - - # now merge in calendar dates to the datetime index to get overrides - actual_service = actual_service.merge( - data.calendar_dates, - how="outer", - left_on=["raw_date", "service_id"], - right_on=["date_dt", "service_id"], - ) - # now add a service happened flag for dates where the schedule - # indicates that this service occurred - # i.e.: calendar has a service indicator of 1 and there's no - # exception type from calendar_dates - # OR calendar_dates has exception type of 1 - # otherwise no service - # https://stackoverflow.com/questions/21415661/logical-operators-for-boolean-indexing-in-pandas - actual_service["service_happened"] = ( - (actual_service["cal_val"] == "1") - & (actual_service["exception_type"].isnull()) - ) | (actual_service["exception_type"] == "1") - - # now fill in rows where calendar_dates had a date outside the bounds of - # the datetime index, so raw_date is always populated - actual_service["raw_date"] = actual_service["raw_date"].fillna( - actual_service["date_dt"] - ) + # cross join calendar index with actual calendar to get all combos of + # possible dates & services + calendar_cross = calendar_date_range.merge(data.calendar, how="cross") + + # extract day of week from date index date + calendar_cross["dayofweek"] = calendar_cross["raw_date"].dt.dayofweek + + # take wide calendar data (one col per day of week) and make it long (one + # row per day of week) + actual_service = calendar_cross.melt( + id_vars=[ + "raw_date", + "start_date_dt", + "end_date_dt", + "start_date", + "end_date", + "service_id", + "dayofweek", + ], + var_name="cal_dayofweek", + value_name="cal_val", + ) + + # map the calendar input strings to day of week integers to align w pandas + # dayofweek output + actual_service["cal_daynum"] = ( + actual_service["cal_dayofweek"].str.title().map( + dict(zip(calendar.day_name, range(7))) + ) + ) + # now check for rows that "work" + # i.e., the day of week matches between datetime index & calendar input + # and the datetime index is between the calendar row's start and end dates + actual_service = actual_service[ + (actual_service.dayofweek == actual_service.cal_daynum) + & (actual_service.start_date_dt <= actual_service.raw_date) + & (actual_service.end_date_dt >= actual_service.raw_date) + ] + + # now merge in calendar dates to the datetime index to get overrides + actual_service = actual_service.merge( + data.calendar_dates, + how="outer", + left_on=["raw_date", "service_id"], + right_on=["date_dt", "service_id"], + ) - # filter to only rows where service occurred - service_happened = actual_service[actual_service.service_happened] + # now add a service happened flag for dates where the schedule + # indicates that this service occurred + # i.e.: calendar has a service indicator of 1 and there's no + # exception type from calendar_dates + # OR calendar_dates has exception type of 1 + # otherwise no service + # https://stackoverflow.com/questions/21415661/logical-operators-for-boolean-indexing-in-pandas + actual_service["service_happened"] = ( + (actual_service["cal_val"] == "1") + & (actual_service["exception_type"].isnull()) + ) | (actual_service["exception_type"] == "1") + + # now fill in rows where calendar_dates had a date outside the bounds of + # the datetime index, so raw_date is always populated + actual_service["raw_date"] = actual_service["raw_date"].fillna( + actual_service["date_dt"] + ) - # join trips to only service that occurred - trips_happened = data.trips.merge( - service_happened, how="left", on="service_id") + # filter to only rows where service occurred + service_happened = actual_service[actual_service.service_happened] - # get only the trip / hour combos that actually occurred - trip_stop_hours = data.stop_times.drop_duplicates( - ["trip_id", "arrival_hour"] - ) - # now join - # result has one row per date + row from trips.txt (incl. route) + hour - trip_summary = trips_happened.merge( - trip_stop_hours, how="left", on="trip_id") + # join trips to only service that occurred + trips_happened = data.trips.merge( + service_happened, how="left", on="service_id") + + # get only the trip / hour combos that actually occurred + trip_stop_hours = data.stop_times.drop_duplicates( + ["trip_id", "arrival_hour"] + ) + # now join + # result has one row per date + row from trips.txt (incl. route) + hour + trip_summary = trips_happened.merge( + trip_stop_hours, how="left", on="trip_id") - # filter to only the rows for the period where this specific feed version was in effect - if feed_start_date is not None and feed_end_date is not None: + # filter to only the rows for the period where this specific feed version was in effect trip_summary = trip_summary.loc[ - (trip_summary['raw_date'] >= feed_start_date) - & (trip_summary['raw_date'] <= feed_end_date), :] + (trip_summary['raw_date'] >= self.start_date()) + & (trip_summary['raw_date'] <= self.end_date()), :] - return trip_summary + return trip_summary + def download_and_extract(self) -> GTFSFeed: + """Download a zipfile of GTFS data for a given version_id, + extract data, and format date column. -def group_trips( - trip_summary: pd.DataFrame, - groupby_vars: list) -> pd.DataFrame: - """Generate summary grouped by groupby_vars + Args: + version_id (str): The version of the GTFS schedule data to download. Defaults to None + If version_id is None, data will be downloaded from the CTA directly (transitchicag.com) + instead of transitfeeds.com - Args: - trip_summary (pd.DataFrame): A DataFrame of one trip per row i.e. - the output of the make_trip_summary function. - groupby_vars (list): Variables to group by. + Returns: + GTFSFeed: A GTFSFeed object with formated dates + """ + assert self.schedule_feed_info is not None + cta_gtfs = zipfile.ZipFile(self.gtfs_fetcher.retrieve_file(self.schedule_feed_info)) + version_id = self.schedule_feed_info.schedule_version + data = GTFSFeed.extract_data(cta_gtfs, version_id=version_id) + data = format_dates_hours(data) + return data + + @staticmethod + def group_trips( + trip_summary: pd.DataFrame, + groupby_vars: list) -> pd.DataFrame: + """Generate summary grouped by groupby_vars - Returns: - pd.DataFrame: A DataFrame with the trip count by groupby_vars e.g. - route and date. - """ - trip_summary = trip_summary.copy() - summary = ( - trip_summary.groupby(by=groupby_vars) - ["trip_id"] - .nunique() - .reset_index() - ) + Args: + trip_summary (pd.DataFrame): A DataFrame of one trip per row i.e. + the output of the make_trip_summary function. + groupby_vars (list): Variables to group by. - summary.rename( - columns={ - "trip_id": "trip_count", - "raw_date": "date"}, - inplace=True - ) - summary.date = summary.date.dt.date - return summary + Returns: + pd.DataFrame: A DataFrame with the trip count by groupby_vars e.g. + route and date. + """ + if trip_summary.empty: + return pd.DataFrame() + trip_summary = trip_summary.copy() + summary = ( + trip_summary.groupby(by=groupby_vars) + ["trip_id"] + .nunique() + .reset_index() + ) + summary.rename( + columns={ + "trip_id": "trip_count", + "raw_date": "date"}, + inplace=True + ) + summary.date = summary.date.dt.date + return summary -def summarize_date_rt(trip_summary: pd.DataFrame) -> pd.DataFrame: - """Summarize trips by date and route + @staticmethod + def summarize_date_rt(trip_summary: pd.DataFrame) -> pd.DataFrame: + """Summarize trips by date and route - Args: - trip_summary (pd.DataFrame): a summary of trips with one row per date. - Output of the make_trip_summary function. + Args: + trip_summary (pd.DataFrame): a summary of trips with one row per date. + Output of the make_trip_summary function. - Returns: - pd.DataFrame: A DataFrame grouped by date and route - """ - trip_summary = trip_summary.copy() - groupby_vars = ["raw_date", "route_id"] + Returns: + pd.DataFrame: A DataFrame grouped by date and route + """ + trip_summary = trip_summary.copy() + groupby_vars = ["raw_date", "route_id"] - # group to get trips by date by route - route_daily_summary = group_trips( - trip_summary, - groupby_vars=groupby_vars, - ) + # group to get trips by date by route + route_daily_summary = ScheduleSummarizer.group_trips( + trip_summary, + groupby_vars=groupby_vars, + ) - return route_daily_summary + return route_daily_summary def make_linestring_of_points( @@ -332,66 +317,6 @@ def make_linestring_of_points( return shapely.geometry.LineString(list(sorted_df["pt"])) -def download_cta_zip() -> Tuple[zipfile.ZipFile, BytesIO]: - """Download CTA schedule data from transitchicago.com - - Returns: - zipfile.ZipFile: A zipfile of the latest GTFS schedule data from transitchicago.com - """ - logger.info('Downloading CTA data') - zip_bytes_io = BytesIO( - requests.get("https://www.transitchicago.com/downloads/sch_data/google_transit.zip" - ).content - ) - CTA_GTFS = zipfile.ZipFile(zip_bytes_io) - logging.info('Download complete') - return CTA_GTFS, zip_bytes_io - - - -def download_zip(version_id: str) -> zipfile.ZipFile: - """Download a version schedule from transitfeeds.com - - Args: - version_id (str): The version schedule in the form - of a date e.g. YYYYMMDD - - Returns: - zipfile.ZipFile: A zipfile for the CTA version id. - """ - logger.info('Downloading CTA data') - CTA_GTFS = zipfile.ZipFile( - CacheManager(verbose=True).retrieve( - "transitfeeds_schedules", - f"{version_id}.zip", - f"https://transitfeeds.com/p/chicago-transit-authority/165/{version_id}/download" - ) - ) - logging.info('Download complete') - return CTA_GTFS - - -def download_extract_format(version_id: str = None) -> GTFSFeed: - """Download a zipfile of GTFS data for a given version_id, - extract data, and format date column. - - Args: - version_id (str): The version of the GTFS schedule data to download. Defaults to None - If version_id is None, data will be downloaded from the CTA directly (transitchicag.com) - instead of transitfeeds.com - - Returns: - GTFSFeed: A GTFSFeed object with formated dates - """ - if version_id is None: - CTA_GTFS, _ = download_cta_zip() - else: - CTA_GTFS = download_zip(version_id) - data = GTFSFeed.extract_data(CTA_GTFS, version_id=version_id) - data = format_dates_hours(data) - return data - - def main() -> geopandas.GeoDataFrame: """Download data from CTA, construct shapes from shape data, and save to geojson file @@ -399,12 +324,14 @@ def main() -> geopandas.GeoDataFrame: Returns: geopandas.GeoDataFrame: DataFrame with route shapes """ + indexer = ScheduleIndexer(CacheManager(),5, 2022) + schedule_list = indexer.get_schedules() - schedule_list = create_schedule_list(5, 2022) # Get the latest version - version_id = schedule_list[-1]['schedule_version'] + latest = schedule_list[-1] + provider = ScheduleSummarizer(latest) - data = download_extract_format(version_id) + data = provider.download_and_extract() # check that there are no dwell periods that cross hour boundary cross_hr_bndary = ( diff --git a/data_output/bus_route_shapes_simplified_linestring.json b/data_output/bus_route_shapes_simplified_linestring.json new file mode 100644 index 0000000..fe41bfa --- /dev/null +++ b/data_output/bus_route_shapes_simplified_linestring.json @@ -0,0 +1,13485 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "id": "0", + "type": "Feature", + "properties": { + "route_id": "GLS-1", + "shape_id": "GLS-100-0", + "direction": "North", + "trip_id": 1, + "route_short_name": null, + "route_long_name": "Green Line Shuttle", + "route_type": "3", + "route_url": null, + "route_color": "009B3A", + "route_text_color": "FFFFFF" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.6256970959918, 41.8310173679531], + [-87.6264573, 41.8310082], + [-87.6267995, 41.8474797], + [-87.6269899, 41.8487125], + [-87.6272012, 41.8565397], + [-87.627373, 41.8677972] + ] + } + }, + { + "id": "1", + "type": "Feature", + "properties": { + "route_id": "GLS-1", + "shape_id": "GLS-100-1", + "direction": "South", + "trip_id": 1, + "route_short_name": null, + "route_long_name": "Green Line Shuttle", + "route_type": "3", + "route_url": null, + "route_color": "009B3A", + "route_text_color": "FFFFFF" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.6275081, 41.867663], + [-87.626674, 41.8346836], + [-87.6233379, 41.8347059], + [-87.6232438, 41.8310468], + [-87.6256970959918, 41.8310173679531] + ] + } + }, + { + "id": "2", + "type": "Feature", + "properties": { + "route_id": "X98", + "shape_id": "64706672", + "direction": "South", + "trip_id": 1, + "route_short_name": "X98", + "route_long_name": "Avon Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/X98/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.798112, 42.05508], + [-87.7961, 42.05523], + [-87.76944, 42.05536], + [-87.76672, 42.05534], + [-87.76637, 42.05515], + [-87.76661, 42.04087], + [-87.76584, 42.04087], + [-87.76535, 42.04059], + [-87.76506, 42.04006], + [-87.76499, 42.03929], + [-87.76536, 42.03828], + [-87.76656, 42.03712], + [-87.76766, 42.0356], + [-87.76836, 42.03415], + [-87.76865, 42.03315], + [-87.7688, 42.03208], + [-87.76891, 42.02756], + [-87.76877, 42.02625], + [-87.76842, 42.02503], + [-87.7678, 42.02373], + [-87.7669, 42.02246], + [-87.76497, 42.02066], + [-87.75486, 42.015], + [-87.75218, 42.01321], + [-87.75059, 42.01153], + [-87.74982, 42.01035], + [-87.74906, 42.00837], + [-87.7488, 42.0067], + [-87.74898, 42.00094], + [-87.74926, 41.9997], + [-87.75079, 41.9954], + [-87.75154, 41.98754], + [-87.75112, 41.98581], + [-87.74879, 41.98269], + [-87.74816, 41.98077], + [-87.748, 41.97533], + [-87.7658, 41.97513], + [-87.76681, 41.97465], + [-87.76299, 41.97037], + [-87.76245, 41.96982], + [-87.762224, 41.969904] + ] + } + }, + { + "id": "3", + "type": "Feature", + "properties": { + "route_id": "19", + "shape_id": "19", + "direction": "West", + "trip_id": 2, + "route_short_name": "19", + "route_long_name": "United Center Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/19/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.6269017, 41.88682729], + [-87.62464809, 41.8867933], + [-87.62447855, 41.88216343], + [-87.67418798, 41.88138295] + ] + } + }, + { + "id": "6", + "type": "Feature", + "properties": { + "route_id": "169", + "shape_id": "64807006", + "direction": "East", + "trip_id": 5, + "route_short_name": "169", + "route_long_name": "69th-UPS Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/169/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.882018, 41.750285], + [-87.879731, 41.753202], + [-87.879682, 41.75359], + [-87.886584, 41.753326], + [-87.886034, 41.739414], + [-87.885685, 41.73875], + [-87.877331, 41.732118], + [-87.877046, 41.73207], + [-87.872123, 41.735103], + [-87.857858, 41.742222], + [-87.855684, 41.742921], + [-87.848571, 41.744394], + [-87.846073, 41.745183], + [-87.842603, 41.746728], + [-87.840677, 41.747132], + [-87.796149, 41.748151], + [-87.67948, 41.75016], + [-87.64403, 41.75063], + [-87.644533, 41.768841], + [-87.634438, 41.768989], + [-87.630137, 41.768867], + [-87.625463, 41.76901] + ] + } + }, + { + "id": "7", + "type": "Feature", + "properties": { + "route_id": "206", + "shape_id": "64708114", + "direction": "West", + "trip_id": 5, + "route_short_name": "206", + "route_long_name": "Evanston Circulator", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/206/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.672925, 42.017743], + [-87.673005, 42.018665], + [-87.674022, 42.019452], + [-87.690107, 42.019578], + [-87.690138, 42.026755], + [-87.69945, 42.02659], + [-87.698785, 42.055565], + [-87.694192, 42.055787], + [-87.694082, 42.058123], + [-87.693747, 42.05841], + [-87.698707, 42.064298], + [-87.699072, 42.06441], + [-87.726983, 42.064623], + [-87.727332, 42.065045], + [-87.727538, 42.065062], + [-87.727937, 42.064688], + [-87.727572, 42.064537], + [-87.72385, 42.06457] + ] + } + }, + { + "id": "8", + "type": "Feature", + "properties": { + "route_id": "192", + "shape_id": "64706979", + "direction": "South", + "trip_id": 6, + "route_short_name": "192", + "route_long_name": "University of Chicago Hosp. Exp.", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/192/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.641295, 41.881925], + [-87.640737, 41.867373], + [-87.640565, 41.867198], + [-87.639964, 41.867182], + [-87.622572, 41.867388], + [-87.62041, 41.867293], + [-87.618837, 41.862645], + [-87.613575, 41.850637], + [-87.608473, 41.837945], + [-87.60825, 41.837038], + [-87.607965, 41.83409], + [-87.607408, 41.832723], + [-87.604912, 41.829457], + [-87.601145, 41.826182], + [-87.600622, 41.825403], + [-87.598633, 41.821247], + [-87.593865, 41.815032], + [-87.59102, 41.812712], + [-87.588335, 41.809445], + [-87.585792, 41.806712], + [-87.582835, 41.804622], + [-87.582183, 41.80393], + [-87.58177, 41.803158], + [-87.581563, 41.801975], + [-87.581563, 41.799893], + [-87.58177, 41.799655], + [-87.58711, 41.799583], + [-87.587348, 41.799383], + [-87.587317, 41.796833], + [-87.587933, 41.793327], + [-87.586697, 41.793305], + [-87.586617, 41.787896], + [-87.605947, 41.787722], + [-87.606141, 41.791504] + ] + } + }, + { + "id": "9", + "type": "Feature", + "properties": { + "route_id": "169", + "shape_id": "64807005", + "direction": "West", + "trip_id": 6, + "route_short_name": "169", + "route_long_name": "69th-UPS Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/169/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.625385, 41.76901], + [-87.625115, 41.769097], + [-87.625115, 41.768947], + [-87.625497, 41.768827], + [-87.626513, 41.768858], + [-87.626577, 41.769145], + [-87.626958, 41.769263], + [-87.643997, 41.768882], + [-87.644505, 41.768747], + [-87.64403, 41.75063], + [-87.741033, 41.74931], + [-87.744877, 41.749124], + [-87.80107, 41.748167], + [-87.842224, 41.747277], + [-87.843458, 41.747117], + [-87.846687, 41.745812], + [-87.849363, 41.744465], + [-87.850511, 41.744097], + [-87.856341, 41.742874], + [-87.858304, 41.742127], + [-87.872306, 41.735045], + [-87.877138, 41.732176], + [-87.885221, 41.738435], + [-87.885865, 41.739092], + [-87.885945, 41.73936], + [-87.88622, 41.746315], + [-87.885394, 41.746465], + [-87.884657, 41.747305], + [-87.88418, 41.747592], + [-87.882035, 41.750262] + ] + } + }, + { + "id": "10", + "type": "Feature", + "properties": { + "route_id": "206", + "shape_id": "64703190", + "direction": "East", + "trip_id": 7, + "route_short_name": "206", + "route_long_name": "Evanston Circulator", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/206/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.723852, 42.064547], + [-87.698785, 42.064195], + [-87.694272, 42.058807], + [-87.694192, 42.057455], + [-87.69424, 42.055818], + [-87.694352, 42.055715], + [-87.69869, 42.055628], + [-87.698928, 42.055422], + [-87.699198, 42.042618], + [-87.699057, 42.041163], + [-87.688518, 42.041243], + [-87.688088, 42.0411], + [-87.68812, 42.03963], + [-87.685895, 42.030403], + [-87.685323, 42.024507], + [-87.684655, 42.019667], + [-87.684273, 42.019468], + [-87.676389, 42.019382], + [-87.67558, 42.017608], + [-87.675198, 42.016138], + [-87.673004, 42.017115], + [-87.673015, 42.017402] + ] + } + }, + { + "id": "11", + "type": "Feature", + "properties": { + "route_id": "121", + "shape_id": "64808090", + "direction": "South", + "trip_id": 9, + "route_short_name": "121", + "route_long_name": "Union/Wacker Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/121/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.620371, 41.895184], + [-87.620348, 41.891871], + [-87.624018, 41.89166], + [-87.624128, 41.891247], + [-87.62397, 41.889983], + [-87.624154, 41.890001], + [-87.624518, 41.888267], + [-87.625502, 41.888185], + [-87.626776, 41.886957], + [-87.635069, 41.886891], + [-87.635547, 41.886822], + [-87.636818, 41.885943], + [-87.636995, 41.884736], + [-87.636907, 41.880628], + [-87.637022, 41.879393], + [-87.639203, 41.879337] + ] + } + }, + { + "id": "12", + "type": "Feature", + "properties": { + "route_id": "165", + "shape_id": "64704599", + "direction": "East", + "trip_id": 9, + "route_short_name": "165", + "route_long_name": "West 65th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/165/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.800925, 41.774852], + [-87.800687, 41.774645], + [-87.800687, 41.773762], + [-87.800337, 41.773675], + [-87.764065, 41.774223], + [-87.742385, 41.774787], + [-87.742115, 41.774987], + [-87.742067, 41.775289], + [-87.74232, 41.78199], + [-87.742225, 41.782798], + [-87.741128, 41.784252], + [-87.739747, 41.784348], + [-87.73927, 41.78457], + [-87.738347, 41.78585], + [-87.738427, 41.786215], + [-87.738713, 41.786407] + ] + } + }, + { + "id": "13", + "type": "Feature", + "properties": { + "route_id": "192", + "shape_id": "64802671", + "direction": "North", + "trip_id": 10, + "route_short_name": "192", + "route_long_name": "University of Chicago Hosp. Exp.", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/192/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.603783, 41.787733], + [-87.606011, 41.78774], + [-87.606183, 41.794728], + [-87.606344, 41.794953], + [-87.60738, 41.79497], + [-87.608138, 41.79406], + [-87.608775, 41.793653], + [-87.60976, 41.793305], + [-87.61065, 41.793202], + [-87.613098, 41.793765], + [-87.61454, 41.794377], + [-87.614702, 41.794747], + [-87.614909, 41.794806], + [-87.620812, 41.794798], + [-87.621553, 41.820213], + [-87.62187, 41.838104], + [-87.622042, 41.8385], + [-87.623129, 41.838754], + [-87.623287, 41.83963], + [-87.623922, 41.857415], + [-87.624053, 41.867254], + [-87.624278, 41.867523], + [-87.63916, 41.867325], + [-87.639357, 41.873422], + [-87.639663, 41.87619], + [-87.639583, 41.878872], + [-87.63996, 41.879032], + [-87.639865, 41.879223], + [-87.640023, 41.880113], + [-87.639865, 41.880295], + [-87.639802, 41.881687], + [-87.640882, 41.881853] + ] + } + }, + { + "id": "14", + "type": "Feature", + "properties": { + "route_id": "165", + "shape_id": "64704671", + "direction": "West", + "trip_id": 10, + "route_short_name": "165", + "route_long_name": "West 65th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/165/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.738857, 41.786375], + [-87.73927, 41.78631], + [-87.739953, 41.785135], + [-87.74016, 41.784355], + [-87.741653, 41.784228], + [-87.742512, 41.782917], + [-87.742326, 41.77482], + [-87.800206, 41.773783], + [-87.800558, 41.773842], + [-87.800622, 41.774], + [-87.800653, 41.774993], + [-87.800782, 41.77509], + [-87.800972, 41.774883] + ] + } + }, + { + "id": "15", + "type": "Feature", + "properties": { + "route_id": "120", + "shape_id": "64806364", + "direction": "South", + "trip_id": 13, + "route_short_name": "120", + "route_long_name": "Ogilvie/Wacker Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/120/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.620371, 41.895184], + [-87.620348, 41.891871], + [-87.624018, 41.89166], + [-87.624128, 41.891247], + [-87.62397, 41.889983], + [-87.624261, 41.88983], + [-87.624585, 41.888345], + [-87.625569, 41.888181], + [-87.62668, 41.887065], + [-87.627353, 41.886921], + [-87.635622, 41.88686], + [-87.636896, 41.885953], + [-87.637095, 41.884519], + [-87.639774, 41.884441], + [-87.639795, 41.883581] + ] + } + }, + { + "id": "16", + "type": "Feature", + "properties": { + "route_id": "121", + "shape_id": "64808086", + "direction": "North", + "trip_id": 14, + "route_short_name": "121", + "route_long_name": "Union/Wacker Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/121/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.640008, 41.878012], + [-87.636698, 41.878081], + [-87.636765, 41.885518], + [-87.636443, 41.886125], + [-87.63544, 41.886768], + [-87.624448, 41.886818], + [-87.624402, 41.888269], + [-87.624019, 41.889783], + [-87.623993, 41.890904], + [-87.62011, 41.891027], + [-87.620331, 41.896545] + ] + } + }, + { + "id": "17", + "type": "Feature", + "properties": { + "route_id": "120", + "shape_id": "64706361", + "direction": "North", + "trip_id": 14, + "route_short_name": "120", + "route_long_name": "Ogilvie/Wacker Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/120/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.639809, 41.883481], + [-87.639707, 41.883159], + [-87.635362, 41.883195], + [-87.635358, 41.885688], + [-87.634746, 41.885749], + [-87.634762, 41.886801], + [-87.624429, 41.886832], + [-87.624425, 41.888144], + [-87.624008, 41.889893], + [-87.624019, 41.890879], + [-87.62011, 41.891027], + [-87.620331, 41.896545] + ] + } + }, + { + "id": "18", + "type": "Feature", + "properties": { + "route_id": "125", + "shape_id": "64702863", + "direction": "North", + "trip_id": 14, + "route_short_name": "125", + "route_long_name": "Water Tower Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/125/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.644315, 41.87455], + [-87.644076, 41.874339], + [-87.63989, 41.874404], + [-87.639627, 41.874527], + [-87.639687, 41.876618], + [-87.639484, 41.877872], + [-87.639796, 41.88565], + [-87.636789, 41.885703], + [-87.636322, 41.886262], + [-87.635375, 41.886925], + [-87.636944, 41.888797], + [-87.636943, 41.892334], + [-87.62772, 41.89242], + [-87.624123, 41.892596], + [-87.62418, 41.89673], + [-87.62183, 41.89677], + [-87.62186, 41.89842], + [-87.6221, 41.89842] + ] + } + }, + { + "id": "19", + "type": "Feature", + "properties": { + "route_id": "143", + "shape_id": "64704511", + "direction": "North", + "trip_id": 15, + "route_short_name": "143", + "route_long_name": "Stockton/Michigan Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/143/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.62368, 41.874761], + [-87.62328, 41.8757], + [-87.62333, 41.87587], + [-87.62419, 41.87582], + [-87.624128, 41.878118], + [-87.624336, 41.880424], + [-87.624145, 41.882448], + [-87.62438, 41.8845], + [-87.62447, 41.88801], + [-87.624002, 41.889903], + [-87.62421, 41.89642], + [-87.623981, 41.898145], + [-87.62403, 41.90081], + [-87.62361, 41.90234], + [-87.62479, 41.90571], + [-87.62538, 41.90798], + [-87.62567, 41.90941], + [-87.62582, 41.9119], + [-87.629, 41.91872], + [-87.63072, 41.92468], + [-87.63067, 41.92622], + [-87.63377, 41.92573], + [-87.63605, 41.92568], + [-87.63619, 41.92589], + [-87.63683, 41.92607], + [-87.63779, 41.92662], + [-87.63845, 41.92722], + [-87.63876, 41.92775], + [-87.63887, 41.92827], + [-87.63879, 41.93038], + [-87.639032, 41.93182], + [-87.638742, 41.932333], + [-87.639275, 41.932865], + [-87.639323, 41.933136], + [-87.639133, 41.933352], + [-87.639334, 41.933634], + [-87.639525, 41.939585] + ] + } + }, + { + "id": "20", + "type": "Feature", + "properties": { + "route_id": "136", + "shape_id": "64704080", + "direction": "North", + "trip_id": 16, + "route_short_name": "136", + "route_long_name": "Sheridan/LaSalle Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/136/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.635097, 41.878087], + [-87.6323, 41.87813], + [-87.632375, 41.886837], + [-87.62685, 41.88688], + [-87.62635, 41.88711], + [-87.62552, 41.88808], + [-87.62516, 41.88823], + [-87.622818, 41.888163], + [-87.6195, 41.88764], + [-87.61417, 41.88741], + [-87.61398, 41.88759], + [-87.61401, 41.89276], + [-87.61433, 41.89345], + [-87.61948, 41.90095], + [-87.62022, 41.90134], + [-87.62187, 41.90147], + [-87.62275, 41.90172], + [-87.62347, 41.90215], + [-87.62403, 41.90284], + [-87.62556, 41.90878], + [-87.62586, 41.91205], + [-87.62853, 41.91748], + [-87.629, 41.91872], + [-87.62977, 41.9217], + [-87.63183, 41.92832], + [-87.6319, 41.93312], + [-87.63219, 41.93454], + [-87.63293, 41.93587], + [-87.6336, 41.93665], + [-87.63743, 41.9396], + [-87.63886, 41.94125], + [-87.64428, 41.95074], + [-87.64452, 41.95132], + [-87.64459, 41.95212], + [-87.64454, 41.95311], + [-87.64415, 41.95464], + [-87.64525, 41.95463], + [-87.64668, 41.95935], + [-87.64696, 41.96224], + [-87.64681, 41.962248], + [-87.64696, 41.96224], + [-87.64824, 41.96407], + [-87.649682, 41.969551], + [-87.65213, 41.97643], + [-87.65499, 41.97638], + [-87.655, 41.97678], + [-87.654853, 41.976783], + [-87.65501, 41.97683], + [-87.654933, 41.978055], + [-87.65515, 41.98156], + [-87.655028, 41.981647], + [-87.65515, 41.98164], + [-87.65516, 41.98189], + [-87.65514, 41.985263], + [-87.65524, 41.98526], + [-87.655362, 41.992415], + [-87.65565, 41.99779], + [-87.65586, 41.99808], + [-87.65622, 41.99822], + [-87.65845, 41.99822], + [-87.658445, 41.998107], + [-87.65845, 41.99822], + [-87.66052, 41.9982], + [-87.66052, 41.99806] + ] + } + }, + { + "id": "21", + "type": "Feature", + "properties": { + "route_id": "134", + "shape_id": "64804508", + "direction": "North", + "trip_id": 17, + "route_short_name": "134", + "route_long_name": "Stockton/LaSalle Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/134/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.635097, 41.878087], + [-87.6323, 41.87813], + [-87.632375, 41.886837], + [-87.62685, 41.88688], + [-87.62635, 41.88711], + [-87.62552, 41.88808], + [-87.62516, 41.88823], + [-87.622818, 41.888163], + [-87.6195, 41.88764], + [-87.61417, 41.88741], + [-87.61398, 41.88759], + [-87.61395, 41.89219], + [-87.61424, 41.89331], + [-87.61948, 41.90095], + [-87.62022, 41.90134], + [-87.62253, 41.90163], + [-87.62347, 41.90215], + [-87.62397, 41.90271], + [-87.62556, 41.90878], + [-87.62586, 41.91205], + [-87.62853, 41.91748], + [-87.629, 41.91872], + [-87.63072, 41.92468], + [-87.63067, 41.92622], + [-87.63377, 41.92573], + [-87.63605, 41.92568], + [-87.63619, 41.92589], + [-87.63765, 41.92652], + [-87.63858, 41.9274], + [-87.63887, 41.92827], + [-87.63876, 41.92982], + [-87.639032, 41.93182], + [-87.638742, 41.932333], + [-87.639275, 41.932865], + [-87.639323, 41.933136], + [-87.639133, 41.933352], + [-87.639334, 41.933634], + [-87.639525, 41.939585] + ] + } + }, + { + "id": "22", + "type": "Feature", + "properties": { + "route_id": "55A", + "shape_id": "64704665", + "direction": "East", + "trip_id": 17, + "route_short_name": "55A", + "route_long_name": "55th/Austin", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/55A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.771118, 41.774529], + [-87.771678, 41.783577], + [-87.771996, 41.791557], + [-87.771881, 41.792465], + [-87.767705, 41.792677], + [-87.74243, 41.793069], + [-87.742003, 41.792883], + [-87.741685, 41.792008], + [-87.741398, 41.784388], + [-87.740588, 41.784228], + [-87.739778, 41.784292], + [-87.739317, 41.784498], + [-87.738378, 41.785683], + [-87.738538, 41.786343], + [-87.738983, 41.786613] + ] + } + }, + { + "id": "23", + "type": "Feature", + "properties": { + "route_id": "55A", + "shape_id": "64704663", + "direction": "West", + "trip_id": 17, + "route_short_name": "55A", + "route_long_name": "55th/Austin", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/55A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.73911, 41.786589], + [-87.73938, 41.786367], + [-87.74008, 41.78442], + [-87.741082, 41.784372], + [-87.741257, 41.785032], + [-87.741542, 41.792168], + [-87.74178, 41.792867], + [-87.74221, 41.793177], + [-87.75324, 41.792892], + [-87.762698, 41.79286], + [-87.772106, 41.792499], + [-87.771507, 41.778148], + [-87.771546, 41.777873], + [-87.773814, 41.777801], + [-87.773839, 41.774888], + [-87.77379, 41.774213], + [-87.773507, 41.774072], + [-87.771472, 41.774143], + [-87.771282, 41.774215], + [-87.771265, 41.774485] + ] + } + }, + { + "id": "24", + "type": "Feature", + "properties": { + "route_id": "2", + "shape_id": "64805530", + "direction": "North", + "trip_id": 18, + "route_short_name": "2", + "route_long_name": "Hyde Park Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/2/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.6069, 41.786335], + [-87.606057, 41.786447], + [-87.605977, 41.786588], + [-87.606105, 41.793073], + [-87.606232, 41.7934], + [-87.606295, 41.80153], + [-87.604452, 41.801522], + [-87.603323, 41.802325], + [-87.596413, 41.802303], + [-87.58781, 41.802578], + [-87.589082, 41.805837], + [-87.59069, 41.80826], + [-87.59203, 41.80939], + [-87.59201, 41.80968], + [-87.58894, 41.81089], + [-87.59079, 41.81302], + [-87.59275, 41.81447], + [-87.59384, 41.81555], + [-87.59827, 41.82136], + [-87.60091, 41.82633], + [-87.60483, 41.82992], + [-87.60683, 41.83253], + [-87.60742, 41.83366], + [-87.60771, 41.83476], + [-87.60808, 41.83792], + [-87.61112, 41.84528], + [-87.61351, 41.85261], + [-87.61514, 41.85528], + [-87.61744, 41.85994], + [-87.61855, 41.86295], + [-87.61921, 41.8659], + [-87.6192, 41.86655], + [-87.61885, 41.86731], + [-87.616968, 41.869509], + [-87.616989, 41.87328], + [-87.620637, 41.8732], + [-87.620362, 41.869343], + [-87.620358, 41.868718], + [-87.620573, 41.868694], + [-87.620658, 41.873296], + [-87.627525, 41.8732], + [-87.62791, 41.88683], + [-87.62446, 41.88682], + [-87.6244, 41.888348], + [-87.624008, 41.889836], + [-87.624066, 41.892496], + [-87.620399, 41.89257], + [-87.620258, 41.892154], + [-87.620282, 41.890995], + [-87.615374, 41.891028], + [-87.611601, 41.891143], + [-87.611483, 41.892389], + [-87.611029, 41.892638] + ] + } + }, + { + "id": "25", + "type": "Feature", + "properties": { + "route_id": "143", + "shape_id": "64804512", + "direction": "South", + "trip_id": 18, + "route_short_name": "143", + "route_long_name": "Stockton/Michigan Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/143/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.639308, 41.938422], + [-87.639483, 41.938327], + [-87.639515, 41.937492], + [-87.63933, 41.93433], + [-87.639405, 41.933097], + [-87.63872, 41.93232], + [-87.63898, 41.93187], + [-87.63904, 41.931243], + [-87.63879, 41.93038], + [-87.63887, 41.92827], + [-87.638752, 41.92774], + [-87.637543, 41.926422], + [-87.63623, 41.92591], + [-87.63605, 41.92568], + [-87.63377, 41.92573], + [-87.63185, 41.92601], + [-87.63078, 41.9243], + [-87.62877, 41.9176], + [-87.62606, 41.91208], + [-87.62587, 41.90923], + [-87.62489, 41.90509], + [-87.62478, 41.90388], + [-87.62417, 41.90216], + [-87.62419, 41.89791], + [-87.624406, 41.895914], + [-87.6242, 41.88988], + [-87.62464, 41.88804], + [-87.62436, 41.87661] + ] + } + }, + { + "id": "26", + "type": "Feature", + "properties": { + "route_id": "54A", + "shape_id": "64801274", + "direction": "North", + "trip_id": 19, + "route_short_name": "54A", + "route_long_name": "North Cicero/Skokie Blvd.", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/54A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.730082, 41.953823], + [-87.732832, 41.953617], + [-87.7472, 41.953553], + [-87.747518, 41.962088], + [-87.746915, 41.962883], + [-87.747773, 41.965077], + [-87.747932, 41.966492], + [-87.747852, 41.96793], + [-87.747598, 41.968208], + [-87.747487, 41.968693], + [-87.747852, 41.969615], + [-87.74782, 41.972333], + [-87.748233, 41.984278], + [-87.748202, 41.98977], + [-87.748362, 41.991987], + [-87.748265, 42.000108], + [-87.747598, 42.020508], + [-87.74736, 42.021415], + [-87.745993, 42.023212], + [-87.745722, 42.02445], + [-87.745913, 42.025142], + [-87.746962, 42.02678], + [-87.747312, 42.028242], + [-87.74702, 42.04079], + [-87.750451, 42.040872], + [-87.750687, 42.040862], + [-87.750922, 42.040851], + [-87.751625, 42.040813], + [-87.752049, 42.040811], + [-87.752341, 42.040382], + [-87.752011, 42.039771], + [-87.75188, 42.039928], + [-87.752067, 42.040735], + [-87.750758, 42.040781], + [-87.750616, 42.040813], + [-87.750579, 42.040912], + [-87.750458, 42.046465], + [-87.746803, 42.04997], + [-87.746723, 42.053887], + [-87.746852, 42.055158], + [-87.747185, 42.055382], + [-87.751523, 42.055493], + [-87.751555, 42.057248], + [-87.752017, 42.058537], + [-87.750777, 42.058663], + [-87.750443, 42.059363], + [-87.750157, 42.060587], + [-87.7503, 42.060817], + [-87.751285, 42.060857], + [-87.751413, 42.062542], + [-87.767338, 42.062725], + [-87.767545, 42.062923], + [-87.767068, 42.063122], + [-87.767307, 42.063288] + ] + } + }, + { + "id": "27", + "type": "Feature", + "properties": { + "route_id": "135", + "shape_id": "64707444", + "direction": "South", + "trip_id": 19, + "route_short_name": "135", + "route_long_name": "Clarendon/LaSalle Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/135/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.649927, 41.963448], + [-87.649623, 41.954618], + [-87.64525, 41.95463], + [-87.64499, 41.95307], + [-87.645106, 41.952111], + [-87.6448, 41.95089], + [-87.64143, 41.94509], + [-87.63995, 41.9423], + [-87.63957, 41.94121], + [-87.638262, 41.939658], + [-87.637001, 41.938968], + [-87.63418, 41.936967], + [-87.633247, 41.936009], + [-87.63263, 41.935019], + [-87.632147, 41.933327], + [-87.632038, 41.928175], + [-87.629881, 41.921599], + [-87.629334, 41.9192], + [-87.628481, 41.917031], + [-87.625992, 41.911857], + [-87.62598, 41.909789], + [-87.624289, 41.902922], + [-87.623302, 41.901788], + [-87.62225, 41.901357], + [-87.619675, 41.901013], + [-87.614203, 41.892756], + [-87.61426, 41.887709], + [-87.620615, 41.88797], + [-87.623063, 41.888307], + [-87.62503, 41.888371], + [-87.625571, 41.88821], + [-87.62637, 41.887332], + [-87.626907, 41.886992], + [-87.632509, 41.886876], + [-87.632338, 41.879399], + [-87.633738, 41.879365], + [-87.633827, 41.879227], + [-87.633926, 41.879363], + [-87.636046, 41.879265] + ] + } + }, + { + "id": "28", + "type": "Feature", + "properties": { + "route_id": "54A", + "shape_id": "64801275", + "direction": "South", + "trip_id": 19, + "route_short_name": "54A", + "route_long_name": "North Cicero/Skokie Blvd.", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/54A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.767517, 42.063274], + [-87.767031, 42.063202], + [-87.767163, 42.063003], + [-87.767533, 42.062893], + [-87.767501, 42.062586], + [-87.764383, 42.062693], + [-87.751635, 42.062423], + [-87.75146, 42.062128], + [-87.75146, 42.060897], + [-87.751477, 42.060722], + [-87.751508, 42.060555], + [-87.752065, 42.059268], + [-87.751985, 42.058648], + [-87.750713, 42.05864], + [-87.750188, 42.060667], + [-87.751348, 42.060753], + [-87.751508, 42.060603], + [-87.752112, 42.059307], + [-87.752065, 42.058338], + [-87.751603, 42.057337], + [-87.75162, 42.055422], + [-87.751333, 42.055223], + [-87.7472, 42.055175], + [-87.746962, 42.054977], + [-87.74712, 42.04211], + [-87.74803, 42.0408], + [-87.75215, 42.04085], + [-87.75233, 42.04041], + [-87.751922, 42.039782], + [-87.75181, 42.039885], + [-87.752048, 42.04064], + [-87.751922, 42.040718], + [-87.74715, 42.04069], + [-87.747503, 42.028178], + [-87.746962, 42.026302], + [-87.746057, 42.025198], + [-87.74577, 42.024237], + [-87.74612, 42.023172], + [-87.747407, 42.021558], + [-87.747725, 42.02039], + [-87.74844, 41.99751], + [-87.748408, 41.985803], + [-87.747917, 41.969742], + [-87.747677, 41.968622], + [-87.747852, 41.967803], + [-87.747757, 41.964577], + [-87.747042, 41.96286], + [-87.747567, 41.962263], + [-87.747677, 41.9615], + [-87.747413, 41.953527], + [-87.747075, 41.953396], + [-87.729997, 41.953633], + [-87.729927, 41.954072], + [-87.730072, 41.954122], + [-87.730179, 41.953968] + ] + } + }, + { + "id": "29", + "type": "Feature", + "properties": { + "route_id": "24", + "shape_id": "64806778", + "direction": "South", + "trip_id": 19, + "route_short_name": "24", + "route_long_name": "Wentworth", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/24/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.631142, 41.885319], + [-87.63063, 41.876767], + [-87.630742, 41.875565], + [-87.63063, 41.867643], + [-87.630328, 41.867563], + [-87.63063, 41.867388], + [-87.630343, 41.861897], + [-87.630217, 41.86177], + [-87.630343, 41.86173], + [-87.630392, 41.859505], + [-87.63015, 41.85514], + [-87.63182, 41.8543], + [-87.63181, 41.85396], + [-87.631916, 41.853992], + [-87.63181, 41.85396], + [-87.6318, 41.85293], + [-87.63204, 41.85293], + [-87.632126, 41.852465], + [-87.63202, 41.85247], + [-87.63199, 41.85099], + [-87.632123, 41.850858], + [-87.631964, 41.84836], + [-87.632202, 41.847178], + [-87.631865, 41.845216], + [-87.631917, 41.842513], + [-87.631362, 41.82766], + [-87.631187, 41.813713], + [-87.631012, 41.81218], + [-87.631345, 41.810963], + [-87.632486, 41.808904], + [-87.63269, 41.808217], + [-87.63252, 41.80471], + [-87.632, 41.80214], + [-87.63214, 41.801363], + [-87.632092, 41.800187], + [-87.63198, 41.80019], + [-87.632013, 41.798352], + [-87.631825, 41.794599], + [-87.631814, 41.794483], + [-87.631804, 41.794367], + [-87.631772, 41.794255], + [-87.629556, 41.794273], + [-87.629572, 41.794787], + [-87.629247, 41.795458], + [-87.62939, 41.796443], + [-87.630028, 41.796418], + [-87.630047, 41.795666], + [-87.629693, 41.795198], + [-87.629661, 41.794658], + [-87.631654, 41.794517], + [-87.631855, 41.794455], + [-87.632045, 41.792883], + [-87.631775, 41.789823], + [-87.631853, 41.789013], + [-87.63175, 41.78901], + [-87.631965, 41.787312], + [-87.631902, 41.77973], + [-87.6316, 41.778658], + [-87.630137, 41.776543], + [-87.63001, 41.769177], + [-87.62966, 41.76197], + [-87.633237, 41.75453], + [-87.633825, 41.752828], + [-87.634673, 41.749233], + [-87.634842, 41.749093], + [-87.635938, 41.744278], + [-87.635827, 41.74411], + [-87.63435, 41.743578], + [-87.63205, 41.74354], + [-87.631996, 41.738916], + [-87.632334, 41.737723], + [-87.632417, 41.736764], + [-87.63278, 41.736042], + [-87.634397, 41.73602], + [-87.635748, 41.736243], + [-87.653263, 41.736068], + [-87.653392, 41.736752], + [-87.653295, 41.736878], + [-87.652962, 41.736775], + [-87.653217, 41.736617] + ] + } + }, + { + "id": "30", + "type": "Feature", + "properties": { + "route_id": "2", + "shape_id": "64705528", + "direction": "South", + "trip_id": 20, + "route_short_name": "2", + "route_long_name": "Hyde Park Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/2/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.610892, 41.892706], + [-87.610484, 41.892965], + [-87.61002, 41.892969], + [-87.610017, 41.892176], + [-87.61379, 41.89189], + [-87.615639, 41.891968], + [-87.620209, 41.891807], + [-87.620334, 41.893404], + [-87.624254, 41.893301], + [-87.6242, 41.88988], + [-87.62457, 41.88831], + [-87.625061, 41.888387], + [-87.62546, 41.88823], + [-87.6264, 41.88725], + [-87.62678, 41.88705], + [-87.62806, 41.88694], + [-87.627569, 41.873037], + [-87.620594, 41.873238], + [-87.620487, 41.867774], + [-87.619138, 41.863558], + [-87.618248, 41.86127], + [-87.61607, 41.8567], + [-87.614003, 41.851852], + [-87.608362, 41.83796], + [-87.608138, 41.83703], + [-87.607965, 41.834687], + [-87.607377, 41.832922], + [-87.604753, 41.829457], + [-87.601098, 41.826253], + [-87.600462, 41.825253], + [-87.598888, 41.821875], + [-87.597903, 41.82031], + [-87.594025, 41.815263], + [-87.59331, 41.814515], + [-87.591402, 41.813013], + [-87.590655, 41.812147], + [-87.589813, 41.810478], + [-87.591195, 41.80989], + [-87.592514, 41.809678], + [-87.590767, 41.808087], + [-87.589521, 41.806245], + [-87.588, 41.802563], + [-87.588112, 41.80246], + [-87.588573, 41.802572], + [-87.596902, 41.802483], + [-87.59749, 41.802333], + [-87.601988, 41.80238], + [-87.604412, 41.802094], + [-87.60655, 41.801648], + [-87.606327, 41.799345], + [-87.606008, 41.787225], + [-87.606963, 41.78705], + [-87.607153, 41.786723], + [-87.606978, 41.786422], + [-87.60655, 41.786382] + ] + } + }, + { + "id": "31", + "type": "Feature", + "properties": { + "route_id": "148", + "shape_id": "64806403", + "direction": "North", + "trip_id": 20, + "route_short_name": "148", + "route_long_name": "Clarendon Michigan Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/148/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.627527, 41.874888], + [-87.62793, 41.88565], + [-87.62787, 41.88577], + [-87.62442, 41.88577], + [-87.62447, 41.88801], + [-87.624002, 41.889903], + [-87.62421, 41.89642], + [-87.623981, 41.898145], + [-87.62403, 41.90081], + [-87.62361, 41.90234], + [-87.62479, 41.90571], + [-87.62538, 41.90798], + [-87.62567, 41.90941], + [-87.62582, 41.9119], + [-87.629, 41.91872], + [-87.62977, 41.9217], + [-87.63157, 41.9274], + [-87.63194, 41.92924], + [-87.63193, 41.93348], + [-87.63219, 41.93454], + [-87.63257, 41.93533], + [-87.633862, 41.936883], + [-87.63743, 41.9396], + [-87.6391, 41.9416], + [-87.64135, 41.9458], + [-87.64442, 41.95102], + [-87.64458, 41.95175], + [-87.64454, 41.95311], + [-87.64415, 41.95464], + [-87.64972, 41.95455], + [-87.649942, 41.96723], + [-87.650099, 41.969022], + [-87.649595, 41.96925], + [-87.65171, 41.97524] + ] + } + }, + { + "id": "32", + "type": "Feature", + "properties": { + "route_id": "136", + "shape_id": "64807385", + "direction": "South", + "trip_id": 21, + "route_short_name": "136", + "route_long_name": "Sheridan/LaSalle Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/136/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.660178, 41.998162], + [-87.65622, 41.99822], + [-87.65586, 41.99808], + [-87.65565, 41.99779], + [-87.65507, 41.97982], + [-87.65503, 41.97793], + [-87.65514, 41.977927], + [-87.65503, 41.97793], + [-87.65499, 41.97638], + [-87.65213, 41.97643], + [-87.6499, 41.97011], + [-87.64824, 41.96407], + [-87.64685, 41.96194], + [-87.646858, 41.960468], + [-87.64668, 41.95935], + [-87.64637, 41.95778], + [-87.64503, 41.954357], + [-87.644887, 41.951558], + [-87.64468, 41.950898], + [-87.642185, 41.946847], + [-87.639038, 41.941123], + [-87.637258, 41.939233], + [-87.633793, 41.936618], + [-87.632998, 41.93568], + [-87.632442, 41.934638], + [-87.632092, 41.933153], + [-87.632188, 41.929378], + [-87.632077, 41.9284], + [-87.630137, 41.922225], + [-87.629072, 41.918275], + [-87.626083, 41.912085], + [-87.625845, 41.908873], + [-87.624272, 41.902675], + [-87.623588, 41.90184], + [-87.622683, 41.901348], + [-87.62184, 41.901133], + [-87.620123, 41.901062], + [-87.619503, 41.900847], + [-87.615482, 41.89499], + [-87.614385, 41.893265], + [-87.61421, 41.892748], + [-87.614083, 41.89143], + [-87.614083, 41.88775], + [-87.61421, 41.887607], + [-87.620282, 41.887862], + [-87.623063, 41.888307], + [-87.62503, 41.888371], + [-87.625571, 41.88821], + [-87.62637, 41.887332], + [-87.626907, 41.886992], + [-87.632509, 41.886876], + [-87.632338, 41.879399], + [-87.633738, 41.879365], + [-87.633827, 41.879227], + [-87.633926, 41.879363], + [-87.636046, 41.879265] + ] + } + }, + { + "id": "33", + "type": "Feature", + "properties": { + "route_id": "96", + "shape_id": "64802107", + "direction": "East", + "trip_id": 22, + "route_short_name": "96", + "route_long_name": "Lunt", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/96/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.709578, 41.997923], + [-87.709435, 41.99786], + [-87.709578, 41.997438], + [-87.711628, 41.997502], + [-87.711507, 42.007748], + [-87.711569, 42.007839], + [-87.711676, 42.007871], + [-87.713186, 42.008029], + [-87.71361, 42.008485], + [-87.713312, 42.008866], + [-87.714149, 42.00934], + [-87.714543, 42.009317], + [-87.7152, 42.00881], + [-87.713841, 42.008694], + [-87.713621, 42.00818], + [-87.713023, 42.007774], + [-87.711963, 42.007736], + [-87.711684, 42.007756], + [-87.711562, 42.007817], + [-87.711531, 42.007833], + [-87.71129, 42.011781], + [-87.69985, 42.012022], + [-87.699708, 42.01195], + [-87.699755, 42.008628], + [-87.699517, 42.008422], + [-87.689773, 42.008485], + [-87.682605, 42.008787], + [-87.676232, 42.00877], + [-87.673968, 42.008691], + [-87.67366, 42.00777], + [-87.66562, 42.00791] + ] + } + }, + { + "id": "34", + "type": "Feature", + "properties": { + "route_id": "100", + "shape_id": "64800701", + "direction": "West", + "trip_id": 22, + "route_short_name": "100", + "route_long_name": "Jeffery Manor Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/100/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.52695, 41.691635], + [-87.526695, 41.691405], + [-87.52571, 41.69146], + [-87.525583, 41.700385], + [-87.525749, 41.702442], + [-87.52594, 41.702679], + [-87.559525, 41.702806], + [-87.559692, 41.713418], + [-87.560042, 41.713673], + [-87.560233, 41.713673], + [-87.560137, 41.713458], + [-87.561838, 41.713418], + [-87.564558, 41.713596], + [-87.564649, 41.722337], + [-87.564765, 41.722652], + [-87.5671, 41.722502], + [-87.582723, 41.722367], + [-87.585203, 41.722478], + [-87.59711, 41.72214], + [-87.621045, 41.721898], + [-87.623497, 41.721813], + [-87.623947, 41.721757], + [-87.623974, 41.721537] + ] + } + }, + { + "id": "35", + "type": "Feature", + "properties": { + "route_id": "100", + "shape_id": "64800703", + "direction": "East", + "trip_id": 23, + "route_short_name": "100", + "route_long_name": "Jeffery Manor Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/100/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.623978, 41.721364], + [-87.623983, 41.721629], + [-87.620807, 41.721755], + [-87.56489, 41.722582], + [-87.564732, 41.722478], + [-87.564572, 41.71357], + [-87.560725, 41.71357], + [-87.559947, 41.713482], + [-87.55966, 41.71326], + [-87.559677, 41.711957], + [-87.559852, 41.711908], + [-87.559587, 41.702785], + [-87.533263, 41.702687], + [-87.533049, 41.702682], + [-87.53299, 41.70242], + [-87.532862, 41.702658], + [-87.53132, 41.702642], + [-87.530843, 41.702633], + [-87.530605, 41.70238], + [-87.527028, 41.702317], + [-87.52687, 41.702213], + [-87.52695, 41.691658] + ] + } + }, + { + "id": "36", + "type": "Feature", + "properties": { + "route_id": "96", + "shape_id": "64702104", + "direction": "West", + "trip_id": 23, + "route_short_name": "96", + "route_long_name": "Lunt", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/96/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.665487, 42.007905], + [-87.6617, 42.00798], + [-87.661676, 42.008224], + [-87.66209, 42.00917], + [-87.662593, 42.009215], + [-87.68084, 42.008913], + [-87.682287, 42.009008], + [-87.689727, 42.008667], + [-87.699708, 42.008525], + [-87.699755, 42.011893], + [-87.699947, 42.012132], + [-87.711386, 42.011855], + [-87.711574, 42.011618], + [-87.711693, 42.007923], + [-87.712654, 42.007894], + [-87.7128, 42.007909], + [-87.712926, 42.007921], + [-87.713233, 42.008044], + [-87.713609, 42.008479], + [-87.713626, 42.008623], + [-87.713559, 42.00871], + [-87.713318, 42.008808], + [-87.713369, 42.008892], + [-87.71394, 42.009282], + [-87.714297, 42.009342], + [-87.714092, 42.00943], + [-87.714283, 42.009398], + [-87.714792, 42.009073], + [-87.714918, 42.008842], + [-87.71379, 42.00877], + [-87.713615, 42.008692], + [-87.713552, 42.008532], + [-87.713393, 42.008287], + [-87.712932, 42.007952], + [-87.712725, 42.007897], + [-87.712328, 42.00784], + [-87.711548, 42.007785], + [-87.711438, 42.00765], + [-87.71139, 42.005885], + [-87.711548, 42.004868], + [-87.711723, 42.004702], + [-87.711803, 42.002468], + [-87.711708, 41.997533], + [-87.71131, 41.997352], + [-87.710182, 41.997375], + [-87.710007, 41.997438], + [-87.709928, 41.99786], + [-87.709737, 41.997923] + ] + } + }, + { + "id": "37", + "type": "Feature", + "properties": { + "route_id": "135", + "shape_id": "64704510", + "direction": "North", + "trip_id": 23, + "route_short_name": "135", + "route_long_name": "Clarendon/LaSalle Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/135/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.635097, 41.878087], + [-87.6323, 41.87813], + [-87.632375, 41.886837], + [-87.62685, 41.88688], + [-87.62635, 41.88711], + [-87.62552, 41.88808], + [-87.62516, 41.88823], + [-87.622818, 41.888163], + [-87.6195, 41.88764], + [-87.61417, 41.88741], + [-87.61398, 41.88759], + [-87.61401, 41.89276], + [-87.61433, 41.89345], + [-87.61957, 41.90104], + [-87.62022, 41.90134], + [-87.62253, 41.90163], + [-87.62347, 41.90215], + [-87.62397, 41.90271], + [-87.62556, 41.90878], + [-87.62586, 41.91205], + [-87.62853, 41.91748], + [-87.629, 41.91872], + [-87.62977, 41.9217], + [-87.63183, 41.92832], + [-87.6319, 41.93312], + [-87.63219, 41.93454], + [-87.63293, 41.93587], + [-87.6336, 41.93665], + [-87.6369, 41.93916], + [-87.63808, 41.94055], + [-87.63954, 41.94012], + [-87.63961, 41.94144], + [-87.640421, 41.943311], + [-87.642411, 41.946974], + [-87.64487, 41.95103], + [-87.64501, 41.95175], + [-87.644955, 41.953181], + [-87.64525, 41.95463], + [-87.64972, 41.95455], + [-87.649927, 41.963633] + ] + } + }, + { + "id": "38", + "type": "Feature", + "properties": { + "route_id": "134", + "shape_id": "64804509", + "direction": "South", + "trip_id": 24, + "route_short_name": "134", + "route_long_name": "Stockton/LaSalle Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/134/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.639308, 41.938422], + [-87.639483, 41.938327], + [-87.639515, 41.937492], + [-87.63933, 41.93433], + [-87.639405, 41.933097], + [-87.63872, 41.93232], + [-87.63898, 41.93187], + [-87.63904, 41.931243], + [-87.63879, 41.93038], + [-87.63887, 41.92827], + [-87.638688, 41.927613], + [-87.637543, 41.926422], + [-87.636305, 41.925977], + [-87.635955, 41.925707], + [-87.631807, 41.92596], + [-87.631058, 41.924832], + [-87.630678, 41.923942], + [-87.629025, 41.918315], + [-87.626083, 41.912275], + [-87.625845, 41.90928], + [-87.624225, 41.902905], + [-87.623637, 41.902118], + [-87.622953, 41.901633], + [-87.621682, 41.901245], + [-87.62006, 41.901125], + [-87.61944, 41.900743], + [-87.614545, 41.893385], + [-87.614338, 41.892892], + [-87.614163, 41.891342], + [-87.614037, 41.88794], + [-87.614258, 41.887687], + [-87.619822, 41.887877], + [-87.622587, 41.888267], + [-87.62503, 41.888371], + [-87.625571, 41.88821], + [-87.62637, 41.887332], + [-87.626907, 41.886992], + [-87.632509, 41.886876], + [-87.632338, 41.879399], + [-87.633738, 41.879365], + [-87.633827, 41.879227], + [-87.633926, 41.879363], + [-87.636046, 41.879265] + ] + } + }, + { + "id": "39", + "type": "Feature", + "properties": { + "route_id": "5", + "shape_id": "64812429", + "direction": "West", + "trip_id": 24, + "route_short_name": "5", + "route_long_name": "South Shore Night Bus", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/5/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.626005, 41.769113], + [-87.613707, 41.769387], + [-87.61179, 41.77092], + [-87.61183, 41.77302], + [-87.57649, 41.77346], + [-87.57644, 41.77161], + [-87.57662, 41.771442], + [-87.576255, 41.767667], + [-87.576413, 41.766283], + [-87.576385, 41.764302], + [-87.57612, 41.75887], + [-87.56021, 41.759052], + [-87.557498, 41.76049], + [-87.55707, 41.760507], + [-87.548375, 41.752202], + [-87.548168, 41.751708], + [-87.54801, 41.74857], + [-87.547898, 41.744787], + [-87.55273, 41.744572], + [-87.55184, 41.743928], + [-87.55157, 41.742522], + [-87.55121, 41.72823], + [-87.55259, 41.72822], + [-87.55254, 41.727818], + [-87.55395, 41.72641], + [-87.55382, 41.72635], + [-87.55647, 41.72634], + [-87.556465, 41.726213], + [-87.55647, 41.72634], + [-87.55787, 41.72632], + [-87.557865, 41.726205], + [-87.55787, 41.72632], + [-87.560544, 41.726374], + [-87.563078, 41.726165], + [-87.566442, 41.726233], + [-87.567878, 41.72603], + [-87.574062, 41.725895], + [-87.577527, 41.725872], + [-87.57787, 41.72589], + [-87.57787, 41.72607], + [-87.579594, 41.72605], + [-87.581373, 41.725817], + [-87.585172, 41.725872], + [-87.585505, 41.725728], + [-87.585172, 41.723305], + [-87.585235, 41.722605], + [-87.585393, 41.722455], + [-87.59129, 41.722303], + [-87.594835, 41.722367], + [-87.594883, 41.725673], + [-87.595058, 41.72592], + [-87.604325, 41.725728], + [-87.604547, 41.725705], + [-87.604705, 41.72545], + [-87.60452, 41.72208], + [-87.606693, 41.72216], + [-87.624345, 41.721832] + ] + } + }, + { + "id": "40", + "type": "Feature", + "properties": { + "route_id": "1", + "shape_id": "64708085", + "direction": "North", + "trip_id": 26, + "route_short_name": "1", + "route_long_name": "Bronzeville/Union Station", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/1/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.621749, 41.831422], + [-87.621872, 41.838278], + [-87.622063, 41.838572], + [-87.622873, 41.8387], + [-87.623175, 41.839105], + [-87.623335, 41.845947], + [-87.62362, 41.847695], + [-87.623668, 41.853387], + [-87.623715, 41.85453], + [-87.62389, 41.854872], + [-87.623858, 41.858193], + [-87.624002, 41.858417], + [-87.624082, 41.866165], + [-87.623953, 41.869582], + [-87.62417, 41.87437], + [-87.624018, 41.877053], + [-87.624177, 41.879358], + [-87.624628, 41.879555], + [-87.62561, 41.879591], + [-87.641029, 41.879323], + [-87.641165, 41.879083], + [-87.641069, 41.878078], + [-87.640006, 41.878] + ] + } + }, + { + "id": "41", + "type": "Feature", + "properties": { + "route_id": "5", + "shape_id": "64812428", + "direction": "East", + "trip_id": 26, + "route_short_name": "5", + "route_long_name": "South Shore Night Bus", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/5/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.624616, 41.721618], + [-87.60469, 41.722048], + [-87.604403, 41.72228], + [-87.604497, 41.725428], + [-87.604357, 41.725705], + [-87.595042, 41.725817], + [-87.594898, 41.725705], + [-87.59482, 41.722303], + [-87.59447, 41.722113], + [-87.585123, 41.72239], + [-87.584997, 41.722542], + [-87.585077, 41.723687], + [-87.584885, 41.724417], + [-87.584917, 41.725848], + [-87.584742, 41.725992], + [-87.554082, 41.726357], + [-87.552652, 41.727597], + [-87.55259, 41.72822], + [-87.55121, 41.72823], + [-87.55149, 41.74264], + [-87.551808, 41.744143], + [-87.552508, 41.744492], + [-87.552523, 41.744627], + [-87.547883, 41.744787], + [-87.54793, 41.74903], + [-87.5482, 41.75223], + [-87.55559, 41.75899], + [-87.557102, 41.760545], + [-87.557467, 41.760507], + [-87.557642, 41.760228], + [-87.560211, 41.759088], + [-87.571472, 41.758916], + [-87.576127, 41.759003], + [-87.576302, 41.770082], + [-87.57643, 41.770242], + [-87.576525, 41.773293], + [-87.5767, 41.773523], + [-87.611843, 41.773037], + [-87.61179, 41.77092], + [-87.61377, 41.7694], + [-87.62513, 41.76925], + [-87.62511, 41.76886], + [-87.6257, 41.76878] + ] + } + }, + { + "id": "42", + "type": "Feature", + "properties": { + "route_id": "31", + "shape_id": "64808128", + "direction": "East", + "trip_id": 26, + "route_short_name": "31", + "route_long_name": "31st", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/31/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.665346, 41.83917], + [-87.665842, 41.838704], + [-87.665806, 41.837869], + [-87.66566, 41.837793], + [-87.665317, 41.837849], + [-87.662981, 41.839183], + [-87.661198, 41.839986], + [-87.659424, 41.837965], + [-87.65918, 41.837864], + [-87.631776, 41.838213], + [-87.631647, 41.837492], + [-87.631544, 41.83119], + [-87.631285, 41.83087], + [-87.62648, 41.83101], + [-87.626537, 41.838279], + [-87.613502, 41.83843], + [-87.613455, 41.834734], + [-87.614449, 41.834676], + [-87.614504, 41.833682], + [-87.615187, 41.833662] + ] + } + }, + { + "id": "43", + "type": "Feature", + "properties": { + "route_id": "48", + "shape_id": "64707804", + "direction": "North", + "trip_id": 26, + "route_short_name": "48", + "route_long_name": "South Damen", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/48/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.672862, 41.736355], + [-87.672672, 41.736418], + [-87.672623, 41.737277], + [-87.67335, 41.75788], + [-87.673577, 41.771935], + [-87.67399, 41.78216], + [-87.67464, 41.8085], + [-87.68442, 41.80842], + [-87.68435, 41.80574], + [-87.68378, 41.80567], + [-87.68378, 41.80551] + ] + } + }, + { + "id": "44", + "type": "Feature", + "properties": { + "route_id": "148", + "shape_id": "64806402", + "direction": "South", + "trip_id": 26, + "route_short_name": "148", + "route_long_name": "Clarendon Michigan Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/148/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.651628, 41.974876], + [-87.64964, 41.96917], + [-87.65013, 41.96915], + [-87.650132, 41.965808], + [-87.649963, 41.965541], + [-87.650037, 41.963702], + [-87.649783, 41.959943], + [-87.649687, 41.95477], + [-87.649402, 41.954603], + [-87.645523, 41.954673], + [-87.645142, 41.954515], + [-87.644728, 41.951058], + [-87.639245, 41.94137], + [-87.637543, 41.939423], + [-87.633888, 41.936633], + [-87.632648, 41.935028], + [-87.63214, 41.933392], + [-87.632188, 41.929322], + [-87.63187, 41.927598], + [-87.629057, 41.918132], + [-87.626083, 41.91187], + [-87.625877, 41.908873], + [-87.62467, 41.903485], + [-87.624082, 41.902078], + [-87.624065, 41.899297], + [-87.624275, 41.899166], + [-87.62419, 41.89791], + [-87.624406, 41.895914], + [-87.6242, 41.88988], + [-87.62457, 41.88831], + [-87.625061, 41.888387], + [-87.62546, 41.88823], + [-87.6264, 41.88725], + [-87.62678, 41.88705], + [-87.62806, 41.88694], + [-87.627685, 41.874996] + ] + } + }, + { + "id": "45", + "type": "Feature", + "properties": { + "route_id": "48", + "shape_id": "64707805", + "direction": "South", + "trip_id": 27, + "route_short_name": "48", + "route_long_name": "South Damen", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/48/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.6841, 41.80513], + [-87.684292, 41.805577], + [-87.684305, 41.80838], + [-87.682048, 41.80838], + [-87.682002, 41.808508], + [-87.680682, 41.808547], + [-87.674722, 41.808443], + [-87.673903, 41.775525], + [-87.67371, 41.7724], + [-87.67371, 41.77182], + [-87.67382, 41.77182], + [-87.6737, 41.77173], + [-87.673718, 41.768175], + [-87.67352, 41.7648], + [-87.67352, 41.76456], + [-87.673631, 41.764561], + [-87.67351, 41.76435], + [-87.673377, 41.759203], + [-87.673485, 41.758825], + [-87.67337, 41.75883], + [-87.67327, 41.75569], + [-87.673374, 41.755436], + [-87.67327, 41.75544], + [-87.672836, 41.73644], + [-87.673118, 41.736266], + [-87.673007, 41.736163] + ] + } + }, + { + "id": "46", + "type": "Feature", + "properties": { + "route_id": "31", + "shape_id": "64708125", + "direction": "West", + "trip_id": 27, + "route_short_name": "31", + "route_long_name": "31st", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/31/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.615328, 41.833663], + [-87.616999, 41.833704], + [-87.61708, 41.837915], + [-87.617219, 41.838439], + [-87.62679, 41.838241], + [-87.626647, 41.831094], + [-87.629551, 41.830995], + [-87.629826, 41.831076], + [-87.629975, 41.837653], + [-87.630008, 41.838175], + [-87.630244, 41.838295], + [-87.659277, 41.837901], + [-87.661202, 41.840083], + [-87.665526, 41.837941], + [-87.665668, 41.838109], + [-87.665636, 41.83889], + [-87.665381, 41.838916], + [-87.664971, 41.83848], + [-87.664711, 41.838664], + [-87.665014, 41.839118], + [-87.665306, 41.839174] + ] + } + }, + { + "id": "47", + "type": "Feature", + "properties": { + "route_id": "125", + "shape_id": "64702862", + "direction": "South", + "trip_id": 27, + "route_short_name": "125", + "route_long_name": "Water Tower Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/125/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.622394, 41.898472], + [-87.62419, 41.89839], + [-87.624406, 41.895914], + [-87.624374, 41.893379], + [-87.63408, 41.893114], + [-87.633942, 41.888893], + [-87.633949, 41.888306], + [-87.634143, 41.888315], + [-87.63411, 41.887018], + [-87.635637, 41.886947], + [-87.63675, 41.886263], + [-87.63713, 41.885692], + [-87.637178, 41.88469], + [-87.63702, 41.88469], + [-87.637067, 41.88454], + [-87.640977, 41.88442], + [-87.641105, 41.883443], + [-87.641319, 41.883232], + [-87.641063, 41.87683], + [-87.643923, 41.876717], + [-87.643912, 41.875104], + [-87.644343, 41.874511] + ] + } + }, + { + "id": "48", + "type": "Feature", + "properties": { + "route_id": "1", + "shape_id": "64806351", + "direction": "South", + "trip_id": 28, + "route_short_name": "1", + "route_long_name": "Bronzeville/Union Station", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/1/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.640008, 41.878012], + [-87.6244, 41.87829], + [-87.62418, 41.86931], + [-87.624232, 41.865511], + [-87.62408, 41.8646], + [-87.624033, 41.859975], + [-87.62389, 41.85933], + [-87.623922, 41.85771], + [-87.62405, 41.85763], + [-87.623907, 41.857463], + [-87.623875, 41.856883], + [-87.623843, 41.85004], + [-87.623715, 41.849173], + [-87.62329, 41.83288] + ] + } + }, + { + "id": "49", + "type": "Feature", + "properties": { + "route_id": "24", + "shape_id": "64806772", + "direction": "North", + "trip_id": 28, + "route_short_name": "24", + "route_long_name": "Wentworth", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/24/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.653073, 41.736568], + [-87.653137, 41.736847], + [-87.653312, 41.736775], + [-87.653217, 41.735997], + [-87.653073, 41.735942], + [-87.64457, 41.73606], + [-87.64306, 41.735942], + [-87.632804, 41.735982], + [-87.632354, 41.736641], + [-87.632322, 41.737358], + [-87.631914, 41.738793], + [-87.632049, 41.743459], + [-87.632298, 41.74365], + [-87.63229, 41.74353], + [-87.6343, 41.74353], + [-87.63594, 41.74415], + [-87.633348, 41.753807], + [-87.630423, 41.759823], + [-87.629597, 41.761952], + [-87.630852, 41.808833], + [-87.630678, 41.809557], + [-87.629898, 41.810725], + [-87.62966, 41.810868], + [-87.629232, 41.81171], + [-87.629278, 41.816217], + [-87.629438, 41.81659], + [-87.63009, 41.843388], + [-87.630375, 41.843977], + [-87.631742, 41.845017], + [-87.632092, 41.847537], + [-87.631822, 41.84826], + [-87.63203, 41.85278], + [-87.63179, 41.85278], + [-87.631711, 41.853129], + [-87.63182, 41.8543], + [-87.63015, 41.85514], + [-87.63009, 41.855667], + [-87.630604, 41.874431], + [-87.629146, 41.874603], + [-87.629525, 41.886859], + [-87.631022, 41.886923], + [-87.631043, 41.885603] + ] + } + }, + { + "id": "50", + "type": "Feature", + "properties": { + "route_id": "108", + "shape_id": "64800729", + "direction": "South", + "trip_id": 32, + "route_short_name": "108", + "route_long_name": "Halsted/95th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/108/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.624018, 41.722043], + [-87.62401, 41.72179], + [-87.641105, 41.721612], + [-87.643123, 41.721517], + [-87.643377, 41.721223], + [-87.643082, 41.708962], + [-87.642822, 41.708698], + [-87.64279, 41.707927], + [-87.642917, 41.704892], + [-87.642138, 41.68058], + [-87.64182, 41.675447], + [-87.641932, 41.674207], + [-87.641613, 41.663605], + [-87.64147, 41.66219], + [-87.641343, 41.662055], + [-87.639388, 41.662523] + ] + } + }, + { + "id": "51", + "type": "Feature", + "properties": { + "route_id": "108", + "shape_id": "64800731", + "direction": "North", + "trip_id": 36, + "route_short_name": "108", + "route_long_name": "Halsted/95th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/108/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.639228, 41.662555], + [-87.637862, 41.662968], + [-87.63764, 41.663287], + [-87.641295, 41.663318], + [-87.641375, 41.663462], + [-87.64182, 41.679468], + [-87.642138, 41.685643], + [-87.642583, 41.70497], + [-87.642742, 41.70582], + [-87.64279, 41.714498], + [-87.642948, 41.714777], + [-87.64306, 41.716883], + [-87.64306, 41.717615], + [-87.642917, 41.717662], + [-87.643012, 41.721413], + [-87.64093, 41.721333], + [-87.64031, 41.721477], + [-87.624829, 41.721645], + [-87.624845, 41.722774], + [-87.624019, 41.722782], + [-87.624018, 41.722228] + ] + } + }, + { + "id": "52", + "type": "Feature", + "properties": { + "route_id": "37", + "shape_id": "64807175", + "direction": "North", + "trip_id": 38, + "route_short_name": "37", + "route_long_name": "Sedgwick", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/37/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.640867, 41.875312], + [-87.640977, 41.875265], + [-87.640935, 41.874416], + [-87.639492, 41.87441], + [-87.639563, 41.876703], + [-87.639431, 41.878019], + [-87.635147, 41.878151], + [-87.635311, 41.88686], + [-87.636589, 41.888263], + [-87.636977, 41.888944], + [-87.636961, 41.894681], + [-87.637368, 41.898725], + [-87.637264, 41.899368], + [-87.637372, 41.902225], + [-87.637592, 41.904058], + [-87.637703, 41.904185], + [-87.63837, 41.904208], + [-87.638402, 41.90436], + [-87.638768, 41.918268], + [-87.638958, 41.91861], + [-87.639515, 41.919038], + [-87.64387, 41.921955], + [-87.645842, 41.921907], + [-87.646143, 41.922035], + [-87.646238, 41.921868], + [-87.646667, 41.921828], + [-87.653392, 41.921797], + [-87.653533, 41.921915], + [-87.653598, 41.925325], + [-87.652803, 41.925348] + ] + } + }, + { + "id": "53", + "type": "Feature", + "properties": { + "route_id": "37", + "shape_id": "64807174", + "direction": "South", + "trip_id": 38, + "route_short_name": "37", + "route_long_name": "Sedgwick", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/37/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.65314, 41.925355], + [-87.648686, 41.925401], + [-87.6388, 41.918243], + [-87.638562, 41.909398], + [-87.638402, 41.908818], + [-87.638402, 41.90715], + [-87.63853, 41.906783], + [-87.638355, 41.905727], + [-87.638433, 41.90405], + [-87.638292, 41.90374], + [-87.63764, 41.90366], + [-87.637592, 41.903525], + [-87.637178, 41.896738], + [-87.636942, 41.896495], + [-87.63425, 41.896448], + [-87.634143, 41.891803], + [-87.633949, 41.891071], + [-87.633872, 41.88597], + [-87.633705, 41.885872], + [-87.633956, 41.885662], + [-87.633731, 41.876902], + [-87.640984, 41.876773], + [-87.640953, 41.87536] + ] + } + }, + { + "id": "54", + "type": "Feature", + "properties": { + "route_id": "26", + "shape_id": "64808119", + "direction": "South", + "trip_id": 39, + "route_short_name": "26", + "route_long_name": "South Shore Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/26/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.621702, 41.896828], + [-87.62433, 41.89672], + [-87.62435, 41.89655], + [-87.6242, 41.88988], + [-87.62464, 41.88776], + [-87.624277, 41.873317], + [-87.624085, 41.873144], + [-87.620594, 41.873238], + [-87.6206, 41.869177], + [-87.620522, 41.86781], + [-87.620315, 41.867008], + [-87.618248, 41.861333], + [-87.613972, 41.851748], + [-87.608488, 41.83827], + [-87.608138, 41.836848], + [-87.608012, 41.834813], + [-87.607455, 41.833057], + [-87.604865, 41.8296], + [-87.601797, 41.827033], + [-87.600955, 41.826143], + [-87.598587, 41.821413], + [-87.593818, 41.815152], + [-87.590353, 41.812258], + [-87.58816, 41.809462], + [-87.585425, 41.806537], + [-87.582883, 41.804843], + [-87.58177, 41.803557], + [-87.581483, 41.802713], + [-87.581373, 41.799647], + [-87.581213, 41.799003], + [-87.580673, 41.79801], + [-87.57937, 41.796627], + [-87.579068, 41.795815], + [-87.579212, 41.794807], + [-87.580228, 41.792963], + [-87.580117, 41.79154], + [-87.579275, 41.790222], + [-87.578115, 41.789085], + [-87.577908, 41.788488], + [-87.577702, 41.786685], + [-87.577257, 41.785158], + [-87.57592, 41.7826], + [-87.57492, 41.781208], + [-87.574713, 41.780557], + [-87.574823, 41.779882], + [-87.575618, 41.778665], + [-87.575857, 41.777982], + [-87.575778, 41.777123], + [-87.575222, 41.775883], + [-87.575253, 41.775288], + [-87.575523, 41.774748], + [-87.576302, 41.773977], + [-87.576445, 41.773428], + [-87.57546, 41.773317], + [-87.57538, 41.77346], + [-87.566813, 41.773477], + [-87.56667, 41.773142], + [-87.566463, 41.766458], + [-87.566082, 41.766275], + [-87.563078, 41.76634], + [-87.56268, 41.766188], + [-87.557182, 41.760545], + [-87.550108, 41.753982], + [-87.548375, 41.752202], + [-87.548168, 41.751708], + [-87.548058, 41.749912], + [-87.547898, 41.745588], + [-87.54801, 41.744683], + [-87.551252, 41.74473], + [-87.55273, 41.744572], + [-87.55184, 41.743928], + [-87.55157, 41.742522], + [-87.551348, 41.731928], + [-87.551188, 41.730123], + [-87.542972, 41.730123], + [-87.542908, 41.728343], + [-87.540842, 41.726785], + [-87.540428, 41.72661], + [-87.54003, 41.72669], + [-87.539315, 41.726262], + [-87.535342, 41.72135], + [-87.535327, 41.7028], + [-87.559525, 41.702806], + [-87.559592, 41.70805], + [-87.559732, 41.70821], + [-87.580117, 41.707982], + [-87.580515, 41.708038], + [-87.580785, 41.708492], + [-87.58115, 41.708762], + [-87.58177, 41.708848], + [-87.582215, 41.70873], + [-87.582263, 41.708587], + [-87.580937, 41.708492] + ] + } + }, + { + "id": "55", + "type": "Feature", + "properties": { + "route_id": "26", + "shape_id": "64808121", + "direction": "North", + "trip_id": 39, + "route_short_name": "26", + "route_long_name": "South Shore Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/26/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.580936, 41.708365], + [-87.580657, 41.707872], + [-87.579513, 41.707775], + [-87.56592, 41.708131], + [-87.559783, 41.70814], + [-87.559669, 41.703169], + [-87.559486, 41.702738], + [-87.53529, 41.70273], + [-87.5352, 41.72133], + [-87.5362, 41.722515], + [-87.536217, 41.722757], + [-87.536405, 41.722788], + [-87.53927, 41.72632], + [-87.54199, 41.72778], + [-87.54252, 41.72826], + [-87.54274, 41.72864], + [-87.5429, 41.73017], + [-87.550515, 41.73007], + [-87.551142, 41.73014], + [-87.551252, 41.730282], + [-87.55149, 41.742283], + [-87.55173, 41.743872], + [-87.552523, 41.744627], + [-87.547883, 41.744787], + [-87.547962, 41.750373], + [-87.5482, 41.75223], + [-87.55559, 41.75899], + [-87.562553, 41.766102], + [-87.56295, 41.76631], + [-87.56645, 41.76631], + [-87.56663, 41.77305], + [-87.56683, 41.77356], + [-87.576333, 41.773445], + [-87.576127, 41.773953], + [-87.575253, 41.774795], + [-87.57503, 41.775248], + [-87.57503, 41.775868], + [-87.575618, 41.777283], + [-87.575667, 41.778133], + [-87.574728, 41.779778], + [-87.574617, 41.780485], + [-87.574935, 41.781335], + [-87.576287, 41.78306], + [-87.577272, 41.785278], + [-87.577605, 41.786358], + [-87.578067, 41.78906], + [-87.579275, 41.790363], + [-87.58007, 41.791588], + [-87.580148, 41.793098], + [-87.579258, 41.794807], + [-87.579132, 41.79576], + [-87.579482, 41.796707], + [-87.580737, 41.798048], + [-87.581277, 41.79901], + [-87.581483, 41.799853], + [-87.58158, 41.802682], + [-87.581913, 41.803707], + [-87.582422, 41.804478], + [-87.583137, 41.805162], + [-87.585663, 41.80695], + [-87.590322, 41.8126], + [-87.592673, 41.81442], + [-87.593818, 41.815502], + [-87.598237, 41.821287], + [-87.600923, 41.826317], + [-87.601892, 41.827358], + [-87.604833, 41.829957], + [-87.606407, 41.83188], + [-87.607408, 41.83339], + [-87.607822, 41.83467], + [-87.608203, 41.837937], + [-87.611095, 41.844985], + [-87.613575, 41.852647], + [-87.615513, 41.855833], + [-87.616658, 41.858178], + [-87.618088, 41.861278], + [-87.619138, 41.864718], + [-87.619647, 41.865395], + [-87.620362, 41.867962], + [-87.620648, 41.873207], + [-87.623907, 41.87327], + [-87.62413, 41.87316], + [-87.624128, 41.878118], + [-87.624336, 41.880424], + [-87.624145, 41.882448], + [-87.62445, 41.88642], + [-87.62442, 41.888283], + [-87.624028, 41.890817], + [-87.62418, 41.89673], + [-87.620719, 41.896747] + ] + } + }, + { + "id": "56", + "type": "Feature", + "properties": { + "route_id": "156", + "shape_id": "64808106", + "direction": "South", + "trip_id": 42, + "route_short_name": "156", + "route_long_name": "LaSalle", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/156/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.648926, 41.940056], + [-87.648666, 41.939892], + [-87.63954, 41.94012], + [-87.639405, 41.933097], + [-87.63872, 41.93232], + [-87.63898, 41.93187], + [-87.63904, 41.931243], + [-87.638791, 41.930444], + [-87.638907, 41.928011], + [-87.638415, 41.927219], + [-87.637673, 41.926481], + [-87.636149, 41.925869], + [-87.6358, 41.92481], + [-87.635794, 41.922192], + [-87.6356, 41.92017], + [-87.63457, 41.91887], + [-87.63424, 41.91733], + [-87.63396, 41.91671], + [-87.63297, 41.91564], + [-87.63269, 41.91502], + [-87.63191, 41.91426], + [-87.63172, 41.91382], + [-87.63171, 41.91347], + [-87.6331, 41.91304], + [-87.633317, 41.91241], + [-87.632347, 41.879409], + [-87.641091, 41.87929], + [-87.641043, 41.877837], + [-87.640115, 41.877697] + ] + } + }, + { + "id": "57", + "type": "Feature", + "properties": { + "route_id": "10", + "shape_id": "64808222", + "direction": "South", + "trip_id": 42, + "route_short_name": "10", + "route_long_name": "Museum of S & I", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/10/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.622394, 41.898472], + [-87.62419, 41.89839], + [-87.624406, 41.895914], + [-87.6242, 41.88988], + [-87.62457, 41.88831], + [-87.625061, 41.888387], + [-87.62546, 41.88823], + [-87.6264, 41.88725], + [-87.62678, 41.88705], + [-87.62806, 41.88694], + [-87.627569, 41.873037], + [-87.620594, 41.873238], + [-87.620648, 41.870012], + [-87.620505, 41.867492], + [-87.61874, 41.862462], + [-87.613687, 41.851082], + [-87.608568, 41.83854], + [-87.608138, 41.83703], + [-87.608012, 41.83475], + [-87.607408, 41.832945], + [-87.604802, 41.829528], + [-87.601527, 41.826787], + [-87.600907, 41.826087], + [-87.598633, 41.821462], + [-87.594025, 41.81539], + [-87.592975, 41.814348], + [-87.59056, 41.812402], + [-87.588192, 41.80943], + [-87.585792, 41.806855], + [-87.582787, 41.804717], + [-87.581865, 41.80354], + [-87.581563, 41.802618], + [-87.581373, 41.79917], + [-87.580705, 41.79793], + [-87.579385, 41.796492], + [-87.579163, 41.79541], + [-87.57937, 41.794743], + [-87.580148, 41.793447], + [-87.580387, 41.79259], + [-87.580753, 41.79247], + [-87.581707, 41.792637], + [-87.583662, 41.792613], + [-87.583852, 41.792525], + [-87.58382, 41.791738] + ] + } + }, + { + "id": "58", + "type": "Feature", + "properties": { + "route_id": "X9", + "shape_id": "64808470", + "direction": "North", + "trip_id": 44, + "route_short_name": "X9", + "route_long_name": "Ashland Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/X9/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.66296, 41.720523], + [-87.66288, 41.720397], + [-87.66261, 41.720595], + [-87.6628, 41.721565], + [-87.662612, 41.722025], + [-87.66323, 41.74144], + [-87.663802, 41.76897], + [-87.664103, 41.778903], + [-87.664247, 41.77884], + [-87.664135, 41.77946], + [-87.664295, 41.786968], + [-87.665662, 41.837618], + [-87.66557, 41.838717], + [-87.665153, 41.838827], + [-87.664921, 41.838551], + [-87.664705, 41.838704], + [-87.66508, 41.839209], + [-87.665675, 41.839141], + [-87.665713, 41.839857], + [-87.665995, 41.857995], + [-87.666218, 41.866483], + [-87.666345, 41.866713], + [-87.666187, 41.866802], + [-87.666557, 41.873978], + [-87.666503, 41.876672], + [-87.66714, 41.896302], + [-87.667546, 41.904001], + [-87.66766, 41.917138], + [-87.668091, 41.918714], + [-87.668544, 41.921564], + [-87.66801, 41.924279], + [-87.668538, 41.937325], + [-87.668953, 41.954008], + [-87.66893, 41.95426], + [-87.66878, 41.9543], + [-87.65454, 41.9545], + [-87.65449, 41.95267], + [-87.64965, 41.95274], + [-87.6497, 41.95335], + [-87.65057, 41.95457], + [-87.65186, 41.95452] + ] + } + }, + { + "id": "59", + "type": "Feature", + "properties": { + "route_id": "86", + "shape_id": "64710905", + "direction": "South", + "trip_id": 45, + "route_short_name": "86", + "route_long_name": "Narragansett/Ridgeland", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/86/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.789242, 41.999218], + [-87.789385, 41.999075], + [-87.78929, 41.998773], + [-87.787525, 41.996707], + [-87.78805, 41.972142], + [-87.78805, 41.964838], + [-87.787843, 41.96425], + [-87.787128, 41.963353], + [-87.786937, 41.962748], + [-87.78611, 41.938398], + [-87.785935, 41.937627], + [-87.786032, 41.93665], + [-87.785682, 41.932183], + [-87.785618, 41.925778], + [-87.785427, 41.920302], + [-87.785283, 41.919707], + [-87.785, 41.90915], + [-87.78335, 41.90916], + [-87.783282, 41.905917], + [-87.783552, 41.905583], + [-87.784203, 41.903685], + [-87.784203, 41.90204], + [-87.784823, 41.9018], + [-87.785077, 41.901197], + [-87.784712, 41.888807], + [-87.784648, 41.888275], + [-87.78449, 41.888178], + [-87.782613, 41.888227] + ] + } + }, + { + "id": "60", + "type": "Feature", + "properties": { + "route_id": "86", + "shape_id": "64703527", + "direction": "North", + "trip_id": 47, + "route_short_name": "86", + "route_long_name": "Narragansett/Ridgeland", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/86/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.782567, 41.888218], + [-87.780023, 41.888155], + [-87.779753, 41.888012], + [-87.7798, 41.887043], + [-87.784283, 41.886955], + [-87.784585, 41.887035], + [-87.7846, 41.887178], + [-87.785045, 41.901125], + [-87.784823, 41.9018], + [-87.784108, 41.901943], + [-87.784123, 41.903827], + [-87.783233, 41.906045], + [-87.783233, 41.907228], + [-87.783472, 41.909208], + [-87.78495, 41.909255], + [-87.784998, 41.909407], + [-87.785237, 41.91996], + [-87.785395, 41.921685], + [-87.785363, 41.92534], + [-87.785808, 41.938223], + [-87.785983, 41.938717], + [-87.786222, 41.944812], + [-87.786158, 41.947387], + [-87.78654, 41.956415], + [-87.786825, 41.958235], + [-87.787763, 41.957957], + [-87.788145, 41.95806], + [-87.78991, 41.957567], + [-87.790068, 41.957655], + [-87.79064, 41.959363], + [-87.790402, 41.959975], + [-87.790227, 41.96007], + [-87.787207, 41.960182], + [-87.786825, 41.960285], + [-87.786747, 41.960635], + [-87.786937, 41.963193], + [-87.787812, 41.96437], + [-87.787938, 41.964863], + [-87.787987, 41.971538], + [-87.787763, 41.976322], + [-87.787843, 41.977897], + [-87.78743, 41.996668], + [-87.787477, 41.996953], + [-87.789003, 41.998837], + [-87.788665, 41.999034], + [-87.788705, 41.999228], + [-87.789077, 41.999278] + ] + } + }, + { + "id": "61", + "type": "Feature", + "properties": { + "route_id": "X9", + "shape_id": "64804658", + "direction": "South", + "trip_id": 48, + "route_short_name": "X9", + "route_long_name": "Ashland Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/X9/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.651869, 41.954582], + [-87.66898, 41.95436], + [-87.6691, 41.95435], + [-87.669127, 41.953983], + [-87.66822, 41.924912], + [-87.66822, 41.924133], + [-87.668697, 41.921383], + [-87.668317, 41.918887], + [-87.667855, 41.917172], + [-87.667807, 41.910702], + [-87.667362, 41.897192], + [-87.667442, 41.895665], + [-87.667298, 41.894608], + [-87.667267, 41.891232], + [-87.667155, 41.891215], + [-87.666561, 41.867121], + [-87.66625, 41.86247], + [-87.665915, 41.83924], + [-87.665742, 41.838818], + [-87.66555, 41.838778], + [-87.665328, 41.838818], + [-87.664852, 41.838493], + [-87.66474, 41.838603], + [-87.665025, 41.839057], + [-87.66536, 41.839097], + [-87.665625, 41.838935], + [-87.665694, 41.838838], + [-87.665731, 41.838782], + [-87.665788, 41.838715], + [-87.665837, 41.83854], + [-87.665742, 41.830633], + [-87.665234, 41.818616], + [-87.664548, 41.787615], + [-87.664291, 41.787229], + [-87.664323, 41.786685], + [-87.664517, 41.786502], + [-87.66439, 41.779675], + [-87.664183, 41.778452], + [-87.664057, 41.774795], + [-87.66323, 41.735497], + [-87.66307, 41.734877], + [-87.662897, 41.72925], + [-87.662768, 41.722208], + [-87.662943, 41.720635] + ] + } + }, + { + "id": "63", + "type": "Feature", + "properties": { + "route_id": "X49", + "shape_id": "64807873", + "direction": "North", + "trip_id": 50, + "route_short_name": "X49", + "route_long_name": "Western Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/X49/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.68251, 41.750993], + [-87.682748, 41.750985], + [-87.683028, 41.759701], + [-87.684305, 41.804478], + [-87.684132, 41.805368], + [-87.684305, 41.80571], + [-87.684417, 41.808325], + [-87.684465, 41.814587], + [-87.68491, 41.82832], + [-87.684973, 41.832698], + [-87.684448, 41.834423], + [-87.684448, 41.835752], + [-87.685068, 41.838907], + [-87.68561, 41.85004], + [-87.686133, 41.875997], + [-87.686913, 41.897915], + [-87.687103, 41.910528], + [-87.68785, 41.93175], + [-87.687951, 41.940235], + [-87.688963, 41.97614], + [-87.689202, 41.978135], + [-87.689948, 41.978325], + [-87.689933, 41.978477], + [-87.68971, 41.978483] + ] + } + }, + { + "id": "64", + "type": "Feature", + "properties": { + "route_id": "X49", + "shape_id": "64807871", + "direction": "South", + "trip_id": 52, + "route_short_name": "X49", + "route_long_name": "Western Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/X49/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.689472, 41.97846], + [-87.689313, 41.978262], + [-87.688677, 41.959538], + [-87.688073, 41.932398], + [-87.687453, 41.915875], + [-87.68766, 41.913658], + [-87.687405, 41.912157], + [-87.687135, 41.905377], + [-87.68642, 41.87521], + [-87.68572, 41.855055], + [-87.6858, 41.851177], + [-87.685642, 41.845828], + [-87.685418, 41.843412], + [-87.685292, 41.838803], + [-87.684655, 41.835623], + [-87.684655, 41.834368], + [-87.685117, 41.832993], + [-87.685148, 41.832287], + [-87.684528, 41.808388], + [-87.684349, 41.805483], + [-87.683957, 41.805368], + [-87.683999, 41.805006], + [-87.684369, 41.804802], + [-87.684115, 41.795688], + [-87.68421, 41.79386], + [-87.68297, 41.75143], + [-87.682923, 41.75104], + [-87.682525, 41.750898] + ] + } + }, + { + "id": "65", + "type": "Feature", + "properties": { + "route_id": "10", + "shape_id": "64808223", + "direction": "North", + "trip_id": 53, + "route_short_name": "10", + "route_long_name": "Museum of S & I", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/10/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.583613, 41.791732], + [-87.582135, 41.791747], + [-87.58204, 41.79255], + [-87.581865, 41.792605], + [-87.5808, 41.792318], + [-87.580323, 41.792383], + [-87.579863, 41.793718], + [-87.579052, 41.79522], + [-87.579068, 41.79599], + [-87.579385, 41.796738], + [-87.580705, 41.798048], + [-87.581277, 41.799003], + [-87.581468, 41.799822], + [-87.581563, 41.802713], + [-87.581977, 41.803795], + [-87.58293, 41.804907], + [-87.58568, 41.806902], + [-87.590115, 41.812433], + [-87.593612, 41.815278], + [-87.598188, 41.821263], + [-87.600892, 41.826357], + [-87.604595, 41.829718], + [-87.607138, 41.833065], + [-87.607693, 41.834607], + [-87.607868, 41.836952], + [-87.608138, 41.838103], + [-87.611095, 41.844938], + [-87.613638, 41.85275], + [-87.61534, 41.855508], + [-87.61704, 41.858988], + [-87.618088, 41.861278], + [-87.61909, 41.864807], + [-87.619695, 41.865617], + [-87.620315, 41.867867], + [-87.62068, 41.873293], + [-87.627525, 41.8732], + [-87.62791, 41.88683], + [-87.62446, 41.88682], + [-87.6244, 41.888348], + [-87.623993, 41.890132], + [-87.62418, 41.89673], + [-87.62183, 41.89677], + [-87.62186, 41.89842], + [-87.6221, 41.89842] + ] + } + }, + { + "id": "66", + "type": "Feature", + "properties": { + "route_id": "157", + "shape_id": "64714132", + "direction": "East", + "trip_id": 54, + "route_short_name": "157", + "route_long_name": "Streeterville/Taylor", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/157/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.72454, 41.854037], + [-87.7241, 41.85403], + [-87.72397, 41.85386], + [-87.72409, 41.85369], + [-87.7248, 41.85368], + [-87.72475, 41.85146], + [-87.72345, 41.85151], + [-87.717303, 41.853537], + [-87.705605, 41.857862], + [-87.700915, 41.859298], + [-87.696105, 41.86105], + [-87.69574, 41.86106], + [-87.695862, 41.861047], + [-87.69574, 41.86106], + [-87.69574, 41.86132], + [-87.69326, 41.86219], + [-87.69326, 41.86204], + [-87.693117, 41.862052], + [-87.686015, 41.864687], + [-87.686007, 41.868907], + [-87.685848, 41.869002], + [-87.68065, 41.869153], + [-87.677795, 41.871434], + [-87.669207, 41.871642], + [-87.669015, 41.87141], + [-87.668968, 41.8694], + [-87.668602, 41.869265], + [-87.63916, 41.869727], + [-87.639266, 41.871901], + [-87.639802, 41.876307], + [-87.639557, 41.877014], + [-87.639817, 41.877203], + [-87.63996, 41.878572], + [-87.63996, 41.878952], + [-87.63961, 41.878873], + [-87.639694, 41.883107], + [-87.624296, 41.883278], + [-87.62447, 41.88801], + [-87.623993, 41.890132], + [-87.62412, 41.89244], + [-87.62405, 41.89255], + [-87.620177, 41.892638], + [-87.62035, 41.89679], + [-87.621749, 41.896817], + [-87.621835, 41.899176], + [-87.620274, 41.89924], + [-87.620138, 41.898427], + [-87.61844, 41.898439] + ] + } + }, + { + "id": "67", + "type": "Feature", + "properties": { + "route_id": "156", + "shape_id": "64808110", + "direction": "North", + "trip_id": 54, + "route_short_name": "156", + "route_long_name": "LaSalle", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/156/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.639994, 41.877677], + [-87.639589, 41.877752], + [-87.639581, 41.878033], + [-87.632867, 41.878101], + [-87.632282, 41.878167], + [-87.632209, 41.878327], + [-87.633057, 41.912366], + [-87.63302, 41.912901], + [-87.631641, 41.913436], + [-87.631781, 41.914106], + [-87.634, 41.916647], + [-87.634635, 41.918895], + [-87.635557, 41.92008], + [-87.6357, 41.924387], + [-87.635955, 41.925603], + [-87.637893, 41.92662], + [-87.638498, 41.92732], + [-87.638737, 41.927932], + [-87.638657, 41.930443], + [-87.638737, 41.931182], + [-87.639001, 41.931531], + [-87.638719, 41.932358], + [-87.639304, 41.932918], + [-87.63954, 41.94012], + [-87.64418, 41.940056], + [-87.64441, 41.940162], + [-87.646763, 41.940098], + [-87.647017, 41.940147], + [-87.64778, 41.940098], + [-87.648655, 41.940098], + [-87.648893, 41.940123], + [-87.649083, 41.940123], + [-87.649307, 41.939861], + [-87.649384, 41.940212], + [-87.649109, 41.940346], + [-87.648964, 41.940216], + [-87.648956, 41.940075] + ] + } + }, + { + "id": "68", + "type": "Feature", + "properties": { + "route_id": "157", + "shape_id": "64714130", + "direction": "West", + "trip_id": 56, + "route_short_name": "157", + "route_long_name": "Streeterville/Taylor", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/157/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.61831, 41.898442], + [-87.617709, 41.897697], + [-87.621853, 41.897548], + [-87.621814, 41.896768], + [-87.620409, 41.896641], + [-87.620353, 41.893438], + [-87.6243, 41.89333], + [-87.6242, 41.88988], + [-87.624627, 41.888058], + [-87.62448, 41.88211], + [-87.636034, 41.881984], + [-87.641219, 41.881771], + [-87.64099, 41.87563], + [-87.640867, 41.875312], + [-87.640986, 41.875], + [-87.640858, 41.871936], + [-87.640993, 41.871847], + [-87.640848, 41.871495], + [-87.640913, 41.87002], + [-87.6408, 41.87002], + [-87.64079, 41.86975], + [-87.64263, 41.86972], + [-87.64263, 41.869837], + [-87.64263, 41.86972], + [-87.649209, 41.86966], + [-87.65134, 41.8695], + [-87.668205, 41.86924], + [-87.668857, 41.8694], + [-87.66892, 41.871458], + [-87.669142, 41.871688], + [-87.677838, 41.871516], + [-87.67914, 41.870712], + [-87.681015, 41.869177], + [-87.686103, 41.869008], + [-87.686118, 41.864793], + [-87.690743, 41.863272], + [-87.723386, 41.851654], + [-87.724721, 41.85165], + [-87.724741, 41.854043] + ] + } + }, + { + "id": "69", + "type": "Feature", + "properties": { + "route_id": "7", + "shape_id": "64804361", + "direction": "East", + "trip_id": 58, + "route_short_name": "7", + "route_long_name": "Harrison", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/7/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.764797, 41.872762], + [-87.763413, 41.872937], + [-87.737075, 41.873253], + [-87.735502, 41.873763], + [-87.735327, 41.873723], + [-87.735168, 41.870433], + [-87.734867, 41.870282], + [-87.723725, 41.873428], + [-87.707305, 41.873732], + [-87.671713, 41.874072], + [-87.671477, 41.871555], + [-87.66902, 41.87158], + [-87.66907, 41.87417], + [-87.661383, 41.874138], + [-87.649353, 41.874422], + [-87.64706, 41.87427], + [-87.63948, 41.87439], + [-87.63961, 41.876513], + [-87.639447, 41.876896], + [-87.639431, 41.878019], + [-87.6244, 41.87829], + [-87.624374, 41.876148], + [-87.624191, 41.874798], + [-87.624046, 41.874695], + [-87.62368, 41.874855] + ] + } + }, + { + "id": "70", + "type": "Feature", + "properties": { + "route_id": "7", + "shape_id": "64805912", + "direction": "West", + "trip_id": 59, + "route_short_name": "7", + "route_long_name": "Harrison", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/7/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.62368, 41.874761], + [-87.6233, 41.87545], + [-87.62329, 41.87587], + [-87.62419, 41.87577], + [-87.624244, 41.879395], + [-87.624633, 41.879595], + [-87.6411, 41.87928], + [-87.640936, 41.874438], + [-87.647447, 41.8744], + [-87.64759, 41.874168], + [-87.648383, 41.874407], + [-87.652048, 41.874425], + [-87.669159, 41.874208], + [-87.669032, 41.8723], + [-87.669184, 41.871631], + [-87.671352, 41.871642], + [-87.671432, 41.873333], + [-87.671272, 41.874407], + [-87.678027, 41.874048], + [-87.705493, 41.873747], + [-87.705922, 41.873842], + [-87.706002, 41.874883], + [-87.706383, 41.874955], + [-87.707687, 41.874637], + [-87.734993, 41.87428], + [-87.735312, 41.874145], + [-87.73547, 41.873842], + [-87.736997, 41.873357], + [-87.744992, 41.873183], + [-87.745437, 41.873183], + [-87.745437, 41.87335], + [-87.754528, 41.873158], + [-87.755783, 41.873], + [-87.764255, 41.87292], + [-87.765068, 41.872719], + [-87.76506, 41.872044], + [-87.7649, 41.871937], + [-87.76474, 41.872028], + [-87.764679, 41.872501] + ] + } + }, + { + "id": "71", + "type": "Feature", + "properties": { + "route_id": "171", + "shape_id": "64714108", + "direction": "South", + "trip_id": 62, + "route_short_name": "171", + "route_long_name": "U. of Chicago/Hyde Park", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/171/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.580928, 41.796165], + [-87.580943, 41.795513], + [-87.58123, 41.795307], + [-87.5887, 41.795243], + [-87.58967, 41.795562], + [-87.591593, 41.79557], + [-87.592562, 41.795212], + [-87.593865, 41.795093], + [-87.596265, 41.795053], + [-87.596393, 41.795188], + [-87.601463, 41.79491], + [-87.601415, 41.791318], + [-87.601177, 41.78937], + [-87.601288, 41.78736], + [-87.601166, 41.785942], + [-87.597537, 41.785898] + ] + } + }, + { + "id": "72", + "type": "Feature", + "properties": { + "route_id": "55N", + "shape_id": "64804662", + "direction": "West", + "trip_id": 63, + "route_short_name": "55N", + "route_long_name": "55th/Narragansett", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/55N/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.739158, 41.786685], + [-87.739985, 41.785078], + [-87.740032, 41.784483], + [-87.741065, 41.784435], + [-87.741192, 41.78457], + [-87.741398, 41.791023], + [-87.741638, 41.792478], + [-87.742147, 41.793177], + [-87.779785, 41.79243], + [-87.780865, 41.7927], + [-87.781818, 41.792422], + [-87.781962, 41.79212], + [-87.781342, 41.7764], + [-87.781692, 41.776457], + [-87.781612, 41.776592] + ] + } + }, + { + "id": "73", + "type": "Feature", + "properties": { + "route_id": "55N", + "shape_id": "64804664", + "direction": "East", + "trip_id": 63, + "route_short_name": "55N", + "route_long_name": "55th/Narragansett", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/55N/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.781453, 41.776592], + [-87.781263, 41.77667], + [-87.781215, 41.777545], + [-87.781772, 41.790937], + [-87.781772, 41.792073], + [-87.781565, 41.792318], + [-87.74243, 41.793069], + [-87.742003, 41.792883], + [-87.741685, 41.792008], + [-87.741398, 41.784388], + [-87.740588, 41.784228], + [-87.739778, 41.784292], + [-87.739317, 41.784498], + [-87.738378, 41.785683], + [-87.738538, 41.786343], + [-87.738983, 41.786613] + ] + } + }, + { + "id": "74", + "type": "Feature", + "properties": { + "route_id": "171", + "shape_id": "64714111", + "direction": "North", + "trip_id": 63, + "route_short_name": "171", + "route_long_name": "U. of Chicago/Hyde Park", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/171/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.597728, 41.785937], + [-87.591497, 41.786057], + [-87.591454, 41.787893], + [-87.59795, 41.787813], + [-87.598125, 41.794853], + [-87.597903, 41.794973], + [-87.592705, 41.795132], + [-87.591858, 41.79472], + [-87.589653, 41.794853], + [-87.5887, 41.795228], + [-87.58409, 41.795307], + [-87.583852, 41.795538], + [-87.584027, 41.798823], + [-87.583931, 41.799598], + [-87.58234, 41.799633], + [-87.582286, 41.798129], + [-87.580919, 41.796813], + [-87.580863, 41.796197] + ] + } + }, + { + "id": "75", + "type": "Feature", + "properties": { + "route_id": "81W", + "shape_id": "64701652", + "direction": "East", + "trip_id": 63, + "route_short_name": "81W", + "route_long_name": "West Lawrence", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/81W/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.839055, 41.98373], + [-87.839118, 41.983562], + [-87.838865, 41.983357], + [-87.836655, 41.982195], + [-87.836735, 41.96859], + [-87.836575, 41.966715], + [-87.83621, 41.966532], + [-87.807457, 41.967295], + [-87.806997, 41.967502], + [-87.806948, 41.968065], + [-87.806693, 41.968272], + [-87.778878, 41.968558], + [-87.778163, 41.968502], + [-87.776972, 41.967652], + [-87.76504, 41.96781], + [-87.76149, 41.9676], + [-87.76078, 41.9679], + [-87.76196, 41.96928], + [-87.76107, 41.969622], + [-87.761016, 41.96981], + [-87.761348, 41.970013], + [-87.761611, 41.969809] + ] + } + }, + { + "id": "76", + "type": "Feature", + "properties": { + "route_id": "81W", + "shape_id": "64701651", + "direction": "West", + "trip_id": 63, + "route_short_name": "81W", + "route_long_name": "West Lawrence", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/81W/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.761715, 41.969718], + [-87.76222, 41.96952], + [-87.76089, 41.967932], + [-87.761357, 41.967653], + [-87.765072, 41.967843], + [-87.777003, 41.967715], + [-87.777368, 41.967818], + [-87.778147, 41.968455], + [-87.778688, 41.96859], + [-87.804755, 41.96836], + [-87.80716, 41.96826], + [-87.80717, 41.96754], + [-87.807299, 41.967546], + [-87.80717, 41.96754], + [-87.80719, 41.96729], + [-87.836385, 41.966682], + [-87.836575, 41.966928], + [-87.836528, 41.982323], + [-87.836592, 41.982465], + [-87.837562, 41.982617], + [-87.838118, 41.982975], + [-87.838483, 41.983865] + ] + } + }, + { + "id": "77", + "type": "Feature", + "properties": { + "route_id": "130", + "shape_id": "64811685", + "direction": "East", + "trip_id": 64, + "route_short_name": "130", + "route_long_name": "Museum Campus", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/130/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.641319, 41.883232], + [-87.641001, 41.878017], + [-87.630953, 41.878126], + [-87.630801, 41.877955], + [-87.630691, 41.875552], + [-87.627717, 41.875523], + [-87.627636, 41.871977], + [-87.627467, 41.87188], + [-87.627435, 41.871562], + [-87.627547, 41.869042], + [-87.627418, 41.867333], + [-87.623428, 41.867447], + [-87.62308, 41.867318], + [-87.620457, 41.867342], + [-87.619678, 41.865108], + [-87.61936, 41.864893], + [-87.616563, 41.864965], + [-87.61588, 41.864767], + [-87.615228, 41.864965], + [-87.614163, 41.864997], + [-87.613893, 41.865243], + [-87.613723, 41.866102], + [-87.60779, 41.866188] + ] + } + }, + { + "id": "78", + "type": "Feature", + "properties": { + "route_id": "85A", + "shape_id": "64805676", + "direction": "South", + "trip_id": 67, + "route_short_name": "85A", + "route_long_name": "North Central", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/85A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.773633, 42.011957], + [-87.773252, 42.011822], + [-87.772695, 42.010805], + [-87.766752, 41.999338], + [-87.765702, 41.997033], + [-87.764622, 41.995165], + [-87.76594, 41.991622], + [-87.766338, 41.989428], + [-87.768325, 41.987218], + [-87.76846, 41.97641], + [-87.76234, 41.969707], + [-87.761998, 41.969988], + [-87.762317, 41.970254] + ] + } + }, + { + "id": "79", + "type": "Feature", + "properties": { + "route_id": "85A", + "shape_id": "64705675", + "direction": "North", + "trip_id": 67, + "route_short_name": "85A", + "route_long_name": "North Central", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/85A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.762436, 41.9703], + [-87.762874, 41.970312], + [-87.768325, 41.976442], + [-87.768197, 41.987163], + [-87.768055, 41.987465], + [-87.766528, 41.988927], + [-87.766195, 41.989555], + [-87.765877, 41.991622], + [-87.764653, 41.995228], + [-87.765337, 41.996628], + [-87.765733, 41.996977], + [-87.780707, 42.003898], + [-87.782328, 42.004788], + [-87.783822, 42.006355], + [-87.788478, 42.011997], + [-87.773665, 42.011957] + ] + } + }, + { + "id": "80", + "type": "Feature", + "properties": { + "route_id": "201", + "shape_id": "64704318", + "direction": "East", + "trip_id": 67, + "route_short_name": "201", + "route_long_name": "Central/Ridge", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/201/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.750443, 42.059363], + [-87.750188, 42.060667], + [-87.751333, 42.060778], + [-87.751253, 42.062392], + [-87.730845, 42.062527], + [-87.72808, 42.064617], + [-87.677297, 42.064012], + [-87.677122, 42.063767], + [-87.677308, 42.051236], + [-87.678822, 42.047903], + [-87.679585, 42.046362], + [-87.679808, 42.046258], + [-87.682717, 42.047037], + [-87.688725, 42.04706], + [-87.688358, 42.041243], + [-87.685895, 42.030403], + [-87.685323, 42.024507], + [-87.684655, 42.019667], + [-87.684273, 42.019468], + [-87.676389, 42.019382], + [-87.67558, 42.017608], + [-87.675198, 42.016138], + [-87.672914, 42.01718], + [-87.672846, 42.018146] + ] + } + }, + { + "id": "81", + "type": "Feature", + "properties": { + "route_id": "62H", + "shape_id": "64806136", + "direction": "West", + "trip_id": 67, + "route_short_name": "62H", + "route_long_name": "Archer/Harlem", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/62H/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.738475, 41.786447], + [-87.738825, 41.786588], + [-87.739222, 41.786462], + [-87.740032, 41.784897], + [-87.740063, 41.784435], + [-87.741097, 41.78442], + [-87.741208, 41.784595], + [-87.741464, 41.792273], + [-87.742702, 41.794735], + [-87.742925, 41.798447], + [-87.742957, 41.798613], + [-87.743304, 41.798742], + [-87.77794, 41.7934], + [-87.781962, 41.792398], + [-87.80148, 41.79197], + [-87.801687, 41.791905], + [-87.80175, 41.791532], + [-87.801247, 41.782851], + [-87.801132, 41.77733], + [-87.81426, 41.777052], + [-87.814895, 41.776917], + [-87.814912, 41.776615], + [-87.814657, 41.776695] + ] + } + }, + { + "id": "82", + "type": "Feature", + "properties": { + "route_id": "62H", + "shape_id": "64706137", + "direction": "East", + "trip_id": 67, + "route_short_name": "62H", + "route_long_name": "Archer/Harlem", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/62H/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.81472, 41.776845], + [-87.814435, 41.777028], + [-87.803595, 41.777155], + [-87.800972, 41.77737], + [-87.800845, 41.777553], + [-87.800893, 41.780327], + [-87.801402, 41.791715], + [-87.801115, 41.79193], + [-87.781818, 41.792303], + [-87.777242, 41.793423], + [-87.743195, 41.798525], + [-87.743044, 41.79842], + [-87.742906, 41.794632], + [-87.741723, 41.792019], + [-87.741401, 41.784417], + [-87.74116, 41.784265], + [-87.739969, 41.784281], + [-87.73932, 41.784473], + [-87.738344, 41.785793], + [-87.738444, 41.786287] + ] + } + }, + { + "id": "83", + "type": "Feature", + "properties": { + "route_id": "201", + "shape_id": "64704319", + "direction": "West", + "trip_id": 70, + "route_short_name": "201", + "route_long_name": "Central/Ridge", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/201/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.672841, 42.018215], + [-87.672966, 42.018683], + [-87.673975, 42.019388], + [-87.684592, 42.019547], + [-87.685863, 42.030562], + [-87.688312, 42.041323], + [-87.688662, 42.048507], + [-87.681588, 42.048388], + [-87.67892, 42.047751], + [-87.678712, 42.04803], + [-87.677189, 42.051374], + [-87.677042, 42.064005], + [-87.699152, 42.06441], + [-87.7244, 42.06457], + [-87.727762, 42.064735], + [-87.728333, 42.064537], + [-87.73059, 42.062542], + [-87.75146, 42.062462], + [-87.75162, 42.062223], + [-87.751572, 42.060563], + [-87.752175, 42.059228], + [-87.752112, 42.058577], + [-87.750983, 42.058497], + [-87.750808, 42.058577], + [-87.750507, 42.059203] + ] + } + }, + { + "id": "84", + "type": "Feature", + "properties": { + "route_id": "106", + "shape_id": "64804490", + "direction": "West", + "trip_id": 81, + "route_short_name": "106", + "route_long_name": "East 103rd", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/106/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.580785, 41.708737], + [-87.58074, 41.70792], + [-87.59355, 41.7077], + [-87.59401, 41.7081], + [-87.594072, 41.709437], + [-87.59315, 41.710485], + [-87.59288, 41.71047], + [-87.591927, 41.70931], + [-87.591005, 41.708658], + [-87.588303, 41.708682], + [-87.587922, 41.708825], + [-87.587922, 41.709253], + [-87.588112, 41.709382], + [-87.590273, 41.709373], + [-87.590305, 41.711137], + [-87.590607, 41.711638], + [-87.592722, 41.711718], + [-87.592897, 41.711622], + [-87.593388, 41.710493], + [-87.594215, 41.70958], + [-87.594278, 41.707705], + [-87.594407, 41.707553], + [-87.595647, 41.707513], + [-87.595725, 41.707775], + [-87.60178, 41.70752], + [-87.6202, 41.70728], + [-87.619933, 41.708905], + [-87.619853, 41.71074], + [-87.620442, 41.71554], + [-87.62056, 41.721849], + [-87.623831, 41.721775], + [-87.62392, 41.72087], + [-87.624486, 41.720854] + ] + } + }, + { + "id": "85", + "type": "Feature", + "properties": { + "route_id": "93", + "shape_id": "64701802", + "direction": "South", + "trip_id": 81, + "route_short_name": "93", + "route_long_name": "California/Dodge", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/93/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.683448, 42.047855], + [-87.68348, 42.0471], + [-87.68367, 42.04706], + [-87.68677, 42.047163], + [-87.686753, 42.048363], + [-87.684752, 42.04857], + [-87.684735, 42.051963], + [-87.684973, 42.052155], + [-87.689933, 42.052322], + [-87.69875, 42.052119], + [-87.698945, 42.051877], + [-87.699548, 42.026413], + [-87.69985, 42.005027], + [-87.699787, 41.997685], + [-87.699548, 41.994823], + [-87.69958, 41.992337], + [-87.699437, 41.992018], + [-87.69939, 41.98551], + [-87.699035, 41.975832], + [-87.70837, 41.975925], + [-87.713503, 41.975695], + [-87.713663, 41.975408], + [-87.713345, 41.968502], + [-87.712375, 41.968447] + ] + } + }, + { + "id": "86", + "type": "Feature", + "properties": { + "route_id": "93", + "shape_id": "64701800", + "direction": "North", + "trip_id": 81, + "route_short_name": "93", + "route_long_name": "California/Dodge", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/93/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.71228, 41.968455], + [-87.711375, 41.968343], + [-87.708443, 41.968506], + [-87.70864, 41.974518], + [-87.708497, 41.975735], + [-87.699502, 41.97583], + [-87.698913, 41.975973], + [-87.69985, 42.004535], + [-87.699533, 42.013762], + [-87.699692, 42.014135], + [-87.699453, 42.02263], + [-87.699565, 42.023838], + [-87.699373, 42.02687], + [-87.699152, 42.042205], + [-87.699008, 42.04327], + [-87.698833, 42.05202], + [-87.690133, 42.052207], + [-87.684894, 42.052085], + [-87.68478, 42.051996], + [-87.684815, 42.048563], + [-87.683391, 42.048474], + [-87.683434, 42.04801] + ] + } + }, + { + "id": "87", + "type": "Feature", + "properties": { + "route_id": "106", + "shape_id": "64704493", + "direction": "East", + "trip_id": 83, + "route_short_name": "106", + "route_long_name": "East 103rd", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/106/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.624612, 41.720868], + [-87.624813, 41.720866], + [-87.624813, 41.721618], + [-87.620618, 41.721702], + [-87.620568, 41.714983], + [-87.619902, 41.71066], + [-87.620077, 41.707195], + [-87.594165, 41.707573], + [-87.594145, 41.707684], + [-87.594125, 41.707795], + [-87.594036, 41.708218], + [-87.594008, 41.709787], + [-87.593072, 41.71066], + [-87.591832, 41.709357], + [-87.590774, 41.70864], + [-87.588027, 41.708748], + [-87.58792, 41.708858], + [-87.58795, 41.709379], + [-87.588094, 41.709437], + [-87.590337, 41.709532], + [-87.590484, 41.711565], + [-87.590903, 41.711709], + [-87.592818, 41.711754], + [-87.593156, 41.710724], + [-87.594132, 41.709799], + [-87.59421, 41.707601], + [-87.593967, 41.707599], + [-87.593723, 41.707597], + [-87.59348, 41.707595], + [-87.590232, 41.707626], + [-87.580757, 41.707782], + [-87.580745, 41.708663], + [-87.580988, 41.708609] + ] + } + }, + { + "id": "88", + "type": "Feature", + "properties": { + "route_id": "59", + "shape_id": "64807025", + "direction": "East", + "trip_id": 85, + "route_short_name": "59", + "route_long_name": "59th/61st", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/59/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.739029, 41.786226], + [-87.739391, 41.786194], + [-87.740014, 41.784878], + [-87.739987, 41.78426], + [-87.739281, 41.784452], + [-87.738555, 41.785434], + [-87.738201, 41.78565], + [-87.737098, 41.78577], + [-87.690838, 41.786502], + [-87.683288, 41.786462], + [-87.678695, 41.786645], + [-87.676708, 41.78655], + [-87.634397, 41.787248], + [-87.632172, 41.787113], + [-87.631982, 41.787137], + [-87.631758, 41.787153], + [-87.631488, 41.787177], + [-87.630742, 41.787185], + [-87.630375, 41.787265], + [-87.630297, 41.787432], + [-87.630518, 41.794298], + [-87.630742, 41.794537], + [-87.631218, 41.794615], + [-87.631775, 41.794537], + [-87.631822, 41.79394], + [-87.631965, 41.793797], + [-87.632045, 41.792542], + [-87.631775, 41.789823], + [-87.632045, 41.787885], + [-87.631917, 41.787265], + [-87.631537, 41.787177], + [-87.631297, 41.787168], + [-87.631027, 41.787153], + [-87.630613, 41.787137], + [-87.630328, 41.787137], + [-87.629183, 41.787265], + [-87.628993, 41.787408], + [-87.625575, 41.787337], + [-87.625448, 41.783998], + [-87.625178, 41.783743], + [-87.621967, 41.783672], + [-87.607917, 41.784078], + [-87.593388, 41.784102], + [-87.593023, 41.784245], + [-87.591387, 41.784277], + [-87.591355, 41.786605], + [-87.589432, 41.78631], + [-87.586587, 41.786335], + [-87.586903, 41.786232] + ] + } + }, + { + "id": "89", + "type": "Feature", + "properties": { + "route_id": "59", + "shape_id": "64807023", + "direction": "West", + "trip_id": 88, + "route_short_name": "59", + "route_long_name": "59th/61st", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/59/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.586935, 41.786232], + [-87.59137, 41.786152], + [-87.591402, 41.784587], + [-87.591545, 41.784285], + [-87.605755, 41.784165], + [-87.617867, 41.783872], + [-87.620282, 41.78407], + [-87.620442, 41.784125], + [-87.620457, 41.785532], + [-87.62068, 41.785755], + [-87.621268, 41.785606], + [-87.625242, 41.785557], + [-87.6254, 41.78562], + [-87.62548, 41.78709], + [-87.62567, 41.787352], + [-87.628897, 41.787265], + [-87.629072, 41.787455], + [-87.630297, 41.787478], + [-87.630518, 41.794298], + [-87.630742, 41.794537], + [-87.631218, 41.794615], + [-87.631775, 41.794537], + [-87.631822, 41.79394], + [-87.631965, 41.793797], + [-87.632045, 41.792542], + [-87.631775, 41.78964], + [-87.631982, 41.787478], + [-87.632203, 41.787265], + [-87.637957, 41.786923], + [-87.651992, 41.786628], + [-87.66431, 41.78678], + [-87.684178, 41.786628], + [-87.7304, 41.785977], + [-87.73275, 41.78583], + [-87.732625, 41.785953], + [-87.73314, 41.78582], + [-87.73396, 41.78581], + [-87.734936, 41.785802], + [-87.735077, 41.7858], + [-87.735073, 41.78593], + [-87.735075, 41.7858], + [-87.73825, 41.78569], + [-87.73848, 41.7862], + [-87.7389, 41.786199] + ] + } + }, + { + "id": "90", + "type": "Feature", + "properties": { + "route_id": "39", + "shape_id": "64707555", + "direction": "West", + "trip_id": 89, + "route_short_name": "39", + "route_long_name": "Pershing", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/39/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.602433, 41.822788], + [-87.603402, 41.82414], + [-87.605167, 41.824395], + [-87.606645, 41.824028], + [-87.619012, 41.823885], + [-87.61987, 41.823727], + [-87.619997, 41.82356], + [-87.619948, 41.820285], + [-87.620043, 41.820167], + [-87.621347, 41.820167], + [-87.62149, 41.820245], + [-87.621553, 41.821097], + [-87.621522, 41.821812], + [-87.621395, 41.82193], + [-87.621587, 41.823743], + [-87.629565, 41.82375], + [-87.62982, 41.8308], + [-87.630042, 41.83103], + [-87.630742, 41.831053], + [-87.63144, 41.830927], + [-87.631488, 41.830783], + [-87.631377, 41.823933], + [-87.631408, 41.823775], + [-87.631885, 41.823718], + [-87.6539, 41.823457], + [-87.658573, 41.82325], + [-87.68421, 41.823147], + [-87.684305, 41.826262], + [-87.680253, 41.828822], + [-87.68011, 41.82894], + [-87.68011, 41.829242], + [-87.680253, 41.829345], + [-87.68057, 41.82925], + [-87.680808, 41.828788], + [-87.681127, 41.828622], + [-87.681207, 41.828305], + [-87.690028, 41.822932], + [-87.708815, 41.822543], + [-87.709355, 41.822622], + [-87.709403, 41.824258], + [-87.709562, 41.824347], + [-87.711723, 41.824323], + [-87.711867, 41.824235], + [-87.711867, 41.823632] + ] + } + }, + { + "id": "91", + "type": "Feature", + "properties": { + "route_id": "39", + "shape_id": "64807556", + "direction": "East", + "trip_id": 89, + "route_short_name": "39", + "route_long_name": "Pershing", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/39/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.711867, 41.823607], + [-87.711803, 41.822725], + [-87.711628, 41.822503], + [-87.711375, 41.822472], + [-87.690028, 41.822885], + [-87.68944, 41.823115], + [-87.686722, 41.824832], + [-87.684942, 41.82584], + [-87.684577, 41.826087], + [-87.68437, 41.826207], + [-87.684147, 41.826333], + [-87.683972, 41.826445], + [-87.683813, 41.826532], + [-87.683145, 41.826985], + [-87.681873, 41.827763], + [-87.680237, 41.828868], + [-87.680093, 41.829163], + [-87.680332, 41.82937], + [-87.680745, 41.829123], + [-87.680808, 41.828813], + [-87.681127, 41.828615], + [-87.681318, 41.828193], + [-87.684402, 41.826278], + [-87.684402, 41.826087], + [-87.684402, 41.825897], + [-87.684353, 41.825627], + [-87.684353, 41.825205], + [-87.684305, 41.82495], + [-87.684305, 41.8241], + [-87.684178, 41.822995], + [-87.668205, 41.823187], + [-87.660638, 41.823123], + [-87.631297, 41.8236], + [-87.631058, 41.823615], + [-87.630788, 41.823647], + [-87.630598, 41.823672], + [-87.630392, 41.823695], + [-87.629755, 41.823703], + [-87.629565, 41.82395], + [-87.629787, 41.83084], + [-87.629883, 41.830975], + [-87.630742, 41.831053], + [-87.63144, 41.830927], + [-87.631488, 41.830783], + [-87.631233, 41.82375], + [-87.631058, 41.823623], + [-87.63082, 41.823607], + [-87.630297, 41.8236], + [-87.623318, 41.823718], + [-87.62316, 41.82364], + [-87.623112, 41.82027], + [-87.622905, 41.820047], + [-87.621602, 41.820063], + [-87.621475, 41.82019], + [-87.621553, 41.823647], + [-87.621395, 41.823775], + [-87.606933, 41.823852], + [-87.605203, 41.824243], + [-87.604403, 41.824068], + [-87.604702, 41.823336], + [-87.603848, 41.82205], + [-87.602528, 41.822392], + [-87.602353, 41.822478], + [-87.602402, 41.822742] + ] + } + }, + { + "id": "92", + "type": "Feature", + "properties": { + "route_id": "30", + "shape_id": "64708227", + "direction": "South", + "trip_id": 93, + "route_short_name": "30", + "route_long_name": "South Chicago", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/30/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.62575, 41.768778], + [-87.626528, 41.768778], + [-87.626577, 41.768907], + [-87.62629, 41.769082], + [-87.62421, 41.76919], + [-87.613707, 41.769387], + [-87.6123, 41.77049], + [-87.60353, 41.764432], + [-87.55424, 41.728843], + [-87.553048, 41.728192], + [-87.54998, 41.728272], + [-87.54987, 41.728375], + [-87.54987, 41.729948], + [-87.549742, 41.73006], + [-87.542972, 41.730123], + [-87.542908, 41.728343], + [-87.540842, 41.726785], + [-87.540428, 41.72661], + [-87.54003, 41.72669], + [-87.539315, 41.726262], + [-87.535342, 41.72135], + [-87.535327, 41.712218], + [-87.53558, 41.710335], + [-87.53558, 41.710175], + [-87.535342, 41.710208], + [-87.535295, 41.708627], + [-87.535342, 41.692088], + [-87.535533, 41.691873], + [-87.540047, 41.691857], + [-87.540205, 41.691612], + [-87.540253, 41.683608], + [-87.540095, 41.681048], + [-87.539998, 41.680922], + [-87.539792, 41.68089], + [-87.536598, 41.680945], + [-87.53655, 41.681725], + [-87.536598, 41.681875], + [-87.537392, 41.681757], + [-87.53814, 41.6819], + [-87.538298, 41.68101], + [-87.540015, 41.680978], + [-87.540142, 41.680827], + [-87.540158, 41.68066], + [-87.54011, 41.671885], + [-87.539857, 41.670837], + [-87.539062, 41.669183], + [-87.538887, 41.668405], + [-87.54003, 41.66269], + [-87.539903, 41.65131], + [-87.540095, 41.64709], + [-87.54003, 41.644165], + [-87.540222, 41.64415], + [-87.541, 41.644675], + [-87.542812, 41.64605], + [-87.543018, 41.646192], + [-87.54321, 41.646335], + [-87.543353, 41.646438], + [-87.543512, 41.646558], + [-87.543718, 41.646693], + [-87.546945, 41.649172], + [-87.54696, 41.649412], + [-87.546993, 41.649593], + [-87.546977, 41.651485], + [-87.547088, 41.652097], + [-87.547057, 41.65538], + [-87.547145, 41.655468], + [-87.547167, 41.65549], + [-87.547373, 41.65553], + [-87.551935, 41.65553], + [-87.551935, 41.659003], + [-87.55165, 41.65913], + [-87.547165, 41.65906], + [-87.547103, 41.656047], + [-87.547167, 41.655737], + [-87.547135, 41.655475], + [-87.547135, 41.655365], + [-87.547135, 41.65418], + [-87.547183, 41.652908], + [-87.547135, 41.649872], + [-87.547183, 41.649602], + [-87.547103, 41.649418], + [-87.546977, 41.649283], + [-87.546818, 41.649148], + [-87.546658, 41.649013], + [-87.5434, 41.64651], + [-87.543273, 41.646407], + [-87.543098, 41.646255], + [-87.542972, 41.646152], + [-87.542702, 41.645882] + ] + } + }, + { + "id": "93", + "type": "Feature", + "properties": { + "route_id": "53A", + "shape_id": "64704579", + "direction": "North", + "trip_id": 94, + "route_short_name": "53A", + "route_long_name": "South Pulaski", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/53A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.71954, 41.691096], + [-87.71965, 41.691328], + [-87.720223, 41.691365], + [-87.720768, 41.70288], + [-87.72099, 41.713022], + [-87.721658, 41.730743], + [-87.721308, 41.733843], + [-87.721326, 41.735543], + [-87.721817, 41.750922], + [-87.722087, 41.754402], + [-87.721977, 41.756382], + [-87.722183, 41.76409], + [-87.722342, 41.765442], + [-87.723137, 41.79839], + [-87.723399, 41.800508], + [-87.723598, 41.800556], + [-87.724928, 41.800532], + [-87.725153, 41.800316], + [-87.72511, 41.800104], + [-87.724837, 41.799957], + [-87.724037, 41.800464], + [-87.723694, 41.800512], + [-87.723533, 41.800574], + [-87.723372, 41.800636], + [-87.723323, 41.802498], + [-87.72418, 41.82853], + [-87.724248, 41.834908], + [-87.724408, 41.836895], + [-87.72479, 41.836998], + [-87.725979, 41.836827], + [-87.725897, 41.836503], + [-87.725597, 41.836507], + [-87.725526, 41.836668] + ] + } + }, + { + "id": "94", + "type": "Feature", + "properties": { + "route_id": "130", + "shape_id": "64808094", + "direction": "West", + "trip_id": 96, + "route_short_name": "130", + "route_long_name": "Museum Campus", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/130/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.607628, 41.866215], + [-87.60742, 41.866266], + [-87.607446, 41.866487], + [-87.613689, 41.866437], + [-87.614168, 41.866203], + [-87.614081, 41.865699], + [-87.614236, 41.865123], + [-87.6194, 41.86497], + [-87.6203, 41.86758], + [-87.627326, 41.867562], + [-87.627445, 41.872852], + [-87.627277, 41.872968], + [-87.627445, 41.87297], + [-87.627697, 41.879426], + [-87.639414, 41.879342], + [-87.639565, 41.879526], + [-87.639892, 41.885737], + [-87.641312, 41.885673], + [-87.641281, 41.88342] + ] + } + }, + { + "id": "95", + "type": "Feature", + "properties": { + "route_id": "53A", + "shape_id": "64804570", + "direction": "South", + "trip_id": 100, + "route_short_name": "53A", + "route_long_name": "South Pulaski", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/53A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.725523, 41.83677], + [-87.72556, 41.83687], + [-87.72435, 41.83688], + [-87.723995, 41.814738], + [-87.723582, 41.804335], + [-87.723407, 41.802865], + [-87.723523, 41.800611], + [-87.725122, 41.800435], + [-87.725089, 41.800071], + [-87.724923, 41.799951], + [-87.723984, 41.800506], + [-87.723464, 41.800496], + [-87.722675, 41.774818], + [-87.722293, 41.75472], + [-87.722055, 41.753448], + [-87.72186, 41.74817], + [-87.721817, 41.74392], + [-87.722055, 41.744015], + [-87.72188, 41.740733], + [-87.721627, 41.739987], + [-87.721532, 41.736315], + [-87.721578, 41.733287], + [-87.721817, 41.731077], + [-87.721165, 41.713212], + [-87.721118, 41.708317], + [-87.720418, 41.691428], + [-87.720299, 41.69121], + [-87.719311, 41.6912], + [-87.719298, 41.690982], + [-87.719538, 41.690979] + ] + } + }, + { + "id": "96", + "type": "Feature", + "properties": { + "route_id": "172", + "shape_id": "64714103", + "direction": "North", + "trip_id": 101, + "route_short_name": "172", + "route_long_name": "U. of Chicago/Kenwood", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/172/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.597728, 41.785937], + [-87.591657, 41.786025], + [-87.591497, 41.786057], + [-87.591418, 41.786327], + [-87.591477, 41.787863], + [-87.596321, 41.787809], + [-87.596647, 41.802165], + [-87.595725, 41.802308], + [-87.58654, 41.802463], + [-87.58639, 41.802727], + [-87.586465, 41.804341], + [-87.58381, 41.804373], + [-87.583708, 41.802655], + [-87.58403, 41.802522], + [-87.584113, 41.802617] + ] + } + }, + { + "id": "97", + "type": "Feature", + "properties": { + "route_id": "11", + "shape_id": "64807170", + "direction": "South", + "trip_id": 101, + "route_short_name": "11", + "route_long_name": "Lincoln", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/11/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.710977, 42.018943], + [-87.710802, 42.019055], + [-87.708688, 42.018958], + [-87.708847, 42.014803], + [-87.709133, 42.013293], + [-87.709277, 42.010487], + [-87.709435, 41.99751], + [-87.709722, 41.997367], + [-87.711582, 41.997327], + [-87.711803, 41.997057], + [-87.711915, 41.997137], + [-87.712185, 41.9965], + [-87.714108, 41.994625], + [-87.713758, 41.994252], + [-87.709007, 41.991335], + [-87.693095, 41.981847], + [-87.692888, 41.98156], + [-87.692217, 41.974388], + [-87.689933, 41.970728], + [-87.68952, 41.970393], + [-87.68909, 41.970353], + [-87.68901, 41.968185], + [-87.689153, 41.967048], + [-87.68882, 41.966658] + ] + } + }, + { + "id": "98", + "type": "Feature", + "properties": { + "route_id": "11", + "shape_id": "64707171", + "direction": "North", + "trip_id": 101, + "route_short_name": "11", + "route_long_name": "Lincoln", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/11/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.688533, 41.96607], + [-87.688708, 41.966102], + [-87.688788, 41.966405], + [-87.688788, 41.969035], + [-87.689107, 41.970442], + [-87.689837, 41.970648], + [-87.69203, 41.97416], + [-87.692618, 41.978348], + [-87.692793, 41.981472], + [-87.693, 41.981933], + [-87.713902, 41.994577], + [-87.711803, 41.996525], + [-87.711582, 41.99701], + [-87.711723, 41.997217], + [-87.709358, 41.99744], + [-87.709277, 41.997765], + [-87.709259, 42.007385], + [-87.709085, 42.011965], + [-87.708958, 42.012085], + [-87.708927, 42.013357], + [-87.708688, 42.014405], + [-87.708593, 42.019023], + [-87.708878, 42.019197], + [-87.710869, 42.019032] + ] + } + }, + { + "id": "99", + "type": "Feature", + "properties": { + "route_id": "35", + "shape_id": "64807205", + "direction": "West", + "trip_id": 102, + "route_short_name": "35", + "route_long_name": "35th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/35/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.607805, 41.839058], + [-87.608141, 41.839568], + [-87.608241, 41.839722], + [-87.608721, 41.839946], + [-87.608935, 41.840467], + [-87.608731, 41.840583], + [-87.608308, 41.839954], + [-87.608264, 41.839813], + [-87.60822, 41.839672], + [-87.608176, 41.83953], + [-87.607956, 41.838825], + [-87.608047, 41.838655], + [-87.613529, 41.838415], + [-87.61344, 41.834832], + [-87.614463, 41.834665], + [-87.61446, 41.833726], + [-87.61162, 41.833637], + [-87.61081, 41.831523], + [-87.61085, 41.831281], + [-87.641088, 41.830927], + [-87.648106, 41.830744], + [-87.648257, 41.830608], + [-87.650848, 41.830768], + [-87.679967, 41.830355], + [-87.680253, 41.830228], + [-87.680188, 41.829782], + [-87.680188, 41.82964], + [-87.680237, 41.829505], + [-87.681158, 41.828615], + [-87.681015, 41.828368], + [-87.680142, 41.828908], + [-87.680142, 41.82921], + [-87.680188, 41.829385], + [-87.680205, 41.829577], + [-87.680253, 41.829775], + [-87.680285, 41.829973], + [-87.680285, 41.830267], + [-87.682318, 41.830395], + [-87.694542, 41.830125], + [-87.694908, 41.829988], + [-87.694923, 41.827358], + [-87.701902, 41.8272], + [-87.70214, 41.827343], + [-87.702172, 41.82813], + [-87.704555, 41.828105], + [-87.704698, 41.835092], + [-87.70481, 41.836777], + [-87.705032, 41.837268], + [-87.723533, 41.836918], + [-87.743577, 41.836777], + [-87.743783, 41.842688], + [-87.744117, 41.846297] + ] + } + }, + { + "id": "100", + "type": "Feature", + "properties": { + "route_id": "67", + "shape_id": "64804610", + "direction": "East", + "trip_id": 103, + "route_short_name": "67", + "route_long_name": "67th-69th-71st", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/67/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.73305, 41.756509], + [-87.7331, 41.75675], + [-87.73243, 41.75676], + [-87.73237, 41.75489], + [-87.72207, 41.75504], + [-87.721977, 41.756382], + [-87.72224, 41.76411], + [-87.69757, 41.76446], + [-87.697562, 41.76436], + [-87.69757, 41.76446], + [-87.69566, 41.7645], + [-87.695655, 41.764368], + [-87.69566, 41.7645], + [-87.683179, 41.764694], + [-87.68319, 41.76505], + [-87.683067, 41.765052], + [-87.68319, 41.76505], + [-87.68326, 41.76831], + [-87.61396, 41.76936], + [-87.613707, 41.769387], + [-87.61179, 41.77092], + [-87.61183, 41.77302], + [-87.575412, 41.773388], + [-87.567969, 41.77359] + ] + } + }, + { + "id": "101", + "type": "Feature", + "properties": { + "route_id": "30", + "shape_id": "64808228", + "direction": "North", + "trip_id": 104, + "route_short_name": "30", + "route_long_name": "South Chicago", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/30/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.54267, 41.645867], + [-87.540047, 41.643967], + [-87.539777, 41.644102], + [-87.539998, 41.647113], + [-87.539792, 41.649697], + [-87.539745, 41.663112], + [-87.538648, 41.668667], + [-87.538743, 41.669327], + [-87.539697, 41.671393], + [-87.539825, 41.672045], + [-87.539983, 41.680772], + [-87.539792, 41.680945], + [-87.536645, 41.680962], + [-87.53655, 41.681892], + [-87.538155, 41.68186], + [-87.538267, 41.681002], + [-87.53992, 41.681025], + [-87.539998, 41.681192], + [-87.54011, 41.69185], + [-87.53526, 41.69184], + [-87.535198, 41.692112], + [-87.53529, 41.70294], + [-87.535135, 41.702937], + [-87.53529, 41.70294], + [-87.5353, 41.7037], + [-87.5352, 41.72133], + [-87.5362, 41.722515], + [-87.536217, 41.722757], + [-87.536405, 41.722788], + [-87.53927, 41.72632], + [-87.54199, 41.72778], + [-87.54252, 41.72826], + [-87.54274, 41.72864], + [-87.5429, 41.73017], + [-87.54987, 41.73007], + [-87.54982, 41.72825], + [-87.55235, 41.72822], + [-87.552348, 41.72832], + [-87.55317, 41.72821], + [-87.562553, 41.735075], + [-87.56426, 41.73615], + [-87.571518, 41.741552], + [-87.57534, 41.74418], + [-87.575253, 41.744247], + [-87.57534, 41.74418], + [-87.578242, 41.746375], + [-87.58054, 41.74788], + [-87.580452, 41.747952], + [-87.58861, 41.75368], + [-87.59102, 41.75557], + [-87.59579, 41.75884], + [-87.597775, 41.760418], + [-87.61214, 41.77062], + [-87.61396, 41.76936], + [-87.62513, 41.76925], + [-87.62511, 41.76886], + [-87.6257, 41.76878] + ] + } + }, + { + "id": "102", + "type": "Feature", + "properties": { + "route_id": "172", + "shape_id": "64714110", + "direction": "South", + "trip_id": 105, + "route_short_name": "172", + "route_long_name": "U. of Chicago/Kenwood", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/172/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.58398, 41.802618], + [-87.593548, 41.802547], + [-87.593707, 41.802397], + [-87.596632, 41.802333], + [-87.596657, 41.799595], + [-87.601257, 41.799408], + [-87.601208, 41.795458], + [-87.601527, 41.794608], + [-87.601415, 41.791318], + [-87.601177, 41.78937], + [-87.601288, 41.78736], + [-87.601166, 41.785942], + [-87.597537, 41.785898] + ] + } + }, + { + "id": "103", + "type": "Feature", + "properties": { + "route_id": "126", + "shape_id": "64701117", + "direction": "West", + "trip_id": 106, + "route_short_name": "126", + "route_long_name": "Jackson", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/126/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.62368, 41.874761], + [-87.6233, 41.87545], + [-87.62329, 41.87587], + [-87.62419, 41.87577], + [-87.624244, 41.879395], + [-87.624633, 41.879595], + [-87.6411, 41.87928], + [-87.64101, 41.87674], + [-87.666749, 41.876353], + [-87.666652, 41.874244], + [-87.670907, 41.874065], + [-87.673307, 41.874255], + [-87.676281, 41.874104], + [-87.676556, 41.877437], + [-87.676926, 41.877455], + [-87.676835, 41.877323], + [-87.677073, 41.877268], + [-87.678187, 41.877243], + [-87.67957, 41.877633], + [-87.696482, 41.877307], + [-87.696669, 41.877481], + [-87.700802, 41.877438], + [-87.701472, 41.877283], + [-87.715412, 41.87722], + [-87.715777, 41.877188], + [-87.71584, 41.877028], + [-87.715713, 41.874685], + [-87.717923, 41.874493], + [-87.719767, 41.87459], + [-87.719893, 41.875383], + [-87.720482, 41.876537], + [-87.720577, 41.877077], + [-87.720863, 41.877228], + [-87.764208, 41.876608], + [-87.765702, 41.876727], + [-87.767688, 41.87722], + [-87.76966, 41.87701], + [-87.771805, 41.877268], + [-87.773157, 41.877022], + [-87.774268, 41.876393], + [-87.774142, 41.876273] + ] + } + }, + { + "id": "104", + "type": "Feature", + "properties": { + "route_id": "43", + "shape_id": "64808180", + "direction": "West", + "trip_id": 106, + "route_short_name": "43", + "route_long_name": "43rd", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/43/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.597743, 41.817385], + [-87.598188, 41.817902], + [-87.598538, 41.818045], + [-87.600651, 41.818025], + [-87.600627, 41.817116], + [-87.600812, 41.816923], + [-87.606518, 41.816915], + [-87.610937, 41.816748], + [-87.612493, 41.816797], + [-87.629072, 41.81647], + [-87.62931, 41.81647], + [-87.629502, 41.816487], + [-87.62974, 41.816503], + [-87.629835, 41.816527], + [-87.63001, 41.81647], + [-87.630265, 41.816432], + [-87.631155, 41.816367], + [-87.63109, 41.812212], + [-87.631297, 41.81148], + [-87.632427, 41.809398], + [-87.632427, 41.809103], + [-87.632235, 41.80904], + [-87.630837, 41.809278], + [-87.629407, 41.811638], + [-87.629375, 41.816073], + [-87.629407, 41.816352], + [-87.629533, 41.816495], + [-87.629708, 41.816527], + [-87.629787, 41.816527], + [-87.629993, 41.816527], + [-87.630582, 41.816503], + [-87.631425, 41.816495], + [-87.6316, 41.816542], + [-87.63353, 41.81649], + [-87.63359, 41.81911], + [-87.644517, 41.818962], + [-87.64468, 41.818672], + [-87.644568, 41.817642], + [-87.645464, 41.817603] + ] + } + }, + { + "id": "105", + "type": "Feature", + "properties": { + "route_id": "126", + "shape_id": "64701116", + "direction": "East", + "trip_id": 106, + "route_short_name": "126", + "route_long_name": "Jackson", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/126/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.773998, 41.87637], + [-87.77303, 41.87699], + [-87.772075, 41.877172], + [-87.76966, 41.87701], + [-87.767435, 41.877077], + [-87.765813, 41.876577], + [-87.764843, 41.876473], + [-87.73164, 41.877053], + [-87.695813, 41.87749], + [-87.686087, 41.877473], + [-87.685545, 41.877593], + [-87.679633, 41.877673], + [-87.678583, 41.877473], + [-87.676645, 41.87749], + [-87.67655, 41.874145], + [-87.676278, 41.87397], + [-87.674912, 41.873922], + [-87.674277, 41.874065], + [-87.66651, 41.87414], + [-87.666503, 41.877602], + [-87.666345, 41.877697], + [-87.663707, 41.877617], + [-87.647453, 41.877934], + [-87.64727, 41.877695], + [-87.64726, 41.876832], + [-87.647034, 41.876672], + [-87.642737, 41.8767], + [-87.642417, 41.876944], + [-87.642534, 41.877878], + [-87.642373, 41.878006], + [-87.6244, 41.87829], + [-87.624374, 41.876148], + [-87.624191, 41.874798], + [-87.624046, 41.874695], + [-87.62368, 41.874855] + ] + } + }, + { + "id": "106", + "type": "Feature", + "properties": { + "route_id": "68", + "shape_id": "64803215", + "direction": "East", + "trip_id": 108, + "route_short_name": "68", + "route_long_name": "Northwest Highway", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/68/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.831283, 42.010067], + [-87.831697, 42.010432], + [-87.8316, 42.010853], + [-87.829265, 42.010837], + [-87.816263, 42.002627], + [-87.813688, 42.001173], + [-87.811717, 41.999815], + [-87.797412, 41.991303], + [-87.766417, 41.974065], + [-87.76197, 41.969269], + [-87.761015, 41.969663], + [-87.761287, 41.969988], + [-87.761569, 41.969806] + ] + } + }, + { + "id": "107", + "type": "Feature", + "properties": { + "route_id": "68", + "shape_id": "64703214", + "direction": "West", + "trip_id": 108, + "route_short_name": "68", + "route_long_name": "Northwest Highway", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/68/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.76168, 41.969702], + [-87.762212, 41.96964], + [-87.766444, 41.974195], + [-87.798063, 41.991788], + [-87.809397, 41.998638], + [-87.809745, 41.998647], + [-87.811748, 41.999855], + [-87.81321, 42.0008], + [-87.81345, 42.00111], + [-87.825163, 42.008302], + [-87.825513, 42.008437], + [-87.826785, 42.00742], + [-87.831235, 42.010042] + ] + } + }, + { + "id": "108", + "type": "Feature", + "properties": { + "route_id": "43", + "shape_id": "64708179", + "direction": "East", + "trip_id": 108, + "route_short_name": "43", + "route_long_name": "43rd", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/43/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.645572, 41.8176], + [-87.64577, 41.81756], + [-87.64574, 41.81864], + [-87.64457, 41.81896], + [-87.633602, 41.819053], + [-87.633412, 41.816367], + [-87.631377, 41.816383], + [-87.631187, 41.816128], + [-87.63109, 41.812212], + [-87.631297, 41.81148], + [-87.632427, 41.809398], + [-87.632427, 41.809103], + [-87.632235, 41.80904], + [-87.630837, 41.809215], + [-87.629438, 41.811457], + [-87.629422, 41.816193], + [-87.629263, 41.816392], + [-87.625782, 41.816407], + [-87.625877, 41.81647], + [-87.62521, 41.816573], + [-87.62095, 41.816503], + [-87.598888, 41.816908], + [-87.597808, 41.81694], + [-87.59768, 41.817027], + [-87.597808, 41.817305] + ] + } + }, + { + "id": "109", + "type": "Feature", + "properties": { + "route_id": "88", + "shape_id": "64704672", + "direction": "East", + "trip_id": 110, + "route_short_name": "88", + "route_long_name": "Higgins", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/88/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.820952, 41.996836], + [-87.810525, 41.997128], + [-87.807345, 41.995403], + [-87.806853, 41.995293], + [-87.80688, 41.98584], + [-87.807037, 41.98568], + [-87.80693, 41.98568], + [-87.80691, 41.98509], + [-87.807043, 41.98233], + [-87.806948, 41.981195], + [-87.806805, 41.981035], + [-87.794582, 41.97846], + [-87.778465, 41.973247], + [-87.76507, 41.96965], + [-87.763213, 41.970569], + [-87.76196, 41.96928], + [-87.761162, 41.969571], + [-87.761043, 41.969786], + [-87.761248, 41.969938], + [-87.761489, 41.969742] + ] + } + }, + { + "id": "110", + "type": "Feature", + "properties": { + "route_id": "88", + "shape_id": "64801728", + "direction": "West", + "trip_id": 110, + "route_short_name": "88", + "route_long_name": "Higgins", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/88/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.761594, 41.969647], + [-87.762267, 41.969686], + [-87.763224, 41.970629], + [-87.765145, 41.969655], + [-87.765432, 41.969718], + [-87.778433, 41.973278], + [-87.794647, 41.978483], + [-87.808442, 41.981512], + [-87.808347, 41.981902], + [-87.807819, 41.982604], + [-87.807025, 41.982616], + [-87.807012, 41.985772], + [-87.808203, 41.986518], + [-87.81221, 41.988363], + [-87.821985, 41.993322], + [-87.82208, 41.993632], + [-87.821715, 41.995618], + [-87.821365, 41.996778], + [-87.820998, 41.996835] + ] + } + }, + { + "id": "111", + "type": "Feature", + "properties": { + "route_id": "97", + "shape_id": "64704369", + "direction": "East", + "trip_id": 118, + "route_short_name": "97", + "route_long_name": "Skokie", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/97/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.750443, 42.059363], + [-87.750188, 42.060667], + [-87.751348, 42.060753], + [-87.752128, 42.059068], + [-87.752017, 42.058155], + [-87.751603, 42.057337], + [-87.751523, 42.055278], + [-87.7472, 42.055175], + [-87.746962, 42.054977], + [-87.74712, 42.04211], + [-87.74803, 42.0408], + [-87.75215, 42.04085], + [-87.75233, 42.04041], + [-87.752207, 42.039845], + [-87.752017, 42.039782], + [-87.751922, 42.039908], + [-87.752097, 42.04071], + [-87.751922, 42.040767], + [-87.74811, 42.0407], + [-87.74863, 42.03985], + [-87.750665, 42.034488], + [-87.754512, 42.027708], + [-87.754465, 42.026183], + [-87.709022, 42.026333], + [-87.699677, 42.026565], + [-87.699502, 42.026517], + [-87.699677, 42.020032], + [-87.699628, 42.019388], + [-87.699437, 42.019293], + [-87.68925, 42.01953], + [-87.676389, 42.019382], + [-87.67558, 42.017608], + [-87.675198, 42.016138], + [-87.672941, 42.017166], + [-87.672949, 42.018063] + ] + } + }, + { + "id": "112", + "type": "Feature", + "properties": { + "route_id": "18", + "shape_id": "64703916", + "direction": "East", + "trip_id": 118, + "route_short_name": "18", + "route_long_name": "16th-18th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/18/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.743593, 41.858353], + [-87.743307, 41.858503], + [-87.73663, 41.85871], + [-87.70338, 41.859117], + [-87.702887, 41.859083], + [-87.702823, 41.858782], + [-87.702663, 41.85871], + [-87.696105, 41.86105], + [-87.69574, 41.86106], + [-87.695862, 41.861047], + [-87.69574, 41.86106], + [-87.69574, 41.86132], + [-87.69446, 41.86178], + [-87.69326, 41.86219], + [-87.69326, 41.86204], + [-87.693117, 41.862052], + [-87.68604, 41.86462], + [-87.685912, 41.858988], + [-87.685752, 41.85728], + [-87.68553, 41.857217], + [-87.6841, 41.857542], + [-87.65614, 41.857928], + [-87.653042, 41.858107], + [-87.64664, 41.85809], + [-87.6469, 41.86711], + [-87.626878, 41.867357], + [-87.62451, 41.867182], + [-87.624002, 41.867643], + [-87.624037, 41.869236], + [-87.625845, 41.869215], + [-87.625845, 41.867563], + [-87.626752, 41.86754] + ] + } + }, + { + "id": "113", + "type": "Feature", + "properties": { + "route_id": "63W", + "shape_id": "64804595", + "direction": "West", + "trip_id": 119, + "route_short_name": "63W", + "route_long_name": "West 63rd", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/63W/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.738857, 41.786375], + [-87.739105, 41.786364], + [-87.739357, 41.786122], + [-87.740003, 41.784376], + [-87.741572, 41.784184], + [-87.742457, 41.78295], + [-87.742567, 41.782229], + [-87.742385, 41.778705], + [-87.742638, 41.778507], + [-87.777257, 41.777712], + [-87.80013, 41.777458], + [-87.81426, 41.777052], + [-87.814895, 41.776917], + [-87.814912, 41.776615], + [-87.814657, 41.776695] + ] + } + }, + { + "id": "114", + "type": "Feature", + "properties": { + "route_id": "63W", + "shape_id": "64804597", + "direction": "East", + "trip_id": 119, + "route_short_name": "63W", + "route_long_name": "West 63rd", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/63W/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.81472, 41.776845], + [-87.814435, 41.777028], + [-87.801433, 41.77718], + [-87.791992, 41.777513], + [-87.74256, 41.778435], + [-87.742098, 41.778777], + [-87.74232, 41.78199], + [-87.742162, 41.782997], + [-87.741128, 41.784252], + [-87.739747, 41.784348], + [-87.73927, 41.78457], + [-87.738347, 41.78585], + [-87.738427, 41.786215], + [-87.738713, 41.786407] + ] + } + }, + { + "id": "115", + "type": "Feature", + "properties": { + "route_id": "97", + "shape_id": "64804372", + "direction": "West", + "trip_id": 119, + "route_short_name": "97", + "route_long_name": "Skokie", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/97/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.672957, 42.01818], + [-87.673052, 42.018642], + [-87.673975, 42.019412], + [-87.6899, 42.019603], + [-87.699502, 42.01938], + [-87.699677, 42.019475], + [-87.699517, 42.026445], + [-87.699755, 42.026668], + [-87.72614, 42.026287], + [-87.74924, 42.02626], + [-87.75448, 42.02639], + [-87.754592, 42.026668], + [-87.75448, 42.027852], + [-87.751253, 42.033288], + [-87.750062, 42.036125], + [-87.749935, 42.03611], + [-87.74863, 42.03985], + [-87.74803, 42.0408], + [-87.750451, 42.040872], + [-87.750641, 42.040867], + [-87.750831, 42.040863], + [-87.75121, 42.040853], + [-87.751561, 42.040819], + [-87.752079, 42.040811], + [-87.752323, 42.040466], + [-87.752287, 42.039995], + [-87.752092, 42.039757], + [-87.751899, 42.039851], + [-87.752049, 42.040719], + [-87.750573, 42.040853], + [-87.750569, 42.040973], + [-87.750564, 42.041093], + [-87.75064, 42.04109], + [-87.75063, 42.04261], + [-87.750523, 42.046282], + [-87.746803, 42.04997], + [-87.746723, 42.053887], + [-87.746962, 42.055333], + [-87.751523, 42.055493], + [-87.751555, 42.057248], + [-87.752017, 42.058537], + [-87.75092, 42.058577], + [-87.75049, 42.059275] + ] + } + }, + { + "id": "116", + "type": "Feature", + "properties": { + "route_id": "57", + "shape_id": "64801326", + "direction": "South", + "trip_id": 120, + "route_short_name": "57", + "route_long_name": "Laramie", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/57/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.757612, 41.917377], + [-87.75607, 41.916917], + [-87.756038, 41.916512], + [-87.755752, 41.910725], + [-87.756007, 41.909152], + [-87.756007, 41.907897], + [-87.75564, 41.894648], + [-87.755323, 41.88953], + [-87.754687, 41.871267], + [-87.754353, 41.871125], + [-87.745055, 41.871347], + [-87.7448, 41.871602], + [-87.7448, 41.872277], + [-87.745055, 41.873287], + [-87.745405, 41.87335] + ] + } + }, + { + "id": "117", + "type": "Feature", + "properties": { + "route_id": "57", + "shape_id": "64801328", + "direction": "North", + "trip_id": 120, + "route_short_name": "57", + "route_long_name": "Laramie", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/57/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.745437, 41.87335], + [-87.754767, 41.873207], + [-87.75483, 41.874867], + [-87.754942, 41.87486], + [-87.754973, 41.87517], + [-87.75502, 41.880065], + [-87.755545, 41.891747], + [-87.755545, 41.896643], + [-87.755705, 41.897072], + [-87.755958, 41.907587], + [-87.755832, 41.907667], + [-87.755878, 41.908723], + [-87.755657, 41.910208], + [-87.755863, 41.912037], + [-87.755958, 41.915788], + [-87.75615, 41.917132], + [-87.75642, 41.917235], + [-87.756498, 41.917043], + [-87.75677, 41.917075], + [-87.75785, 41.917385], + [-87.757707, 41.917617], + [-87.757532, 41.917577], + [-87.75758, 41.917442] + ] + } + }, + { + "id": "118", + "type": "Feature", + "properties": { + "route_id": "44", + "shape_id": "64807014", + "direction": "North", + "trip_id": 121, + "route_short_name": "44", + "route_long_name": "Wallace-Racine", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/44/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.653073, 41.736568], + [-87.65328, 41.736593], + [-87.653295, 41.736767], + [-87.653502, 41.74214], + [-87.653423, 41.744445], + [-87.653772, 41.751295], + [-87.655187, 41.808658], + [-87.645603, 41.808873], + [-87.645428, 41.808985], + [-87.64564, 41.81238], + [-87.645536, 41.812826], + [-87.64564, 41.81282], + [-87.64574, 41.81864], + [-87.64457, 41.81896], + [-87.641232, 41.818935], + [-87.640913, 41.81907], + [-87.641343, 41.834105], + [-87.641343, 41.841585], + [-87.64155, 41.84512], + [-87.641422, 41.845407], + [-87.63837, 41.84547], + [-87.63826, 41.846043], + [-87.63846, 41.850942], + [-87.638746, 41.851026], + [-87.639854, 41.850491], + [-87.64076, 41.84981], + [-87.64068, 41.84971], + [-87.64252, 41.84878], + [-87.64263, 41.84892], + [-87.64252, 41.84878], + [-87.64293, 41.84861], + [-87.64445, 41.84818], + [-87.644443, 41.84828], + [-87.64721, 41.84687], + [-87.64752, 41.84696], + [-87.64841, 41.84652] + ] + } + }, + { + "id": "119", + "type": "Feature", + "properties": { + "route_id": "44", + "shape_id": "64807015", + "direction": "South", + "trip_id": 121, + "route_short_name": "44", + "route_long_name": "Wallace-Racine", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/44/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.648452, 41.846533], + [-87.648457, 41.846392], + [-87.648214, 41.846323], + [-87.64445, 41.84818], + [-87.641867, 41.849055], + [-87.639038, 41.850772], + [-87.638705, 41.850922], + [-87.638482, 41.850818], + [-87.63837, 41.845582], + [-87.641582, 41.84543], + [-87.641645, 41.845312], + [-87.6412, 41.825475], + [-87.641057, 41.825237], + [-87.64091, 41.8191], + [-87.644553, 41.818968], + [-87.645859, 41.818502], + [-87.64557, 41.81035], + [-87.645681, 41.810345], + [-87.64557, 41.81035], + [-87.64553, 41.80886], + [-87.65296, 41.808825], + [-87.65525, 41.80873], + [-87.65524, 41.80846], + [-87.655378, 41.80846], + [-87.65524, 41.80846], + [-87.655267, 41.80521], + [-87.6539, 41.758822], + [-87.653438, 41.737228], + [-87.653423, 41.73687], + [-87.65293, 41.73668], + [-87.653152, 41.73649] + ] + } + }, + { + "id": "120", + "type": "Feature", + "properties": { + "route_id": "111A", + "shape_id": "64707135", + "direction": "South", + "trip_id": 123, + "route_short_name": "111A", + "route_long_name": "Pullman Shuttle", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/111A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.580936, 41.708365], + [-87.580767, 41.708046], + [-87.581056, 41.707922], + [-87.594229, 41.707613], + [-87.594342, 41.70668], + [-87.59422, 41.70081], + [-87.597008, 41.69546], + [-87.597442, 41.695195], + [-87.599937, 41.69514], + [-87.600462, 41.694933], + [-87.600732, 41.694472], + [-87.600668, 41.693407], + [-87.600843, 41.69293], + [-87.609777, 41.692795], + [-87.610317, 41.690848], + [-87.610873, 41.687748], + [-87.611143, 41.68732], + [-87.611462, 41.685888] + ] + } + }, + { + "id": "121", + "type": "Feature", + "properties": { + "route_id": "111A", + "shape_id": "64707134", + "direction": "North", + "trip_id": 123, + "route_short_name": "111A", + "route_long_name": "Pullman Shuttle", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/111A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.611477, 41.685738], + [-87.61154, 41.68546], + [-87.613085, 41.685477], + [-87.61321, 41.692732], + [-87.60059, 41.69282], + [-87.60064, 41.69455], + [-87.60034, 41.69498], + [-87.59768, 41.69513], + [-87.59712, 41.6953], + [-87.59412, 41.70071], + [-87.594216, 41.705937], + [-87.594055, 41.707583], + [-87.580896, 41.70779], + [-87.580785, 41.708737], + [-87.581746, 41.7089], + [-87.582271, 41.708636], + [-87.5821, 41.708508], + [-87.580923, 41.708509] + ] + } + }, + { + "id": "122", + "type": "Feature", + "properties": { + "route_id": "35", + "shape_id": "64814102", + "direction": "East", + "trip_id": 124, + "route_short_name": "35", + "route_long_name": "35th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/35/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.744355, 41.846583], + [-87.744488, 41.846682], + [-87.744183, 41.846626], + [-87.744114, 41.84235], + [-87.7439, 41.84157], + [-87.74387, 41.84003], + [-87.743996, 41.840025], + [-87.74387, 41.84003], + [-87.74382, 41.83865], + [-87.743947, 41.838652], + [-87.74382, 41.83865], + [-87.74369, 41.83668], + [-87.724599, 41.836821], + [-87.70506, 41.83723], + [-87.70482, 41.83715], + [-87.7048, 41.83682], + [-87.70459, 41.82807], + [-87.704155, 41.828042], + [-87.69477, 41.82826], + [-87.69478, 41.82999], + [-87.69411, 41.83011], + [-87.680262, 41.83028], + [-87.680191, 41.829488], + [-87.681198, 41.828732], + [-87.681179, 41.828463], + [-87.680994, 41.828355], + [-87.677596, 41.830324], + [-87.677306, 41.830336], + [-87.61406, 41.831087], + [-87.613342, 41.831276], + [-87.613341, 41.833564], + [-87.61444, 41.833707], + [-87.614489, 41.83461], + [-87.613429, 41.83479], + [-87.613454, 41.838423], + [-87.607982, 41.838592], + [-87.607794, 41.838674], + [-87.607805, 41.839057] + ] + } + }, + { + "id": "123", + "type": "Feature", + "properties": { + "route_id": "18", + "shape_id": "64703918", + "direction": "West", + "trip_id": 125, + "route_short_name": "18", + "route_long_name": "16th-18th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/18/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.626863, 41.867532], + [-87.63125, 41.867563], + [-87.64691, 41.86721], + [-87.64689, 41.86675], + [-87.646999, 41.866747], + [-87.64689, 41.86675], + [-87.64664, 41.85809], + [-87.658778, 41.858012], + [-87.66481, 41.857784], + [-87.670795, 41.857805], + [-87.670952, 41.857693], + [-87.675675, 41.857757], + [-87.675797, 41.857609], + [-87.6841, 41.857463], + [-87.685657, 41.857185], + [-87.6858, 41.857335], + [-87.68584, 41.8597], + [-87.685705, 41.859688], + [-87.68594, 41.863], + [-87.68588, 41.86485], + [-87.68807, 41.86402], + [-87.68814, 41.86412], + [-87.690743, 41.863272], + [-87.702906, 41.858939], + [-87.702918, 41.859148], + [-87.703332, 41.859148], + [-87.730035, 41.85887], + [-87.743306, 41.858653], + [-87.743297, 41.858228], + [-87.74371, 41.858219], + [-87.743657, 41.858353] + ] + } + }, + { + "id": "124", + "type": "Feature", + "properties": { + "route_id": "54B", + "shape_id": "64701286", + "direction": "South", + "trip_id": 127, + "route_short_name": "54B", + "route_long_name": "South Cicero", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/54B/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.738602, 41.851495], + [-87.74159, 41.851495], + [-87.744148, 41.851295], + [-87.744308, 41.851018], + [-87.743878, 41.838652], + [-87.743577, 41.817528], + [-87.743243, 41.809573], + [-87.743292, 41.807061], + [-87.742906, 41.794632], + [-87.741695, 41.791993], + [-87.741319, 41.784482], + [-87.741169, 41.784318], + [-87.740989, 41.784275], + [-87.74081, 41.784232], + [-87.739718, 41.784264], + [-87.739211, 41.784528], + [-87.738299, 41.785728], + [-87.738357, 41.786242], + [-87.738588, 41.786541], + [-87.738835, 41.786623], + [-87.739336, 41.786459], + [-87.73942, 41.78591], + [-87.73998, 41.78492], + [-87.73998, 41.78428], + [-87.74084, 41.78428], + [-87.740975, 41.784275], + [-87.74111, 41.78427], + [-87.74123, 41.78427], + [-87.74152, 41.78431], + [-87.74233, 41.7831], + [-87.742543, 41.782193], + [-87.742273, 41.77675], + [-87.74199, 41.76432], + [-87.742098, 41.764337], + [-87.741628, 41.754545], + [-87.741391, 41.754339], + [-87.740587, 41.754337], + [-87.737594, 41.753433], + [-87.736446, 41.753429], + [-87.735481, 41.75403], + [-87.734263, 41.75407], + [-87.733379, 41.754622], + [-87.733744, 41.755145], + [-87.733043, 41.755227], + [-87.73305, 41.75648] + ] + } + }, + { + "id": "125", + "type": "Feature", + "properties": { + "route_id": "54B", + "shape_id": "64701277", + "direction": "North", + "trip_id": 127, + "route_short_name": "54B", + "route_long_name": "South Cicero", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/54B/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.73305, 41.756509], + [-87.732967, 41.75672], + [-87.732491, 41.756677], + [-87.73249, 41.75514], + [-87.734121, 41.754146], + [-87.735287, 41.754087], + [-87.736476, 41.753473], + [-87.737599, 41.753463], + [-87.739523, 41.753941], + [-87.740516, 41.754391], + [-87.741478, 41.754482], + [-87.74178, 41.768588], + [-87.74232, 41.78257], + [-87.74215, 41.78309], + [-87.74133, 41.78428], + [-87.73998, 41.78428], + [-87.73946, 41.78442], + [-87.738283, 41.785669], + [-87.738724, 41.786637], + [-87.739123, 41.786595], + [-87.739354, 41.786431], + [-87.739418, 41.785865], + [-87.739922, 41.785048], + [-87.740024, 41.784403], + [-87.740827, 41.784358], + [-87.741214, 41.784535], + [-87.741462, 41.792188], + [-87.74271, 41.79491], + [-87.742764, 41.796344], + [-87.742543, 41.796515], + [-87.74277, 41.79651], + [-87.742735, 41.798502], + [-87.742973, 41.801697], + [-87.743482, 41.834202], + [-87.743783, 41.83932], + [-87.743752, 41.841878], + [-87.744133, 41.850938], + [-87.74434, 41.85124], + [-87.736885, 41.851383], + [-87.737172, 41.851558], + [-87.738553, 41.851495] + ] + } + }, + { + "id": "126", + "type": "Feature", + "properties": { + "route_id": "82", + "shape_id": "64705070", + "direction": "South", + "trip_id": 128, + "route_short_name": "82", + "route_long_name": "Kimball-Homan", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/82/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.714092, 42.00943], + [-87.714792, 42.009073], + [-87.714918, 42.008842], + [-87.71379, 42.00877], + [-87.712932, 42.007952], + [-87.711548, 42.007785], + [-87.71139, 42.006737], + [-87.71139, 42.005885], + [-87.71166, 42.004658], + [-87.711689, 41.997714], + [-87.711962, 41.996603], + [-87.714028, 41.99472], + [-87.714155, 41.994292], + [-87.71358, 41.97796], + [-87.713615, 41.973787], + [-87.713393, 41.967747], + [-87.713393, 41.966738], + [-87.713568, 41.966707], + [-87.713345, 41.966555], + [-87.713298, 41.96607], + [-87.713313, 41.964942], + [-87.71352, 41.96487], + [-87.713345, 41.964203], + [-87.712837, 41.953005], + [-87.712837, 41.950493], + [-87.713012, 41.95016], + [-87.712503, 41.938517], + [-87.712423, 41.932287], + [-87.7122, 41.930475], + [-87.712328, 41.930292], + [-87.712137, 41.922965], + [-87.711867, 41.91849], + [-87.711915, 41.915677], + [-87.711723, 41.910725], + [-87.711962, 41.909867], + [-87.711548, 41.900338], + [-87.711137, 41.884865], + [-87.7112, 41.882958], + [-87.710452, 41.863828], + [-87.710509, 41.862868], + [-87.714792, 41.862763], + [-87.715363, 41.862557], + [-87.714792, 41.846512], + [-87.715013, 41.846067], + [-87.71716, 41.846027], + [-87.717287, 41.845915], + [-87.71724, 41.840733], + [-87.71696, 41.83519], + [-87.71462, 41.83524], + [-87.71457, 41.83672] + ] + } + }, + { + "id": "127", + "type": "Feature", + "properties": { + "route_id": "51", + "shape_id": "64807020", + "direction": "West", + "trip_id": 134, + "route_short_name": "51", + "route_long_name": "51st", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/51/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.632045, 41.80916], + [-87.63249, 41.809175], + [-87.63268, 41.808785], + [-87.63252, 41.80471], + [-87.632013, 41.802078], + [-87.632013, 41.801935], + [-87.632235, 41.801888], + [-87.70357, 41.800878], + [-87.70376, 41.800918], + [-87.703777, 41.801125], + [-87.703888, 41.805058], + [-87.704015, 41.805185], + [-87.704523, 41.805147], + [-87.704842, 41.804702], + [-87.704555, 41.80459], + [-87.704412, 41.80482] + ] + } + }, + { + "id": "128", + "type": "Feature", + "properties": { + "route_id": "51", + "shape_id": "64707021", + "direction": "East", + "trip_id": 134, + "route_short_name": "51", + "route_long_name": "51st", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/51/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.704492, 41.804844], + [-87.704381, 41.805095], + [-87.70393, 41.805127], + [-87.703825, 41.801053], + [-87.703618, 41.800807], + [-87.692285, 41.801045], + [-87.66962, 41.801125], + [-87.639245, 41.801697], + [-87.631933, 41.801697], + [-87.630885, 41.801808], + [-87.630645, 41.802055], + [-87.630888, 41.809198], + [-87.631577, 41.809198] + ] + } + }, + { + "id": "129", + "type": "Feature", + "properties": { + "route_id": "28", + "shape_id": "64710941", + "direction": "North", + "trip_id": 136, + "route_short_name": "28", + "route_long_name": "Stony Island", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/28/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.58123, 41.708555], + [-87.58088, 41.708467], + [-87.580912, 41.707975], + [-87.581102, 41.707895], + [-87.58382, 41.708038], + [-87.58436, 41.708427], + [-87.584567, 41.70973], + [-87.585077, 41.72313], + [-87.584885, 41.725817], + [-87.585362, 41.748163], + [-87.585632, 41.750413], + [-87.585457, 41.751582], + [-87.585827, 41.763277], + [-87.585728, 41.763955], + [-87.585935, 41.768922], + [-87.585838, 41.771068], + [-87.586205, 41.775033], + [-87.586157, 41.777028], + [-87.58633, 41.77726], + [-87.58642, 41.77877], + [-87.5863, 41.778762], + [-87.58642, 41.77877], + [-87.58651, 41.78266], + [-87.586363, 41.782663], + [-87.58651, 41.78266], + [-87.58652, 41.78284], + [-87.58658, 41.7859], + [-87.586458, 41.785905], + [-87.58658, 41.7859], + [-87.58663, 41.78614], + [-87.58657, 41.789522], + [-87.58667, 41.78951], + [-87.58671, 41.79125], + [-87.586538, 41.793288], + [-87.586618, 41.793432], + [-87.587667, 41.793447], + [-87.58781, 41.79355], + [-87.587253, 41.796325], + [-87.58719, 41.799877], + [-87.587618, 41.802158], + [-87.589082, 41.805837], + [-87.59056, 41.8081], + [-87.59166, 41.809044], + [-87.591975, 41.809573], + [-87.59164, 41.809502], + [-87.591703, 41.80923] + ] + } + }, + { + "id": "130", + "type": "Feature", + "properties": { + "route_id": "78", + "shape_id": "64807910", + "direction": "West", + "trip_id": 137, + "route_short_name": "78", + "route_long_name": "Montrose", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/78/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.639165, 41.964864], + [-87.638607, 41.964414], + [-87.638521, 41.963832], + [-87.638747, 41.963329], + [-87.639369, 41.962914], + [-87.647674, 41.961922], + [-87.65498, 41.961787], + [-87.65533, 41.962073], + [-87.657397, 41.96526], + [-87.658157, 41.96545], + [-87.666796, 41.965207], + [-87.665994, 41.961701], + [-87.752318, 41.96077], + [-87.79409, 41.960133], + [-87.7949, 41.959888], + [-87.808856, 41.953273] + ] + } + }, + { + "id": "131", + "type": "Feature", + "properties": { + "route_id": "78", + "shape_id": "64807911", + "direction": "East", + "trip_id": 137, + "route_short_name": "78", + "route_long_name": "Montrose", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/78/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.808909, 41.953253], + [-87.809649, 41.952718], + [-87.807324, 41.952744], + [-87.807186, 41.952873], + [-87.80722, 41.95383], + [-87.80707, 41.95397], + [-87.795632, 41.959384], + [-87.79399, 41.96002], + [-87.77824, 41.96035], + [-87.769882, 41.960333], + [-87.769327, 41.960468], + [-87.71335, 41.96115], + [-87.679082, 41.961376], + [-87.66768, 41.961628], + [-87.66625, 41.961675], + [-87.66598, 41.961818], + [-87.666663, 41.965188], + [-87.64877, 41.965463], + [-87.643967, 41.966086], + [-87.643334, 41.966285], + [-87.642819, 41.966676], + [-87.639686, 41.965296], + [-87.639295, 41.964971] + ] + } + }, + { + "id": "132", + "type": "Feature", + "properties": { + "route_id": "28", + "shape_id": "64702156", + "direction": "South", + "trip_id": 138, + "route_short_name": "28", + "route_long_name": "Stony Island", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/28/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.591497, 41.809333], + [-87.591863, 41.809072], + [-87.590497, 41.80772], + [-87.589521, 41.806245], + [-87.588173, 41.803211], + [-87.587302, 41.799678], + [-87.587365, 41.796873], + [-87.587635, 41.794893], + [-87.588, 41.793527], + [-87.587922, 41.793368], + [-87.586693, 41.793268], + [-87.586587, 41.787877], + [-87.58672, 41.787552], + [-87.586271, 41.769857], + [-87.586458, 41.768017], + [-87.58603, 41.751485], + [-87.585823, 41.750532], + [-87.585967, 41.747942], + [-87.585568, 41.734328], + [-87.585505, 41.725578], + [-87.585172, 41.723305], + [-87.585252, 41.722097], + [-87.584948, 41.713077], + [-87.585045, 41.711487], + [-87.585298, 41.710677], + [-87.585838, 41.709977], + [-87.586983, 41.709095], + [-87.587222, 41.708713], + [-87.587285, 41.708085], + [-87.587207, 41.707768], + [-87.587, 41.707705], + [-87.580762, 41.707783], + [-87.580794, 41.708544], + [-87.581695, 41.708792], + [-87.582162, 41.708732], + [-87.582237, 41.708568], + [-87.581395, 41.708544] + ] + } + }, + { + "id": "133", + "type": "Feature", + "properties": { + "route_id": "52A", + "shape_id": "64707458", + "direction": "North", + "trip_id": 138, + "route_short_name": "52A", + "route_long_name": "South Kedzie", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/52A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.717272, 41.684148], + [-87.717233, 41.684015], + [-87.715328, 41.683991], + [-87.702697, 41.684185], + [-87.700595, 41.68428], + [-87.700474, 41.684579], + [-87.7016, 41.71333], + [-87.701484, 41.713335], + [-87.7016, 41.71333], + [-87.70177, 41.71873], + [-87.701675, 41.720535], + [-87.70199, 41.72608], + [-87.70218, 41.73426], + [-87.701958, 41.73691], + [-87.70264, 41.75782], + [-87.702868, 41.771547], + [-87.703475, 41.793455], + [-87.703618, 41.794402], + [-87.703697, 41.801283], + [-87.703888, 41.805043], + [-87.704, 41.805178], + [-87.704428, 41.805185], + [-87.70489, 41.804702], + [-87.70454, 41.80459], + [-87.704253, 41.804765] + ] + } + }, + { + "id": "134", + "type": "Feature", + "properties": { + "route_id": "112", + "shape_id": "64700749", + "direction": "West", + "trip_id": 140, + "route_short_name": "112", + "route_long_name": "Vincennes/111th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/112/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.624019, 41.722512], + [-87.624008, 41.721793], + [-87.640738, 41.721668], + [-87.650673, 41.721358], + [-87.659335, 41.698], + [-87.664708, 41.690212], + [-87.670272, 41.691977], + [-87.670955, 41.69204], + [-87.71902, 41.69134], + [-87.719385, 41.69123], + [-87.719385, 41.691078] + ] + } + }, + { + "id": "135", + "type": "Feature", + "properties": { + "route_id": "112", + "shape_id": "64800752", + "direction": "East", + "trip_id": 141, + "route_short_name": "112", + "route_long_name": "Vincennes/111th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/112/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.71956, 41.691142], + [-87.71957, 41.69129], + [-87.71932, 41.6913], + [-87.685212, 41.691818], + [-87.677233, 41.691762], + [-87.670763, 41.691977], + [-87.66706, 41.69076], + [-87.664565, 41.69018], + [-87.659272, 41.697977], + [-87.650562, 41.72135], + [-87.624857, 41.721642], + [-87.624878, 41.722775], + [-87.62403, 41.722771], + [-87.624025, 41.722642] + ] + } + }, + { + "id": "136", + "type": "Feature", + "properties": { + "route_id": "52A", + "shape_id": "64807456", + "direction": "South", + "trip_id": 141, + "route_short_name": "52A", + "route_long_name": "South Kedzie", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/52A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.704253, 41.804803], + [-87.704333, 41.804947], + [-87.704205, 41.805043], + [-87.703983, 41.804972], + [-87.70322, 41.778665], + [-87.703062, 41.77811], + [-87.703062, 41.770638], + [-87.702775, 41.761412], + [-87.702887, 41.760593], + [-87.702172, 41.73978], + [-87.702172, 41.735638], + [-87.702378, 41.734288], + [-87.701965, 41.72301], + [-87.702012, 41.720468], + [-87.701328, 41.702618], + [-87.70114, 41.701], + [-87.70114, 41.7007], + [-87.701265, 41.700718], + [-87.70114, 41.7007], + [-87.7011, 41.69982], + [-87.70101, 41.69705], + [-87.701153, 41.69711], + [-87.701153, 41.696967], + [-87.700693, 41.684378], + [-87.70516, 41.684507], + [-87.708418, 41.684252], + [-87.716382, 41.684077], + [-87.717002, 41.684085], + [-87.717287, 41.684252] + ] + } + }, + { + "id": "137", + "type": "Feature", + "properties": { + "route_id": "84", + "shape_id": "64701682", + "direction": "West", + "trip_id": 142, + "route_short_name": "84", + "route_long_name": "Peterson", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/84/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.658477, 41.983705], + [-87.66012, 41.98365], + [-87.664645, 41.986503], + [-87.664898, 41.986822], + [-87.665662, 41.987098], + [-87.669747, 41.989738], + [-87.672258, 41.99081], + [-87.674355, 41.990778], + [-87.674642, 41.990938], + [-87.674943, 41.990778], + [-87.679505, 41.990715], + [-87.679777, 41.990827], + [-87.67984, 41.990715], + [-87.684893, 41.990715], + [-87.68491, 41.990612], + [-87.686945, 41.990557], + [-87.699295, 41.990588], + [-87.749393, 41.989983], + [-87.752732, 41.99085], + [-87.763253, 41.995785], + [-87.764128, 41.996158], + [-87.764622, 41.996023] + ] + } + }, + { + "id": "138", + "type": "Feature", + "properties": { + "route_id": "8A", + "shape_id": "64707129", + "direction": "North", + "trip_id": 142, + "route_short_name": "8A", + "route_long_name": "South Halsted", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/8A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.637735, 41.663168], + [-87.638053, 41.66335], + [-87.641295, 41.663318], + [-87.641375, 41.663462], + [-87.642408, 41.695465], + [-87.642583, 41.70497], + [-87.642742, 41.70582], + [-87.64279, 41.714498], + [-87.642948, 41.714777], + [-87.64306, 41.716883], + [-87.64306, 41.717615], + [-87.642917, 41.717662], + [-87.64298, 41.72046], + [-87.64325, 41.723558], + [-87.64395, 41.749686], + [-87.64281, 41.749819], + [-87.642824, 41.750595], + [-87.642698, 41.750659], + [-87.627026, 41.750935], + [-87.627079, 41.751328], + [-87.62749, 41.751342], + [-87.62752, 41.751196] + ] + } + }, + { + "id": "139", + "type": "Feature", + "properties": { + "route_id": "8A", + "shape_id": "64707128", + "direction": "South", + "trip_id": 142, + "route_short_name": "8A", + "route_long_name": "South Halsted", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/8A/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.627608, 41.751057], + [-87.62996, 41.75086], + [-87.642743, 41.750688], + [-87.642866, 41.750578], + [-87.642882, 41.749808], + [-87.64403, 41.749682], + [-87.64333, 41.724227], + [-87.643082, 41.708962], + [-87.642822, 41.708698], + [-87.64279, 41.707927], + [-87.64279, 41.705685], + [-87.642917, 41.70524], + [-87.642822, 41.701568], + [-87.642138, 41.68058], + [-87.64182, 41.675447], + [-87.641932, 41.674207], + [-87.64147, 41.66219], + [-87.641343, 41.662055], + [-87.641008, 41.662078], + [-87.637767, 41.663057] + ] + } + }, + { + "id": "140", + "type": "Feature", + "properties": { + "route_id": "84", + "shape_id": "64701681", + "direction": "East", + "trip_id": 144, + "route_short_name": "84", + "route_long_name": "Peterson", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/84/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.764573, 41.996167], + [-87.764462, 41.996247], + [-87.75278, 41.990842], + [-87.750745, 41.99019], + [-87.749172, 41.989873], + [-87.67223, 41.99077], + [-87.66968, 41.98952], + [-87.66012, 41.98365], + [-87.65592, 41.98369], + [-87.654971, 41.983816], + [-87.653619, 41.983699], + [-87.65352, 41.983855], + [-87.655108, 41.983895], + [-87.658327, 41.983711] + ] + } + }, + { + "id": "141", + "type": "Feature", + "properties": { + "route_id": "103", + "shape_id": "64800717", + "direction": "East", + "trip_id": 151, + "route_short_name": "103", + "route_long_name": "West 103rd", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/103/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.720673, 41.704375], + [-87.720815, 41.70443], + [-87.720815, 41.70582], + [-87.719528, 41.705885], + [-87.70405, 41.70614], + [-87.701598, 41.706043], + [-87.69782, 41.7062], + [-87.690092, 41.706178], + [-87.69003, 41.70628], + [-87.690028, 41.706178], + [-87.69003, 41.70628], + [-87.68704, 41.706318], + [-87.6868, 41.70632], + [-87.686802, 41.706178], + [-87.6868, 41.70632], + [-87.68423, 41.70634], + [-87.68217, 41.70633], + [-87.68214, 41.70594], + [-87.68175, 41.70592], + [-87.681743, 41.706323], + [-87.65361, 41.70683], + [-87.64305, 41.70692], + [-87.643044, 41.706815], + [-87.64305, 41.70692], + [-87.62016, 41.70721], + [-87.62016, 41.70748], + [-87.619933, 41.707458], + [-87.62016, 41.70748], + [-87.620007, 41.708487], + [-87.619874, 41.708564], + [-87.61998, 41.70866], + [-87.619742, 41.708642], + [-87.61998, 41.70866], + [-87.61989, 41.71051], + [-87.619695, 41.71051], + [-87.61989, 41.71051], + [-87.62041, 41.715103], + [-87.62056, 41.721849], + [-87.623831, 41.721775], + [-87.62392, 41.72087], + [-87.624486, 41.720854] + ] + } + }, + { + "id": "142", + "type": "Feature", + "properties": { + "route_id": "4", + "shape_id": "64800441", + "direction": "North", + "trip_id": 152, + "route_short_name": "4", + "route_long_name": "Cottage Grove", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/4/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.60887, 41.72096], + [-87.60852, 41.721103], + [-87.60852, 41.721397], + [-87.608997, 41.721603], + [-87.609045, 41.72181], + [-87.607248, 41.722033], + [-87.606597, 41.72193], + [-87.60469, 41.722048], + [-87.604403, 41.72228], + [-87.605262, 41.754387], + [-87.605215, 41.75759], + [-87.605468, 41.762907], + [-87.605437, 41.766108], + [-87.60592, 41.77956], + [-87.60584, 41.780821], + [-87.60596, 41.78199], + [-87.60585, 41.781995], + [-87.60597, 41.78222], + [-87.605962, 41.787478], + [-87.60682, 41.823902], + [-87.610587, 41.831213], + [-87.611238, 41.831348], + [-87.616658, 41.831277], + [-87.617491, 41.83113], + [-87.621728, 41.831205], + [-87.621728, 41.832922], + [-87.621903, 41.832858], + [-87.621872, 41.838278], + [-87.622063, 41.838572], + [-87.623017, 41.838795], + [-87.623207, 41.839693], + [-87.623318, 41.845582], + [-87.62362, 41.847695], + [-87.623668, 41.853387], + [-87.623715, 41.85453], + [-87.62389, 41.854872], + [-87.623858, 41.858193], + [-87.624002, 41.858417], + [-87.624082, 41.866165], + [-87.623953, 41.869582], + [-87.62417, 41.87437], + [-87.624128, 41.878118], + [-87.624336, 41.880424], + [-87.624225, 41.884237], + [-87.623715, 41.884365], + [-87.620758, 41.884367], + [-87.620533, 41.884522], + [-87.620533, 41.884741] + ] + } + }, + { + "id": "143", + "type": "Feature", + "properties": { + "route_id": "124", + "shape_id": "64810950", + "direction": "East", + "trip_id": 153, + "route_short_name": "124", + "route_long_name": "Navy Pier", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/124/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.640033, 41.877898], + [-87.639531, 41.87805], + [-87.639645, 41.883167], + [-87.624414, 41.88324], + [-87.624232, 41.883359], + [-87.624203, 41.884364], + [-87.620626, 41.884363], + [-87.62052, 41.888008], + [-87.620088, 41.890954], + [-87.611519, 41.891122], + [-87.611523, 41.892383], + [-87.610478, 41.892997], + [-87.61008, 41.892983], + [-87.610011, 41.892461] + ] + } + }, + { + "id": "144", + "type": "Feature", + "properties": { + "route_id": "82", + "shape_id": "64705066", + "direction": "North", + "trip_id": 154, + "route_short_name": "82", + "route_long_name": "Kimball-Homan", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/82/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.714552, 41.83674], + [-87.71457, 41.836971], + [-87.714775, 41.837093], + [-87.716873, 41.83707], + [-87.717065, 41.837317], + [-87.717272, 41.846067], + [-87.717192, 41.846193], + [-87.714823, 41.84632], + [-87.7153, 41.8622], + [-87.715157, 41.862478], + [-87.713043, 41.86243], + [-87.710373, 41.862645], + [-87.710643, 41.87157], + [-87.710833, 41.873215], + [-87.710738, 41.877148], + [-87.7112, 41.885637], + [-87.711088, 41.886335], + [-87.711168, 41.889602], + [-87.711358, 41.891072], + [-87.711398, 41.895692], + [-87.711597, 41.899718], + [-87.711803, 41.900172], + [-87.711548, 41.900418], + [-87.711708, 41.901182], + [-87.711947, 41.907587], + [-87.711803, 41.911973], + [-87.712233, 41.929425], + [-87.712153, 41.931707], + [-87.712312, 41.93324], + [-87.712407, 41.941553], + [-87.71263, 41.943603], + [-87.712788, 41.95376], + [-87.713233, 41.963242], + [-87.713155, 41.96476], + [-87.713552, 41.974693], + [-87.713583, 41.981107], + [-87.71406, 41.993608], + [-87.714028, 41.994267], + [-87.71379, 41.994728], + [-87.711915, 41.996453], + [-87.711628, 41.997097], + [-87.711517, 42.006602], + [-87.711565, 42.007833], + [-87.712788, 42.007968], + [-87.713233, 42.008158], + [-87.713568, 42.008667], + [-87.713345, 42.008962], + [-87.714252, 42.009407] + ] + } + }, + { + "id": "145", + "type": "Feature", + "properties": { + "route_id": "124", + "shape_id": "64804708", + "direction": "West", + "trip_id": 155, + "route_short_name": "124", + "route_long_name": "Navy Pier", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/124/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.609991, 41.892311], + [-87.609979, 41.89218], + [-87.61221, 41.89196], + [-87.62022, 41.89181], + [-87.620784, 41.887444], + [-87.620846, 41.884522], + [-87.624451, 41.884447], + [-87.624571, 41.883527], + [-87.62448, 41.88211], + [-87.64118, 41.88185], + [-87.64106, 41.87803], + [-87.64018, 41.87804] + ] + } + }, + { + "id": "146", + "type": "Feature", + "properties": { + "route_id": "4", + "shape_id": "64700432", + "direction": "South", + "trip_id": 156, + "route_short_name": "4", + "route_long_name": "Cottage Grove", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/4/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.620534, 41.884868], + [-87.620664, 41.887537], + [-87.620804, 41.887916], + [-87.623063, 41.888307], + [-87.624555, 41.888238], + [-87.624567, 41.883478], + [-87.62418, 41.86931], + [-87.624232, 41.865511], + [-87.62408, 41.8646], + [-87.62406, 41.86384], + [-87.62419, 41.863837], + [-87.62406, 41.86384], + [-87.624033, 41.859975], + [-87.62389, 41.85933], + [-87.623922, 41.85771], + [-87.62405, 41.85763], + [-87.623907, 41.857463], + [-87.623875, 41.856883], + [-87.623843, 41.85004], + [-87.623715, 41.849173], + [-87.623287, 41.831332], + [-87.623017, 41.830958], + [-87.619598, 41.831015], + [-87.619313, 41.830855], + [-87.619002, 41.831054], + [-87.616648, 41.831069], + [-87.61642, 41.83095], + [-87.610873, 41.83095], + [-87.610348, 41.830418], + [-87.607455, 41.824887], + [-87.606947, 41.823592], + [-87.606057, 41.789045], + [-87.606085, 41.782426], + [-87.605867, 41.780032], + [-87.605867, 41.77276], + [-87.605293, 41.75557], + [-87.604785, 41.728653], + [-87.60452, 41.72208], + [-87.606693, 41.72216], + [-87.609235, 41.722002], + [-87.609363, 41.721898], + [-87.609347, 41.721397], + [-87.609235, 41.72112], + [-87.609028, 41.72108] + ] + } + }, + { + "id": "147", + "type": "Feature", + "properties": { + "route_id": "103", + "shape_id": "64700711", + "direction": "West", + "trip_id": 156, + "route_short_name": "103", + "route_long_name": "West 103rd", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/103/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.624612, 41.720868], + [-87.624813, 41.720866], + [-87.624813, 41.721618], + [-87.620618, 41.721702], + [-87.620568, 41.714983], + [-87.619902, 41.71066], + [-87.62021, 41.70721], + [-87.716858, 41.706075], + [-87.721006, 41.705911], + [-87.720875, 41.704089], + [-87.720772, 41.704331] + ] + } + }, + { + "id": "148", + "type": "Feature", + "properties": { + "route_id": "63", + "shape_id": "64710917", + "direction": "West", + "trip_id": 156, + "route_short_name": "63", + "route_long_name": "63rd", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/63/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.586528, 41.779834], + [-87.58642, 41.77877], + [-87.58688, 41.77876], + [-87.58892, 41.77875], + [-87.58901, 41.78058], + [-87.591928, 41.780624], + [-87.618641, 41.780246], + [-87.62367, 41.78], + [-87.625187, 41.78012], + [-87.661672, 41.779572], + [-87.66299, 41.77948], + [-87.66297, 41.77875], + [-87.66412, 41.77874], + [-87.66415, 41.77946], + [-87.664982, 41.779527], + [-87.68098, 41.7792], + [-87.685937, 41.779308], + [-87.72174, 41.77866], + [-87.74219, 41.77849], + [-87.74225, 41.78289], + [-87.74133, 41.78428], + [-87.73979, 41.78431], + [-87.73917, 41.78464], + [-87.73865, 41.78542], + [-87.73825, 41.78569], + [-87.73852, 41.78626], + [-87.7388, 41.78641] + ] + } + }, + { + "id": "149", + "type": "Feature", + "properties": { + "route_id": "63", + "shape_id": "64805210", + "direction": "East", + "trip_id": 157, + "route_short_name": "63", + "route_long_name": "63rd", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/63/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.738983, 41.786358], + [-87.739366, 41.786183], + [-87.739949, 41.785008], + [-87.740027, 41.784402], + [-87.741532, 41.784242], + [-87.74247, 41.782907], + [-87.742567, 41.782229], + [-87.742385, 41.778815], + [-87.742342, 41.778543], + [-87.742063, 41.778359], + [-87.68462, 41.77926], + [-87.683135, 41.779116], + [-87.64471, 41.77978], + [-87.631982, 41.77985], + [-87.62679, 41.78004], + [-87.623618, 41.779958], + [-87.60837, 41.78037], + [-87.584533, 41.780601], + [-87.582251, 41.780376], + [-87.58055, 41.779863], + [-87.579925, 41.779257], + [-87.579528, 41.778591], + [-87.578848, 41.776587], + [-87.578411, 41.776092], + [-87.575347, 41.7754], + [-87.575178, 41.77545], + [-87.575077, 41.775844], + [-87.575645, 41.777248], + [-87.575717, 41.778245], + [-87.574754, 41.779778], + [-87.574535, 41.780583], + [-87.57429, 41.780649], + [-87.574064, 41.780332], + [-87.573686, 41.780598], + [-87.574019, 41.780763] + ] + } + }, + { + "id": "150", + "type": "Feature", + "properties": { + "route_id": "152", + "shape_id": "64803041", + "direction": "West", + "trip_id": 158, + "route_short_name": "152", + "route_long_name": "Addison", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/152/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.644398, 41.950324], + [-87.6447, 41.95068], + [-87.64475, 41.95079], + [-87.64481, 41.9509], + [-87.64487, 41.95103], + [-87.64498, 41.95145], + [-87.645, 41.95164], + [-87.64501, 41.95175], + [-87.64502, 41.95212], + [-87.644969, 41.95308], + [-87.645488, 41.953012], + [-87.645167, 41.952639], + [-87.64502, 41.95212], + [-87.64491, 41.95122], + [-87.64485, 41.95102], + [-87.6448, 41.95089], + [-87.64475, 41.95078], + [-87.6447, 41.95068], + [-87.64465, 41.95059], + [-87.64445, 41.95029], + [-87.644529, 41.950261], + [-87.64345, 41.94864], + [-87.64387, 41.94861], + [-87.64381, 41.94851], + [-87.64728, 41.94734], + [-87.661433, 41.947203], + [-87.674737, 41.94683], + [-87.71797, 41.946615], + [-87.764208, 41.946012], + [-87.765495, 41.945892], + [-87.783678, 41.945788], + [-87.814832, 41.945153], + [-87.819425, 41.945312], + [-87.835702, 41.94478], + [-87.835638, 41.944502], + [-87.835352, 41.944605] + ] + } + }, + { + "id": "151", + "type": "Feature", + "properties": { + "route_id": "152", + "shape_id": "64700899", + "direction": "East", + "trip_id": 159, + "route_short_name": "152", + "route_long_name": "Addison", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/152/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.835383, 41.944605], + [-87.835257, 41.944757], + [-87.83478, 41.944812], + [-87.818425, 41.945265], + [-87.814513, 41.94509], + [-87.778942, 41.945765], + [-87.74658, 41.94606], + [-87.706765, 41.946663], + [-87.678663, 41.946798], + [-87.655347, 41.947252], + [-87.647542, 41.94722], + [-87.64345, 41.94864], + [-87.644379, 41.950227] + ] + } + }, + { + "id": "152", + "type": "Feature", + "properties": { + "route_id": "73", + "shape_id": "64802169", + "direction": "West", + "trip_id": 159, + "route_short_name": "73", + "route_long_name": "Armitage", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/73/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.632347, 41.91253], + [-87.63248, 41.91255], + [-87.6343, 41.91553], + [-87.634193, 41.915565], + [-87.6343, 41.91553], + [-87.63613, 41.91848], + [-87.63728, 41.91834], + [-87.65823, 41.91803], + [-87.65821, 41.91741], + [-87.658427, 41.917183], + [-87.6639, 41.91703], + [-87.66776, 41.91612], + [-87.66906, 41.91608], + [-87.6715, 41.91604], + [-87.6716, 41.91787], + [-87.68747, 41.91758], + [-87.68728, 41.91036], + [-87.69503, 41.91028], + [-87.7068, 41.91019], + [-87.706685, 41.911843], + [-87.7069, 41.9174], + [-87.70742, 41.917471], + [-87.753257, 41.916932], + [-87.75367, 41.916813], + [-87.755465, 41.916868], + [-87.75785, 41.917362], + [-87.757738, 41.91764], + [-87.757532, 41.917617], + [-87.757485, 41.917457] + ] + } + }, + { + "id": "153", + "type": "Feature", + "properties": { + "route_id": "65", + "shape_id": "64706657", + "direction": "West", + "trip_id": 159, + "route_short_name": "65", + "route_long_name": "Grand", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/65/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.610127, 41.892605], + [-87.610142, 41.892153], + [-87.610317, 41.892073], + [-87.61379, 41.89189], + [-87.615639, 41.891968], + [-87.62267, 41.89177], + [-87.622572, 41.891677], + [-87.635388, 41.89163], + [-87.64515, 41.89121], + [-87.671882, 41.890985], + [-87.68732, 41.89065], + [-87.70745, 41.89862], + [-87.708949, 41.899337], + [-87.7114, 41.90027], + [-87.71184, 41.90003], + [-87.713434, 41.901116], + [-87.74417, 41.91319], + [-87.74576, 41.913835], + [-87.745779, 41.913971], + [-87.746987, 41.91434], + [-87.748302, 41.914516], + [-87.748731, 41.915071], + [-87.752789, 41.916687], + [-87.75637, 41.91701], + [-87.78224, 41.92178], + [-87.78282, 41.921995], + [-87.78294, 41.92191], + [-87.785283, 41.922702], + [-87.78788, 41.92327], + [-87.78858, 41.92371], + [-87.800393, 41.923533], + [-87.80199, 41.923617], + [-87.802117, 41.923735], + [-87.802053, 41.924045], + [-87.801893, 41.924117], + [-87.801577, 41.92395] + ] + } + }, + { + "id": "154", + "type": "Feature", + "properties": { + "route_id": "73", + "shape_id": "64802170", + "direction": "East", + "trip_id": 159, + "route_short_name": "73", + "route_long_name": "Armitage", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/73/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.757532, 41.917345], + [-87.7575, 41.917203], + [-87.756357, 41.916853], + [-87.75243, 41.916805], + [-87.688533, 41.917528], + [-87.675833, 41.917838], + [-87.67531, 41.917712], + [-87.67151, 41.91772], + [-87.671495, 41.91617], + [-87.671432, 41.916042], + [-87.67097, 41.915987], + [-87.667842, 41.916053], + [-87.663815, 41.917011], + [-87.658318, 41.917083], + [-87.658048, 41.917273], + [-87.658063, 41.917918], + [-87.657842, 41.917982], + [-87.636193, 41.918372], + [-87.63586, 41.918132], + [-87.635097, 41.916662], + [-87.633237, 41.913865], + [-87.633078, 41.913053], + [-87.633076, 41.911095], + [-87.631665, 41.911157], + [-87.6317, 41.911495], + [-87.632266, 41.912401] + ] + } + }, + { + "id": "157", + "type": "Feature", + "properties": { + "route_id": "87", + "shape_id": "64705571", + "direction": "East", + "trip_id": 161, + "route_short_name": "87", + "route_long_name": "87th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/87/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.741683, 41.732849], + [-87.7416, 41.73184], + [-87.74108, 41.73186], + [-87.74093, 41.73448], + [-87.736725, 41.734589], + [-87.719195, 41.734852], + [-87.716217, 41.735054], + [-87.714252, 41.734868], + [-87.64457, 41.73606], + [-87.64306, 41.735942], + [-87.63587, 41.73604], + [-87.63476, 41.73591], + [-87.62989, 41.73603], + [-87.62836, 41.73626], + [-87.62378, 41.736212], + [-87.621875, 41.7364], + [-87.544513, 41.737458], + [-87.54428, 41.73015], + [-87.550515, 41.73007] + ] + } + }, + { + "id": "158", + "type": "Feature", + "properties": { + "route_id": "65", + "shape_id": "64806656", + "direction": "East", + "trip_id": 161, + "route_short_name": "65", + "route_long_name": "Grand", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/65/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.80164, 41.923798], + [-87.801631, 41.923523], + [-87.788872, 41.923557], + [-87.783122, 41.921932], + [-87.775785, 41.920537], + [-87.75607, 41.916917], + [-87.753337, 41.916805], + [-87.748885, 41.915042], + [-87.748265, 41.91446], + [-87.746772, 41.91419], + [-87.744418, 41.913293], + [-87.712944, 41.900792], + [-87.711961, 41.900113], + [-87.711334, 41.900159], + [-87.687588, 41.890666], + [-87.646032, 41.891143], + [-87.643267, 41.891192], + [-87.640798, 41.891446], + [-87.634093, 41.891563], + [-87.63409, 41.890757], + [-87.611526, 41.89112], + [-87.611489, 41.892356], + [-87.610413, 41.892991], + [-87.610191, 41.892991], + [-87.610141, 41.892784] + ] + } + }, + { + "id": "159", + "type": "Feature", + "properties": { + "route_id": "90", + "shape_id": "64802944", + "direction": "North", + "trip_id": 163, + "route_short_name": "90", + "route_long_name": "Harlem", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/90/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.803253, 41.886787], + [-87.80497, 41.88671], + [-87.80503, 41.88788], + [-87.80514, 41.894058], + [-87.80571, 41.9069], + [-87.805603, 41.906906], + [-87.80571, 41.9069], + [-87.80576, 41.90934], + [-87.805649, 41.909346], + [-87.80576, 41.90934], + [-87.80588, 41.91186], + [-87.806195, 41.92458], + [-87.80727, 41.95309], + [-87.806926, 41.981041], + [-87.808544, 41.981588], + [-87.808078, 41.982269] + ] + } + }, + { + "id": "160", + "type": "Feature", + "properties": { + "route_id": "90", + "shape_id": "64805917", + "direction": "South", + "trip_id": 163, + "route_short_name": "90", + "route_long_name": "Harlem", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/90/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.807982, 41.982369], + [-87.807782, 41.982607], + [-87.807068, 41.982581], + [-87.8071, 41.98078], + [-87.80698, 41.98064], + [-87.80701, 41.97882], + [-87.807119, 41.97882], + [-87.80701, 41.97882], + [-87.80703, 41.97733], + [-87.807144, 41.977328], + [-87.80703, 41.97715], + [-87.80705, 41.97645], + [-87.807154, 41.976504], + [-87.80705, 41.97645], + [-87.80715, 41.96922], + [-87.80729, 41.969235], + [-87.80715, 41.96922], + [-87.80717, 41.96754], + [-87.807299, 41.967546], + [-87.80717, 41.96754], + [-87.80719, 41.96524], + [-87.807296, 41.965243], + [-87.80719, 41.96524], + [-87.807301, 41.964051], + [-87.8072, 41.96407], + [-87.80721, 41.96139], + [-87.807345, 41.96139], + [-87.80721, 41.96139], + [-87.80721, 41.95991], + [-87.807411, 41.954248], + [-87.80686, 41.94176], + [-87.806965, 41.941761], + [-87.80686, 41.94176], + [-87.806899, 41.939923], + [-87.80674, 41.93822], + [-87.80685, 41.93822], + [-87.80674, 41.93822], + [-87.80678, 41.9366], + [-87.80667, 41.93641], + [-87.8065, 41.93104], + [-87.806601, 41.931036], + [-87.8065, 41.93104], + [-87.80624, 41.92383], + [-87.806344, 41.923828], + [-87.80624, 41.92383], + [-87.8062, 41.92327], + [-87.806266, 41.921817], + [-87.80582, 41.91083], + [-87.805932, 41.910822], + [-87.80582, 41.91083], + [-87.80575, 41.90911], + [-87.805901, 41.90911], + [-87.80575, 41.90911], + [-87.80574, 41.90889], + [-87.80572, 41.90724], + [-87.805838, 41.907235], + [-87.80572, 41.90724], + [-87.80558, 41.9035], + [-87.805683, 41.903495], + [-87.80558, 41.9035], + [-87.8055, 41.90176], + [-87.805622, 41.901759], + [-87.8055, 41.90176], + [-87.80545, 41.89987], + [-87.80555, 41.89987], + [-87.80537, 41.89806], + [-87.805483, 41.898057], + [-87.80537, 41.89806], + [-87.80529, 41.89627], + [-87.805426, 41.896199], + [-87.80529, 41.8962], + [-87.80524, 41.89443], + [-87.805345, 41.894429], + [-87.80524, 41.89443], + [-87.805262, 41.892381], + [-87.80513, 41.89156], + [-87.80509, 41.89021], + [-87.805226, 41.890211], + [-87.80509, 41.89021], + [-87.80506, 41.88924], + [-87.80505, 41.88882], + [-87.805198, 41.888818], + [-87.80505, 41.88882], + [-87.80499, 41.88712], + [-87.800875, 41.887224], + [-87.800376, 41.886817], + [-87.803065, 41.88678] + ] + } + }, + { + "id": "161", + "type": "Feature", + "properties": { + "route_id": "87", + "shape_id": "64705570", + "direction": "West", + "trip_id": 167, + "route_short_name": "87", + "route_long_name": "87th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/87/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.550775, 41.73014], + [-87.551142, 41.730235], + [-87.551013, 41.731673], + [-87.551205, 41.7318], + [-87.551237, 41.73207], + [-87.5513, 41.735448], + [-87.551507, 41.737252], + [-87.551762, 41.737418], + [-87.613242, 41.736528], + [-87.624702, 41.736482], + [-87.632252, 41.736045], + [-87.634397, 41.73602], + [-87.635748, 41.736243], + [-87.645682, 41.736163], + [-87.665343, 41.73587], + [-87.6655, 41.73575], + [-87.667817, 41.735712], + [-87.676803, 41.735767], + [-87.738268, 41.734702], + [-87.741128, 41.73451], + [-87.74135, 41.733751], + [-87.741705, 41.733574], + [-87.741687, 41.73294] + ] + } + }, + { + "id": "162", + "type": "Feature", + "properties": { + "route_id": "21", + "shape_id": "64804555", + "direction": "East", + "trip_id": 168, + "route_short_name": "21", + "route_long_name": "Cermak", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/21/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.80919, 41.848053], + [-87.808347, 41.84814], + [-87.808363, 41.850032], + [-87.808108, 41.850223], + [-87.761269, 41.851051], + [-87.754494, 41.851021], + [-87.734726, 41.851399], + [-87.724948, 41.85142], + [-87.72208, 41.8516], + [-87.67072, 41.85219], + [-87.643282, 41.852632], + [-87.636495, 41.85287], + [-87.619442, 41.852749], + [-87.619043, 41.852265], + [-87.61909, 41.85105], + [-87.618852, 41.849928], + [-87.617772, 41.848482], + [-87.617636, 41.845721], + [-87.623318, 41.845748], + [-87.623542, 41.847378], + [-87.623748, 41.847418], + [-87.622508, 41.847568] + ] + } + }, + { + "id": "163", + "type": "Feature", + "properties": { + "route_id": "47", + "shape_id": "64806126", + "direction": "East", + "trip_id": 168, + "route_short_name": "47", + "route_long_name": "47th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/47/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.739025, 41.786229], + [-87.739348, 41.78615], + [-87.73996, 41.784962], + [-87.740051, 41.78433], + [-87.740941, 41.78433], + [-87.741183, 41.784486], + [-87.741467, 41.79209], + [-87.74271, 41.79491], + [-87.742764, 41.796344], + [-87.742543, 41.796515], + [-87.742723, 41.796573], + [-87.742942, 41.800545], + [-87.742973, 41.805583], + [-87.742735, 41.805655], + [-87.742782, 41.807243], + [-87.742638, 41.807578], + [-87.72916, 41.807857], + [-87.728428, 41.807753], + [-87.704131, 41.808089], + [-87.703935, 41.8054], + [-87.703983, 41.80525], + [-87.704445, 41.805178], + [-87.704635, 41.805067], + [-87.70489, 41.804668], + [-87.70473, 41.80459], + [-87.704273, 41.804798], + [-87.704687, 41.804925], + [-87.704526, 41.8051], + [-87.703865, 41.805157], + [-87.70384, 41.808102], + [-87.682048, 41.80838], + [-87.682002, 41.808508], + [-87.680682, 41.808547], + [-87.672273, 41.808475], + [-87.64468, 41.808825], + [-87.609458, 41.809508], + [-87.60373, 41.809555], + [-87.60353, 41.80943], + [-87.592197, 41.809652], + [-87.59172, 41.80958], + [-87.591513, 41.809342] + ] + } + }, + { + "id": "164", + "type": "Feature", + "properties": { + "route_id": "47", + "shape_id": "64706128", + "direction": "West", + "trip_id": 170, + "route_short_name": "47", + "route_long_name": "47th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/47/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.591608, 41.80923], + [-87.59152, 41.80943], + [-87.59187, 41.80971], + [-87.593037, 41.809762], + [-87.631503, 41.80923], + [-87.64494, 41.80886], + [-87.646085, 41.80895], + [-87.64608, 41.80885], + [-87.66196, 41.80863], + [-87.684802, 41.808495], + [-87.701427, 41.808222], + [-87.70399, 41.80811], + [-87.703985, 41.807955], + [-87.70398, 41.8078], + [-87.704058, 41.807797], + [-87.7039, 41.80584], + [-87.703968, 41.805258], + [-87.704601, 41.805064], + [-87.704851, 41.80475], + [-87.70477, 41.804562], + [-87.704555, 41.804565], + [-87.704461, 41.805032], + [-87.703845, 41.805231], + [-87.703934, 41.808046], + [-87.703953, 41.808086], + [-87.704049, 41.808132], + [-87.704162, 41.808172], + [-87.74324, 41.80762], + [-87.742903, 41.79497], + [-87.742838, 41.79453], + [-87.742023, 41.793051], + [-87.741729, 41.791773], + [-87.741418, 41.784414], + [-87.741257, 41.78427], + [-87.739926, 41.784274], + [-87.739165, 41.784578], + [-87.738317, 41.78569], + [-87.738424, 41.785922], + [-87.738912, 41.786172] + ] + } + }, + { + "id": "165", + "type": "Feature", + "properties": { + "route_id": "151", + "shape_id": "64706414", + "direction": "North", + "trip_id": 172, + "route_short_name": "151", + "route_long_name": "Sheridan", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/151/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.640029, 41.877794], + [-87.63895, 41.87805], + [-87.629267, 41.878197], + [-87.629351, 41.883115], + [-87.62424, 41.88323], + [-87.624512, 41.887825], + [-87.624002, 41.889872], + [-87.62421, 41.89642], + [-87.623981, 41.898145], + [-87.62414, 41.90045], + [-87.624, 41.90163], + [-87.62447, 41.90243], + [-87.625115, 41.904202], + [-87.625115, 41.90498], + [-87.626005, 41.909343], + [-87.62602, 41.91106], + [-87.62645, 41.91191], + [-87.626895, 41.912292], + [-87.628483, 41.912267], + [-87.630757, 41.913228], + [-87.63173, 41.913344], + [-87.631781, 41.914106], + [-87.634078, 41.91679], + [-87.634635, 41.918895], + [-87.635557, 41.92008], + [-87.635827, 41.925308], + [-87.636113, 41.925753], + [-87.637893, 41.92662], + [-87.638498, 41.92732], + [-87.638737, 41.927932], + [-87.638657, 41.930443], + [-87.638737, 41.931182], + [-87.639001, 41.931531], + [-87.638719, 41.932358], + [-87.639304, 41.932918], + [-87.63961, 41.94144], + [-87.640421, 41.943311], + [-87.642001, 41.946255], + [-87.64481, 41.9509], + [-87.64502, 41.95253], + [-87.645268, 41.95283], + [-87.645587, 41.952902], + [-87.649417, 41.952687], + [-87.65479, 41.952663], + [-87.654853, 41.956025], + [-87.654647, 41.965037], + [-87.65471, 41.966928], + [-87.654853, 41.967295], + [-87.654935, 41.977999], + [-87.65516, 41.98189], + [-87.655362, 41.992415], + [-87.65569, 41.99788], + [-87.65622, 41.99822], + [-87.65845, 41.99822], + [-87.658445, 41.998107], + [-87.662915, 41.998228], + [-87.670465, 41.998137], + [-87.670769, 41.998863], + [-87.670616, 41.999584] + ] + } + }, + { + "id": "166", + "type": "Feature", + "properties": { + "route_id": "91", + "shape_id": "64802945", + "direction": "South", + "trip_id": 173, + "route_short_name": "91", + "route_long_name": "Austin", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/91/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.761831, 41.969774], + [-87.762193, 41.969441], + [-87.76089, 41.967932], + [-87.761357, 41.967653], + [-87.765072, 41.967843], + [-87.774603, 41.967747], + [-87.777147, 41.967683], + [-87.777353, 41.967437], + [-87.77562, 41.921757], + [-87.775668, 41.918197], + [-87.775238, 41.911505], + [-87.77527, 41.909757], + [-87.77562, 41.908962], + [-87.775614, 41.907282], + [-87.775302, 41.901492], + [-87.775238, 41.894917], + [-87.775032, 41.89247], + [-87.774397, 41.870878], + [-87.77418, 41.86728], + [-87.77303, 41.867278], + [-87.77287, 41.865927], + [-87.772965, 41.865505], + [-87.773188, 41.865482], + [-87.773998, 41.865505], + [-87.774078, 41.865815] + ] + } + }, + { + "id": "167", + "type": "Feature", + "properties": { + "route_id": "91", + "shape_id": "64802946", + "direction": "North", + "trip_id": 173, + "route_short_name": "91", + "route_long_name": "Austin", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/91/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.774078, 41.865847], + [-87.774333, 41.86955], + [-87.774222, 41.870267], + [-87.774682, 41.880803], + [-87.774698, 41.884372], + [-87.774857, 41.884738], + [-87.775255, 41.901912], + [-87.775572, 41.908095], + [-87.77554, 41.909128], + [-87.775192, 41.909932], + [-87.77527, 41.912792], + [-87.777215, 41.967567], + [-87.76553, 41.96781], + [-87.76149, 41.9676], + [-87.76078, 41.9679], + [-87.76196, 41.96928], + [-87.76107, 41.969622], + [-87.761016, 41.96981], + [-87.76146, 41.97005], + [-87.761713, 41.969897] + ] + } + }, + { + "id": "168", + "type": "Feature", + "properties": { + "route_id": "21", + "shape_id": "64704557", + "direction": "West", + "trip_id": 177, + "route_short_name": "21", + "route_long_name": "Cermak", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/21/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.622063, 41.847457], + [-87.618217, 41.847568], + [-87.61739, 41.847982], + [-87.617548, 41.848593], + [-87.618725, 41.849985], + [-87.618893, 41.852206], + [-87.619164, 41.852733], + [-87.619506, 41.85295], + [-87.620624, 41.853075], + [-87.624288, 41.852917], + [-87.629703, 41.852997], + [-87.63109, 41.853028], + [-87.63125, 41.853148], + [-87.641025, 41.85275], + [-87.646238, 41.852767], + [-87.67012, 41.85226], + [-87.693143, 41.852012], + [-87.702632, 41.851748], + [-87.71093, 41.851733], + [-87.711358, 41.851987], + [-87.71271, 41.851742], + [-87.726935, 41.851685], + [-87.727745, 41.851535], + [-87.74318, 41.851463], + [-87.754098, 41.851195], + [-87.754044, 41.851774], + [-87.757485, 41.851742], + [-87.759023, 41.85167], + [-87.758996, 41.851103], + [-87.79064, 41.850715], + [-87.809937, 41.850223], + [-87.810095, 41.848418], + [-87.809857, 41.848045], + [-87.809237, 41.848045] + ] + } + }, + { + "id": "170", + "type": "Feature", + "properties": { + "route_id": "67", + "shape_id": "64804605", + "direction": "West", + "trip_id": 178, + "route_short_name": "67", + "route_long_name": "67th-69th-71st", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/67/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.567847, 41.773635], + [-87.571915, 41.77346], + [-87.577065, 41.773532], + [-87.611843, 41.773037], + [-87.61179, 41.77092], + [-87.61377, 41.7694], + [-87.62495, 41.769239], + [-87.625125, 41.76917], + [-87.625172, 41.768813], + [-87.625583, 41.768781], + [-87.626503, 41.76878], + [-87.626577, 41.769097], + [-87.626895, 41.769263], + [-87.672592, 41.768477], + [-87.679537, 41.768517], + [-87.683145, 41.768358], + [-87.683368, 41.76816], + [-87.683305, 41.76483], + [-87.683495, 41.764742], + [-87.722262, 41.764147], + [-87.722468, 41.763915], + [-87.722262, 41.759092], + [-87.72231, 41.755937], + [-87.7225, 41.7553], + [-87.724312, 41.755053], + [-87.732758, 41.754991], + [-87.733409, 41.754717], + [-87.733786, 41.755071], + [-87.733024, 41.755282], + [-87.73305, 41.756423] + ] + } + }, + { + "id": "171", + "type": "Feature", + "properties": { + "route_id": "50", + "shape_id": "64801151", + "direction": "South", + "trip_id": 180, + "route_short_name": "50", + "route_long_name": "Damen", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/50/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.66946, 41.986018], + [-87.668857, 41.983705], + [-87.668762, 41.983777], + [-87.668857, 41.983642], + [-87.669683, 41.983627], + [-87.66981, 41.983475], + [-87.669555, 41.976528], + [-87.669652, 41.976338], + [-87.67612, 41.976283], + [-87.676327, 41.97614], + [-87.679172, 41.976052], + [-87.679347, 41.975933], + [-87.67933, 41.970878], + [-87.678155, 41.934457], + [-87.678155, 41.931905], + [-87.678362, 41.929728], + [-87.677953, 41.925513], + [-87.67763, 41.916797], + [-87.67736, 41.90724], + [-87.677472, 41.907205], + [-87.67736, 41.9072], + [-87.67727, 41.90367], + [-87.677343, 41.901427], + [-87.67694, 41.89239], + [-87.676628, 41.875265], + [-87.675962, 41.857082], + [-87.675373, 41.83196], + [-87.67542, 41.831802], + [-87.677742, 41.830427], + [-87.680142, 41.830338], + [-87.680285, 41.830195], + [-87.680142, 41.829973], + [-87.680188, 41.829497], + [-87.681127, 41.82886] + ] + } + }, + { + "id": "172", + "type": "Feature", + "properties": { + "route_id": "80", + "shape_id": "64810811", + "direction": "West", + "trip_id": 181, + "route_short_name": "80", + "route_long_name": "Irving Park", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/80/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.651532, 41.954603], + [-87.69089, 41.95405], + [-87.707852, 41.954037], + [-87.72417, 41.953737], + [-87.729843, 41.953768], + [-87.732832, 41.953617], + [-87.738585, 41.953665], + [-87.796315, 41.952767], + [-87.80706, 41.952838], + [-87.821842, 41.95237], + [-87.827865, 41.95233], + [-87.829073, 41.95229], + [-87.829105, 41.952178], + [-87.829375, 41.95229], + [-87.831617, 41.952235], + [-87.831665, 41.952115], + [-87.833603, 41.952052], + [-87.836847, 41.952012], + [-87.8378, 41.952163] + ] + } + }, + { + "id": "173", + "type": "Feature", + "properties": { + "route_id": "J14", + "shape_id": "64804276", + "direction": "North", + "trip_id": 181, + "route_short_name": "J14", + "route_long_name": "Jeffery Jump", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/J14/", + "route_color": "0065bd", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.58123, 41.708555], + [-87.580912, 41.70857], + [-87.580657, 41.707872], + [-87.579513, 41.707775], + [-87.563635, 41.708102], + [-87.559613, 41.708253], + [-87.559533, 41.708388], + [-87.55982, 41.708523], + [-87.559565, 41.70884], + [-87.559677, 41.713053], + [-87.559867, 41.713648], + [-87.560122, 41.713648], + [-87.560137, 41.713458], + [-87.560932, 41.713648], + [-87.572316, 41.713427], + [-87.573898, 41.715097], + [-87.573933, 41.71539], + [-87.575282, 41.716695], + [-87.57519, 41.7222], + [-87.575358, 41.723507], + [-87.575618, 41.732477], + [-87.576, 41.757312], + [-87.576413, 41.77311], + [-87.576302, 41.773897], + [-87.575365, 41.774818], + [-87.575062, 41.775375], + [-87.57511, 41.776083], + [-87.57565, 41.777252], + [-87.575713, 41.77811], + [-87.574777, 41.77977], + [-87.574602, 41.780582], + [-87.574935, 41.781487], + [-87.576032, 41.782997], + [-87.57724, 41.785437], + [-87.577605, 41.78666], + [-87.577972, 41.789108], + [-87.579385, 41.790642], + [-87.580005, 41.791747], + [-87.580102, 41.792677], + [-87.579973, 41.793383], + [-87.579147, 41.794853], + [-87.579005, 41.795903], + [-87.579322, 41.796777], + [-87.580753, 41.798343], + [-87.581182, 41.799217], + [-87.581388, 41.802618], + [-87.581563, 41.80335], + [-87.581913, 41.80405], + [-87.582548, 41.804812], + [-87.585505, 41.806933], + [-87.58986, 41.812283], + [-87.592562, 41.814437], + [-87.593833, 41.815668], + [-87.598268, 41.821478], + [-87.600795, 41.82631], + [-87.601638, 41.827223], + [-87.604563, 41.829767], + [-87.606932, 41.832795], + [-87.607615, 41.834345], + [-87.608138, 41.838143], + [-87.611, 41.845073], + [-87.613385, 41.852463], + [-87.613845, 41.853457], + [-87.61518, 41.855388], + [-87.616753, 41.85856], + [-87.618185, 41.861747], + [-87.618978, 41.864575], + [-87.619535, 41.865323], + [-87.619773, 41.865982], + [-87.620315, 41.86793], + [-87.620617, 41.873293], + [-87.623907, 41.873238], + [-87.624018, 41.873357], + [-87.624018, 41.875145], + [-87.62419, 41.87553], + [-87.624177, 41.880527], + [-87.624354, 41.882045], + [-87.62477, 41.882168], + [-87.642515, 41.88187], + [-87.642653, 41.881963], + [-87.64279, 41.884372], + [-87.643012, 41.884443], + [-87.64414, 41.884397], + [-87.644235, 41.884237], + [-87.644138, 41.883164], + [-87.643716, 41.883072] + ] + } + }, + { + "id": "174", + "type": "Feature", + "properties": { + "route_id": "111", + "shape_id": "64706356", + "direction": "North", + "trip_id": 182, + "route_short_name": "111", + "route_long_name": "111th/King Drive", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/111/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.662483, 41.68039], + [-87.662435, 41.677712], + [-87.662117, 41.677528], + [-87.661465, 41.677592], + [-87.661338, 41.677838], + [-87.661513, 41.682655], + [-87.661767, 41.684888], + [-87.667617, 41.68484], + [-87.664057, 41.691055], + [-87.663373, 41.692025], + [-87.663167, 41.692112], + [-87.661227, 41.692008], + [-87.6508, 41.69227], + [-87.61723, 41.692597], + [-87.613893, 41.69274], + [-87.61332, 41.692883], + [-87.613972, 41.71852], + [-87.614178, 41.72197], + [-87.623588, 41.72181], + [-87.623925, 41.72174], + [-87.623973, 41.721271] + ] + } + }, + { + "id": "175", + "type": "Feature", + "properties": { + "route_id": "76", + "shape_id": "64804619", + "direction": "East", + "trip_id": 183, + "route_short_name": "76", + "route_long_name": "Diversey", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/76/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.805502, 41.931182], + [-87.805343, 41.93111], + [-87.805295, 41.930832], + [-87.80315, 41.930785], + [-87.712662, 41.931945], + [-87.711645, 41.931698], + [-87.708323, 41.929695], + [-87.707432, 41.930062], + [-87.707385, 41.931968], + [-87.707273, 41.932072], + [-87.698483, 41.932152], + [-87.694573, 41.932025], + [-87.692507, 41.932183], + [-87.68785, 41.93212], + [-87.651038, 41.932588], + [-87.639483, 41.93289], + [-87.637322, 41.931348], + [-87.63535, 41.928678], + [-87.634683, 41.92759], + [-87.634683, 41.927145] + ] + } + }, + { + "id": "176", + "type": "Feature", + "properties": { + "route_id": "111", + "shape_id": "64806354", + "direction": "South", + "trip_id": 183, + "route_short_name": "111", + "route_long_name": "111th/King Drive", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/111/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.623964, 41.721166], + [-87.623957, 41.720904], + [-87.624859, 41.720902], + [-87.624864, 41.721603], + [-87.615737, 41.721842], + [-87.614178, 41.721732], + [-87.614385, 41.720285], + [-87.61429, 41.718632], + [-87.614083, 41.718187], + [-87.61402, 41.717448], + [-87.614083, 41.71434], + [-87.613893, 41.711702], + [-87.613448, 41.693113], + [-87.613162, 41.692787], + [-87.660908, 41.692232], + [-87.663388, 41.692072], + [-87.66466, 41.690243], + [-87.66768, 41.68484], + [-87.667442, 41.684648], + [-87.6628, 41.684688], + [-87.662542, 41.680444] + ] + } + }, + { + "id": "177", + "type": "Feature", + "properties": { + "route_id": "80", + "shape_id": "64703084", + "direction": "East", + "trip_id": 185, + "route_short_name": "80", + "route_long_name": "Irving Park", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/80/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.837815, 41.952305], + [-87.837593, 41.952052], + [-87.83613, 41.952012], + [-87.806058, 41.952758], + [-87.791785, 41.952862], + [-87.790513, 41.952735], + [-87.781947, 41.952878], + [-87.776916, 41.953129], + [-87.764763, 41.953077], + [-87.763382, 41.953235], + [-87.75677, 41.953203], + [-87.71228, 41.953872], + [-87.686201, 41.953963], + [-87.673243, 41.954268], + [-87.665153, 41.954293], + [-87.664295, 41.954428], + [-87.656412, 41.954587], + [-87.64724, 41.954667], + [-87.64525, 41.95463], + [-87.64501, 41.95324], + [-87.645045, 41.9531], + [-87.649606, 41.952796], + [-87.649671, 41.953285], + [-87.650602, 41.954583], + [-87.651287, 41.954598] + ] + } + }, + { + "id": "178", + "type": "Feature", + "properties": { + "route_id": "92", + "shape_id": "64816549", + "direction": "West", + "trip_id": 186, + "route_short_name": "92", + "route_long_name": "Foster", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/92/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.658178, 41.983613], + [-87.65519, 41.98383], + [-87.65503, 41.9782], + [-87.65503, 41.97793], + [-87.65514, 41.977927], + [-87.65503, 41.97793], + [-87.65499, 41.97638], + [-87.671145, 41.976203], + [-87.671828, 41.976212], + [-87.671782, 41.976322], + [-87.67612, 41.976283], + [-87.676708, 41.976123], + [-87.696385, 41.975822], + [-87.70276, 41.975948], + [-87.703157, 41.97583], + [-87.71317, 41.975813], + [-87.728127, 41.975465], + [-87.728333, 41.975607], + [-87.73323, 41.975552], + [-87.733372, 41.975377], + [-87.73361, 41.975552], + [-87.76257, 41.975233], + [-87.765655, 41.975155], + [-87.766788, 41.974623], + [-87.76234, 41.969707], + [-87.761809, 41.970216], + [-87.762002, 41.970403] + ] + } + }, + { + "id": "179", + "type": "Feature", + "properties": { + "route_id": "92", + "shape_id": "64716548", + "direction": "East", + "trip_id": 186, + "route_short_name": "92", + "route_long_name": "Foster", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/92/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.762191, 41.970515], + [-87.762924, 41.970404], + [-87.765205, 41.972864], + [-87.76656, 41.974495], + [-87.766603, 41.974723], + [-87.765811, 41.975113], + [-87.764914, 41.975156], + [-87.689075, 41.975853], + [-87.659923, 41.976307], + [-87.659733, 41.976505], + [-87.66001, 41.98365], + [-87.658318, 41.983658] + ] + } + }, + { + "id": "180", + "type": "Feature", + "properties": { + "route_id": "50", + "shape_id": "64801192", + "direction": "North", + "trip_id": 187, + "route_short_name": "50", + "route_long_name": "Damen", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/50/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.681158, 41.828845], + [-87.681229, 41.828507], + [-87.68087, 41.828365], + [-87.675299, 41.831886], + [-87.67542, 41.83339], + [-87.675357, 41.839972], + [-87.675563, 41.842553], + [-87.675738, 41.849317], + [-87.675675, 41.852067], + [-87.67612, 41.862207], + [-87.676025, 41.86425], + [-87.676232, 41.872753], + [-87.6775, 41.91047], + [-87.677788, 41.925388], + [-87.67824, 41.930522], + [-87.677948, 41.932223], + [-87.67844, 41.941935], + [-87.678695, 41.954515], + [-87.678982, 41.958147], + [-87.67941, 41.974598], + [-87.679172, 41.975988], + [-87.669523, 41.97629], + [-87.66973, 41.985843], + [-87.669492, 41.986018] + ] + } + }, + { + "id": "181", + "type": "Feature", + "properties": { + "route_id": "56", + "shape_id": "64701970", + "direction": "North", + "trip_id": 187, + "route_short_name": "56", + "route_long_name": "Milwaukee", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/56/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.624857, 41.882146], + [-87.642619, 41.881894], + [-87.642796, 41.886821], + [-87.644207, 41.886809], + [-87.644315, 41.88899], + [-87.64619, 41.890412], + [-87.655663, 41.896555], + [-87.66145, 41.90011], + [-87.66214, 41.90057], + [-87.662022, 41.900672], + [-87.66214, 41.90057], + [-87.68087, 41.91256], + [-87.687194, 41.916773], + [-87.70802, 41.929592], + [-87.7361, 41.94655], + [-87.735963, 41.946672], + [-87.7361, 41.94655], + [-87.749143, 41.954553], + [-87.76148, 41.96868], + [-87.76196, 41.96928], + [-87.761376, 41.969455], + [-87.761022, 41.969763], + [-87.761383, 41.969994], + [-87.761655, 41.969834] + ] + } + }, + { + "id": "182", + "type": "Feature", + "properties": { + "route_id": "115", + "shape_id": "64806357", + "direction": "South", + "trip_id": 190, + "route_short_name": "115", + "route_long_name": "Pullman/115th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/115/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.62396, 41.720925], + [-87.624842, 41.72092], + [-87.624824, 41.721595], + [-87.603228, 41.722002], + [-87.609983, 41.692588], + [-87.610873, 41.687748], + [-87.611143, 41.68732], + [-87.61154, 41.68546], + [-87.662483, 41.68484], + [-87.66269, 41.68476], + [-87.662768, 41.684458], + [-87.662542, 41.680444] + ] + } + }, + { + "id": "183", + "type": "Feature", + "properties": { + "route_id": "76", + "shape_id": "64804621", + "direction": "West", + "trip_id": 190, + "route_short_name": "76", + "route_long_name": "Diversey", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/76/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.634683, 41.927065], + [-87.634507, 41.926845], + [-87.634284, 41.926911], + [-87.636869, 41.930788], + [-87.63746, 41.93152], + [-87.639407, 41.932956], + [-87.67973, 41.932279], + [-87.700079, 41.932156], + [-87.704774, 41.932114], + [-87.706141, 41.932079], + [-87.706311, 41.932074], + [-87.707336, 41.932047], + [-87.707507, 41.932043], + [-87.707421, 41.930553], + [-87.707527, 41.929999], + [-87.707549, 41.929889], + [-87.707591, 41.929667], + [-87.707621, 41.929489], + [-87.707807, 41.929413], + [-87.708242, 41.929673], + [-87.707917, 41.929916], + [-87.70769, 41.929921], + [-87.70753, 41.929931], + [-87.70737, 41.92994], + [-87.707368, 41.931012], + [-87.707367, 41.931145], + [-87.707367, 41.931413], + [-87.707366, 41.931547], + [-87.707366, 41.931815], + [-87.707365, 41.931949], + [-87.707365, 41.932083], + [-87.805781, 41.930784], + [-87.805652, 41.931157] + ] + } + }, + { + "id": "184", + "type": "Feature", + "properties": { + "route_id": "115", + "shape_id": "64806358", + "direction": "North", + "trip_id": 191, + "route_short_name": "115", + "route_long_name": "Pullman/115th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/115/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.662535, 41.680342], + [-87.662435, 41.677595], + [-87.661465, 41.677583], + [-87.661353, 41.677925], + [-87.661592, 41.68414], + [-87.661433, 41.6848], + [-87.660893, 41.684688], + [-87.658732, 41.684855], + [-87.6182, 41.685308], + [-87.613225, 41.685412], + [-87.613067, 41.685523], + [-87.613273, 41.692588], + [-87.61321, 41.692732], + [-87.610078, 41.692795], + [-87.60976, 41.69293], + [-87.607107, 41.704812], + [-87.606915, 41.705495], + [-87.606533, 41.705885], + [-87.606008, 41.707458], + [-87.606105, 41.708015], + [-87.60585, 41.709015], + [-87.606057, 41.709238], + [-87.60318, 41.7221], + [-87.606693, 41.72216], + [-87.623588, 41.72181], + [-87.623915, 41.721716], + [-87.623963, 41.721005] + ] + } + }, + { + "id": "185", + "type": "Feature", + "properties": { + "route_id": "62", + "shape_id": "64707120", + "direction": "South", + "trip_id": 192, + "route_short_name": "62", + "route_long_name": "Archer", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/62/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.628167, 41.888578], + [-87.627823, 41.880988], + [-87.627636, 41.871977], + [-87.627467, 41.87188], + [-87.627435, 41.871562], + [-87.627562, 41.868788], + [-87.627498, 41.865705], + [-87.62734, 41.86576], + [-87.627515, 41.865505], + [-87.627435, 41.86216], + [-87.627277, 41.862048], + [-87.62727, 41.85651], + [-87.63182, 41.8543], + [-87.631727, 41.85461], + [-87.633698, 41.8536], + [-87.63446, 41.853283], + [-87.634635, 41.853187], + [-87.634762, 41.853123], + [-87.63439, 41.85329], + [-87.63426, 41.85313], + [-87.63848, 41.8511], + [-87.638485, 41.851235], + [-87.63849, 41.85137], + [-87.63837, 41.851367], + [-87.63849, 41.85137], + [-87.638485, 41.851235], + [-87.63848, 41.8511], + [-87.64225, 41.8489], + [-87.64252, 41.84878], + [-87.64263, 41.84892], + [-87.64252, 41.84878], + [-87.64293, 41.84861], + [-87.64445, 41.84818], + [-87.644443, 41.84828], + [-87.64721, 41.84687], + [-87.64747, 41.84697], + [-87.647965, 41.846762], + [-87.64844, 41.8465], + [-87.64842, 41.84634], + [-87.664008, 41.83885], + [-87.677742, 41.830427], + [-87.680142, 41.830338], + [-87.680285, 41.830195], + [-87.680253, 41.829448], + [-87.681413, 41.828782], + [-87.681213, 41.828296], + [-87.724647, 41.801617], + [-87.72517, 41.801418], + [-87.725695, 41.801323], + [-87.725855, 41.801275], + [-87.725908, 41.800514], + [-87.7252, 41.80051], + [-87.725034, 41.79999], + [-87.724805, 41.799957], + [-87.724015, 41.800576], + [-87.725782, 41.800584], + [-87.725801, 41.801244], + [-87.725812, 41.801374], + [-87.77794, 41.7934], + [-87.781962, 41.792398], + [-87.799542, 41.792017], + [-87.799763, 41.79204], + [-87.79997, 41.792303], + [-87.800113, 41.792208] + ] + } + }, + { + "id": "186", + "type": "Feature", + "properties": { + "route_id": "147", + "shape_id": "64704526", + "direction": "South", + "trip_id": 192, + "route_short_name": "147", + "route_long_name": "Outer DuSable Lake Shore Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/147/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.673227, 42.017663], + [-87.67302, 42.018068], + [-87.673025, 42.018621], + [-87.673722, 42.019103], + [-87.673744, 42.019366], + [-87.668663, 42.019348], + [-87.668037, 42.019211], + [-87.666122, 42.019237], + [-87.666043, 42.01911], + [-87.664852, 42.015263], + [-87.662928, 42.011822], + [-87.66089, 42.00553], + [-87.66088, 42.00531], + [-87.661005, 42.005303], + [-87.66088, 42.00531], + [-87.66086, 42.00495], + [-87.660791, 41.999849], + [-87.66059, 41.9982], + [-87.65622, 41.99822], + [-87.65586, 41.99808], + [-87.65562, 41.9977], + [-87.65507, 41.97989], + [-87.65503, 41.9779], + [-87.655136, 41.977895], + [-87.65503, 41.9779], + [-87.65499, 41.97638], + [-87.65155, 41.97643], + [-87.65089, 41.97607], + [-87.64949, 41.97414], + [-87.64884, 41.9722], + [-87.64653, 41.96222], + [-87.64608, 41.95853], + [-87.64494, 41.95529], + [-87.64477, 41.95418], + [-87.64478, 41.95164], + [-87.64458, 41.95093], + [-87.63896, 41.94106], + [-87.63749, 41.93942], + [-87.63384, 41.93663], + [-87.63308, 41.93575], + [-87.63241, 41.93452], + [-87.6321, 41.93317], + [-87.63215, 41.92935], + [-87.63197, 41.92809], + [-87.62903, 41.91829], + [-87.62611, 41.9122], + [-87.62582, 41.90889], + [-87.62489, 41.90509], + [-87.62484, 41.90402], + [-87.62417, 41.90216], + [-87.62419, 41.89791], + [-87.624406, 41.895914], + [-87.6242, 41.88988], + [-87.62464, 41.88804], + [-87.624489, 41.884987], + [-87.624567, 41.883478], + [-87.624374, 41.876148], + [-87.624191, 41.874798], + [-87.624046, 41.874695], + [-87.62368, 41.874855] + ] + } + }, + { + "id": "187", + "type": "Feature", + "properties": { + "route_id": "94", + "shape_id": "64714119", + "direction": "South", + "trip_id": 193, + "route_short_name": "94", + "route_long_name": "South California", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/94/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.694097, 41.946067], + [-87.69416, 41.946735], + [-87.694383, 41.946782], + [-87.698055, 41.946718], + [-87.698133, 41.946592], + [-87.697992, 41.944278], + [-87.698198, 41.94323], + [-87.698102, 41.939805], + [-87.697895, 41.934798], + [-87.697688, 41.934432], + [-87.697657, 41.933883], + [-87.697673, 41.926978], + [-87.697418, 41.926502], + [-87.69734, 41.924133], + [-87.697308, 41.922027], + [-87.697418, 41.921892], + [-87.69726, 41.921168], + [-87.697308, 41.91764], + [-87.697053, 41.910932], + [-87.697148, 41.90978], + [-87.69683, 41.901197], + [-87.69707, 41.896365], + [-87.69699, 41.895903], + [-87.696767, 41.895762], + [-87.70221, 41.8956], + [-87.702032, 41.891188], + [-87.701591, 41.889786], + [-87.701313, 41.886518], + [-87.69664, 41.886567], + [-87.696465, 41.886542], + [-87.696433, 41.886352], + [-87.695638, 41.854212], + [-87.695035, 41.838405], + [-87.695003, 41.831292], + [-87.694145, 41.808357], + [-87.693763, 41.80823], + [-87.684528, 41.80838], + [-87.684448, 41.805965], + [-87.684367, 41.8057], + [-87.683863, 41.805659], + [-87.684052, 41.805313], + [-87.683765, 41.804702], + [-87.683765, 41.804502], + [-87.684305, 41.804272], + [-87.684402, 41.803992], + [-87.684273, 41.8013], + [-87.684417, 41.801203], + [-87.694065, 41.800958], + [-87.693, 41.764512], + [-87.683179, 41.764694], + [-87.68319, 41.76505], + [-87.683067, 41.765052], + [-87.68319, 41.76505], + [-87.68326, 41.76831], + [-87.673768, 41.768477], + [-87.67352, 41.7648], + [-87.67352, 41.76456], + [-87.673631, 41.764561], + [-87.67351, 41.76435], + [-87.67345, 41.759513], + [-87.672973, 41.759273], + [-87.671389, 41.759312], + [-87.671173, 41.758603], + [-87.671171, 41.758438], + [-87.671204, 41.758332], + [-87.671238, 41.758225], + [-87.671247, 41.758194], + [-87.67132, 41.758054], + [-87.671124, 41.757974], + [-87.671057, 41.758077], + [-87.671148, 41.758257], + [-87.671228, 41.758349], + [-87.671269, 41.758398], + [-87.671338, 41.758487] + ] + } + }, + { + "id": "188", + "type": "Feature", + "properties": { + "route_id": "94", + "shape_id": "64714118", + "direction": "North", + "trip_id": 194, + "route_short_name": "94", + "route_long_name": "South California", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/94/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.671374, 41.758632], + [-87.671291, 41.759325], + [-87.673366, 41.759328], + [-87.673482, 41.766507], + [-87.67364, 41.768405], + [-87.673783, 41.768502], + [-87.679537, 41.768517], + [-87.683145, 41.768358], + [-87.683368, 41.76816], + [-87.683305, 41.76483], + [-87.683495, 41.764742], + [-87.692603, 41.764598], + [-87.692968, 41.764623], + [-87.693048, 41.764893], + [-87.693095, 41.771553], + [-87.693953, 41.800918], + [-87.693875, 41.801045], + [-87.686848, 41.801037], + [-87.686357, 41.801172], + [-87.684227, 41.801212], + [-87.684304, 41.804862], + [-87.684147, 41.80521], + [-87.684293, 41.80549], + [-87.684407, 41.808318], + [-87.684589, 41.80849], + [-87.69419, 41.80829], + [-87.696433, 41.88651], + [-87.696783, 41.886677], + [-87.701377, 41.88663], + [-87.701488, 41.889688], + [-87.701965, 41.891422], + [-87.70221, 41.8956], + [-87.69669, 41.89566], + [-87.696688, 41.898368], + [-87.69656, 41.89902], + [-87.696608, 41.899465], + [-87.696815, 41.899638], + [-87.696735, 41.900863], + [-87.69691, 41.9013], + [-87.696958, 41.904598], + [-87.696815, 41.904653], + [-87.697053, 41.909447], + [-87.69699, 41.91299], + [-87.697768, 41.939335], + [-87.696815, 41.939472], + [-87.690855, 41.939518], + [-87.690568, 41.939645], + [-87.690697, 41.940722], + [-87.692569, 41.940734], + [-87.69299, 41.940931], + [-87.693268, 41.942581], + [-87.694065, 41.943962], + [-87.694097, 41.945988] + ] + } + }, + { + "id": "189", + "type": "Feature", + "properties": { + "route_id": "72", + "shape_id": "64812433", + "direction": "West", + "trip_id": 195, + "route_short_name": "72", + "route_long_name": "North", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/72/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.625547, 41.914031], + [-87.626714, 41.912685], + [-87.627883, 41.912344], + [-87.628778, 41.912476], + [-87.630873, 41.913372], + [-87.631772, 41.913462], + [-87.632777, 41.913181], + [-87.632825, 41.913017], + [-87.63182, 41.911302], + [-87.63219, 41.91116], + [-87.634476, 41.911268], + [-87.640869, 41.91119], + [-87.64827, 41.91091], + [-87.678179, 41.910549], + [-87.68697, 41.91031], + [-87.689515, 41.910412], + [-87.707307, 41.910231], + [-87.805526, 41.908942], + [-87.805666, 41.909062], + [-87.805725, 41.91067], + [-87.804044, 41.910666], + [-87.804012, 41.909284] + ] + } + }, + { + "id": "190", + "type": "Feature", + "properties": { + "route_id": "56", + "shape_id": "64801971", + "direction": "South", + "trip_id": 195, + "route_short_name": "56", + "route_long_name": "Milwaukee", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/56/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.761759, 41.969737], + [-87.762195, 41.969463], + [-87.759837, 41.966715], + [-87.75882, 41.965205], + [-87.757198, 41.963678], + [-87.74922, 41.954523], + [-87.74738, 41.95348], + [-87.74712, 41.94612], + [-87.73562, 41.94626], + [-87.714458, 41.933335], + [-87.714188, 41.933495], + [-87.71414, 41.933225], + [-87.711962, 41.931842], + [-87.68713, 41.91667], + [-87.682797, 41.913713], + [-87.666948, 41.903599], + [-87.666595, 41.903656], + [-87.664116, 41.902092], + [-87.66264, 41.900847], + [-87.65595, 41.896517], + [-87.655775, 41.896413], + [-87.655594, 41.896625], + [-87.655775, 41.896437], + [-87.6556, 41.89631], + [-87.65514, 41.896078], + [-87.654265, 41.895522], + [-87.651532, 41.893663], + [-87.651039, 41.893726], + [-87.651118, 41.893463], + [-87.650975, 41.89336], + [-87.64619, 41.890325], + [-87.646143, 41.890135], + [-87.644473, 41.88903], + [-87.644013, 41.883188], + [-87.641785, 41.88335], + [-87.639977, 41.883347], + [-87.639835, 41.883163], + [-87.624612, 41.883203], + [-87.624528, 41.882182], + [-87.625004, 41.882151] + ] + } + }, + { + "id": "191", + "type": "Feature", + "properties": { + "route_id": "62", + "shape_id": "64707111", + "direction": "North", + "trip_id": 197, + "route_short_name": "62", + "route_long_name": "Archer", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/62/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.800098, 41.792097], + [-87.799923, 41.791905], + [-87.799303, 41.791905], + [-87.79382, 41.792223], + [-87.79355, 41.792097], + [-87.791753, 41.792073], + [-87.781818, 41.792303], + [-87.777242, 41.793423], + [-87.742003, 41.798693], + [-87.726029, 41.80126], + [-87.725911, 41.801228], + [-87.725891, 41.800509], + [-87.725167, 41.800501], + [-87.725065, 41.800001], + [-87.724837, 41.799957], + [-87.724108, 41.8005], + [-87.725782, 41.800588], + [-87.72575, 41.80124], + [-87.724741, 41.801468], + [-87.722898, 41.802563], + [-87.680777, 41.828415], + [-87.68065, 41.828512], + [-87.680475, 41.828615], + [-87.680362, 41.828685], + [-87.68025, 41.828756], + [-87.680117, 41.828838], + [-87.680135, 41.829532], + [-87.681238, 41.82894], + [-87.681365, 41.828822], + [-87.681253, 41.828495], + [-87.680968, 41.82832], + [-87.680777, 41.828415], + [-87.663753, 41.83885], + [-87.64521, 41.84784], + [-87.641867, 41.849055], + [-87.640468, 41.849818], + [-87.63969, 41.850453], + [-87.637767, 41.851432], + [-87.627165, 41.856493], + [-87.627038, 41.856803], + [-87.627038, 41.858083], + [-87.627186, 41.862222], + [-87.627397, 41.862442], + [-87.62753, 41.86429], + [-87.627498, 41.86537], + [-87.627355, 41.865697], + [-87.627438, 41.871407], + [-87.62757, 41.872306], + [-87.629067, 41.872353], + [-87.629503, 41.889186], + [-87.628239, 41.889223], + [-87.628162, 41.888688] + ] + } + }, + { + "id": "192", + "type": "Feature", + "properties": { + "route_id": "52", + "shape_id": "64714120", + "direction": "South", + "trip_id": 198, + "route_short_name": "52", + "route_long_name": "Kedzie/California", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/52/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.705605, 41.895538], + [-87.702218, 41.895616], + [-87.702239, 41.896538], + [-87.706218, 41.898204], + [-87.706708, 41.898275], + [-87.704492, 41.825943], + [-87.704492, 41.82282], + [-87.704618, 41.822312], + [-87.703967, 41.806402], + [-87.704032, 41.805225], + [-87.704508, 41.805178], + [-87.70489, 41.804757], + [-87.704572, 41.80459], + [-87.704285, 41.804765], + [-87.704243, 41.805024], + [-87.703935, 41.804984], + [-87.703188, 41.780445], + [-87.703188, 41.77853], + [-87.703363, 41.77826] + ] + } + }, + { + "id": "193", + "type": "Feature", + "properties": { + "route_id": "52", + "shape_id": "64714117", + "direction": "North", + "trip_id": 198, + "route_short_name": "52", + "route_long_name": "Kedzie/California", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/52/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.703412, 41.77818], + [-87.703315, 41.777982], + [-87.703125, 41.77803], + [-87.703062, 41.779198], + [-87.703903, 41.80509], + [-87.704078, 41.805202], + [-87.704523, 41.805162], + [-87.704842, 41.80463], + [-87.704555, 41.804573], + [-87.704333, 41.805043], + [-87.704158, 41.805113], + [-87.703967, 41.805138], + [-87.703872, 41.805265], + [-87.703872, 41.808127], + [-87.704397, 41.818187], + [-87.70446, 41.829615], + [-87.704873, 41.839223], + [-87.705398, 41.857177], + [-87.705318, 41.859378], + [-87.70605, 41.878078], + [-87.706113, 41.8807], + [-87.706002, 41.880875], + [-87.706463, 41.89383], + [-87.70647, 41.895545], + [-87.705862, 41.895544] + ] + } + }, + { + "id": "194", + "type": "Feature", + "properties": { + "route_id": "72", + "shape_id": "64812432", + "direction": "East", + "trip_id": 199, + "route_short_name": "72", + "route_long_name": "North", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/72/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.804008, 41.909094], + [-87.803944, 41.908939], + [-87.801324, 41.90886], + [-87.78559, 41.90915], + [-87.780977, 41.909095], + [-87.77837, 41.90923], + [-87.778371, 41.909125], + [-87.77837, 41.90923], + [-87.77739, 41.90925], + [-87.775216, 41.909163], + [-87.687481, 41.910225], + [-87.67273, 41.91057], + [-87.632622, 41.911098], + [-87.631628, 41.911238], + [-87.632633, 41.913139], + [-87.63193, 41.913305], + [-87.630954, 41.913211], + [-87.628652, 41.912255], + [-87.627928, 41.912171], + [-87.627182, 41.912295], + [-87.626817, 41.912516], + [-87.62537, 41.913801], + [-87.625437, 41.91399] + ] + } + }, + { + "id": "195", + "type": "Feature", + "properties": { + "route_id": "36", + "shape_id": "64705907", + "direction": "North", + "trip_id": 200, + "route_short_name": "36", + "route_long_name": "Broadway", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/36/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.633125, 41.875145], + [-87.633054, 41.875519], + [-87.629173, 41.875657], + [-87.629557, 41.890764], + [-87.627978, 41.890952], + [-87.628303, 41.901833], + [-87.628689, 41.903883], + [-87.628786, 41.903995], + [-87.63144, 41.90399], + [-87.631455, 41.909374], + [-87.631562, 41.909336], + [-87.631615, 41.911289], + [-87.63586, 41.918243], + [-87.636177, 41.918355], + [-87.637067, 41.919563], + [-87.639038, 41.922822], + [-87.641295, 41.927033], + [-87.642408, 41.928543], + [-87.642786, 41.929628], + [-87.64352, 41.930138], + [-87.644678, 41.932134], + [-87.644823, 41.932922], + [-87.644172, 41.934083], + [-87.644315, 41.935155], + [-87.644516, 41.942831], + [-87.64708, 41.947203], + [-87.649497, 41.950835], + [-87.649647, 41.95325], + [-87.651007, 41.955048], + [-87.654071, 41.960203], + [-87.65967, 41.96883], + [-87.659563, 41.968878], + [-87.65967, 41.96888], + [-87.65974, 41.97113], + [-87.65974, 41.97183], + [-87.659622, 41.971832], + [-87.65974, 41.97183], + [-87.65979, 41.97267], + [-87.65967, 41.973533], + [-87.659987, 41.985318], + [-87.660225, 41.9888], + [-87.660337, 41.996175], + [-87.660524, 41.998059], + [-87.660655, 41.998231], + [-87.670465, 41.998137], + [-87.670769, 41.998863], + [-87.670616, 41.999584] + ] + } + }, + { + "id": "196", + "type": "Feature", + "properties": { + "route_id": "15", + "shape_id": "64804288", + "direction": "North", + "trip_id": 202, + "route_short_name": "15", + "route_long_name": "Jeffery Local", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/15/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.58123, 41.708555], + [-87.580912, 41.70857], + [-87.580657, 41.707872], + [-87.579863, 41.707783], + [-87.564473, 41.708127], + [-87.564533, 41.713463], + [-87.572265, 41.71353], + [-87.573362, 41.714555], + [-87.575158, 41.716708], + [-87.575205, 41.717383], + [-87.574983, 41.717288], + [-87.575078, 41.718815], + [-87.575253, 41.719148], + [-87.57519, 41.7222], + [-87.575358, 41.723507], + [-87.575747, 41.73978], + [-87.576207, 41.766507], + [-87.576525, 41.773293], + [-87.576557, 41.773437], + [-87.57689, 41.773532], + [-87.58609, 41.77334], + [-87.586157, 41.777028], + [-87.58633, 41.77726], + [-87.58642, 41.77877], + [-87.5863, 41.778762], + [-87.58642, 41.77877], + [-87.58651, 41.78266], + [-87.586363, 41.782663], + [-87.58651, 41.78266], + [-87.58658, 41.7859], + [-87.586458, 41.785905], + [-87.58658, 41.7859], + [-87.58663, 41.78614], + [-87.58657, 41.789522], + [-87.58667, 41.78951], + [-87.58671, 41.79125], + [-87.586538, 41.793288], + [-87.586618, 41.793432], + [-87.587667, 41.793447], + [-87.58781, 41.79355], + [-87.587365, 41.79557], + [-87.587142, 41.797922], + [-87.587348, 41.800584], + [-87.587234, 41.800715], + [-87.58737, 41.80077], + [-87.58778, 41.80247], + [-87.592165, 41.802578], + [-87.597108, 41.802475], + [-87.59749, 41.802333], + [-87.605247, 41.802253], + [-87.606232, 41.8023], + [-87.606295, 41.80246], + [-87.606772, 41.802277], + [-87.60763, 41.802237], + [-87.63072, 41.80188], + [-87.63088, 41.8092], + [-87.63161, 41.809175] + ] + } + }, + { + "id": "197", + "type": "Feature", + "properties": { + "route_id": "15", + "shape_id": "64704287", + "direction": "South", + "trip_id": 203, + "route_short_name": "15", + "route_long_name": "Jeffery Local", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/15/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.631853, 41.809175], + [-87.632427, 41.809095], + [-87.63268, 41.808857], + [-87.63252, 41.80471], + [-87.631902, 41.801633], + [-87.630613, 41.801625], + [-87.629485, 41.801848], + [-87.618613, 41.801967], + [-87.617485, 41.80211], + [-87.615768, 41.802087], + [-87.615562, 41.801952], + [-87.611462, 41.801975], + [-87.610952, 41.80219], + [-87.608092, 41.80223], + [-87.607917, 41.802222], + [-87.607917, 41.802055], + [-87.606693, 41.802055], + [-87.603642, 41.802142], + [-87.603323, 41.802325], + [-87.593109, 41.802357], + [-87.591068, 41.80254], + [-87.587894, 41.802354], + [-87.587428, 41.800473], + [-87.587332, 41.797551], + [-87.587635, 41.794893], + [-87.588, 41.793527], + [-87.587922, 41.793368], + [-87.586693, 41.793268], + [-87.586587, 41.787877], + [-87.58672, 41.787552], + [-87.58634, 41.77333], + [-87.57649, 41.77343], + [-87.57647, 41.769661], + [-87.576255, 41.767667], + [-87.576413, 41.766283], + [-87.576353, 41.762507], + [-87.57622, 41.76233], + [-87.57635, 41.762327], + [-87.576011, 41.758435], + [-87.576127, 41.755078], + [-87.575937, 41.754912], + [-87.575857, 41.754235], + [-87.575778, 41.746234], + [-87.575905, 41.744087], + [-87.575842, 41.742195], + [-87.575667, 41.741727], + [-87.575667, 41.736307], + [-87.57519, 41.716717], + [-87.573965, 41.715118], + [-87.572313, 41.71345], + [-87.564692, 41.713466], + [-87.564594, 41.708117], + [-87.579625, 41.707927], + [-87.580467, 41.70799], + [-87.580673, 41.708737] + ] + } + }, + { + "id": "198", + "type": "Feature", + "properties": { + "route_id": "146", + "shape_id": "64806582", + "direction": "North", + "trip_id": 204, + "route_short_name": "146", + "route_long_name": "Inner Lake Shore/Michigan Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/146/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.607628, 41.866215], + [-87.60742, 41.866266], + [-87.607446, 41.866487], + [-87.613689, 41.866437], + [-87.614168, 41.866203], + [-87.614081, 41.865699], + [-87.614236, 41.865123], + [-87.6194, 41.86497], + [-87.6203, 41.86758], + [-87.627326, 41.867562], + [-87.627688, 41.881566], + [-87.62793, 41.88565], + [-87.62787, 41.88577], + [-87.62442, 41.88577], + [-87.62447, 41.88801], + [-87.624002, 41.889903], + [-87.62421, 41.89621], + [-87.623981, 41.898145], + [-87.62409, 41.90013], + [-87.62361, 41.90234], + [-87.62479, 41.90571], + [-87.62538, 41.90798], + [-87.62567, 41.90941], + [-87.62586, 41.91205], + [-87.62853, 41.91748], + [-87.629, 41.91872], + [-87.62977, 41.9217], + [-87.63178, 41.92813], + [-87.63194, 41.92924], + [-87.6319, 41.93312], + [-87.63219, 41.93454], + [-87.63293, 41.93587], + [-87.6336, 41.93665], + [-87.6369, 41.93916], + [-87.63808, 41.94055], + [-87.63954, 41.94012], + [-87.63961, 41.94144], + [-87.640421, 41.943311], + [-87.642411, 41.946974], + [-87.64481, 41.9509], + [-87.64501, 41.95175], + [-87.644955, 41.953181], + [-87.645302, 41.954952], + [-87.645603, 41.956105], + [-87.64613, 41.95722], + [-87.64668, 41.95935], + [-87.64696, 41.96224], + [-87.64681, 41.962248], + [-87.64696, 41.96224], + [-87.64824, 41.96407], + [-87.649682, 41.969551], + [-87.65213, 41.97643], + [-87.65982, 41.97632], + [-87.65985, 41.97815], + [-87.65947, 41.978155] + ] + } + }, + { + "id": "199", + "type": "Feature", + "properties": { + "route_id": "146", + "shape_id": "64707451", + "direction": "South", + "trip_id": 205, + "route_short_name": "146", + "route_long_name": "Inner Lake Shore/Michigan Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/146/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.65933, 41.978117], + [-87.65503, 41.97822], + [-87.65503, 41.97793], + [-87.65514, 41.977927], + [-87.65503, 41.97793], + [-87.65499, 41.97638], + [-87.65213, 41.97643], + [-87.6499, 41.97011], + [-87.64824, 41.96407], + [-87.64685, 41.96194], + [-87.646858, 41.960468], + [-87.64637, 41.95778], + [-87.64533, 41.95516], + [-87.64499, 41.95307], + [-87.645106, 41.952111], + [-87.644529, 41.950261], + [-87.64143, 41.94509], + [-87.63995, 41.9423], + [-87.63957, 41.94121], + [-87.63922, 41.94094], + [-87.63855, 41.93987], + [-87.6351, 41.93764], + [-87.63384, 41.93663], + [-87.63276, 41.93525], + [-87.63227, 41.93404], + [-87.6321, 41.93317], + [-87.63215, 41.92935], + [-87.63197, 41.92809], + [-87.62903, 41.91829], + [-87.62611, 41.9122], + [-87.62582, 41.90889], + [-87.62489, 41.90509], + [-87.62481, 41.90388], + [-87.62417, 41.90216], + [-87.62419, 41.89791], + [-87.624406, 41.895914], + [-87.6242, 41.88988], + [-87.62453, 41.88846], + [-87.62457, 41.88831], + [-87.625061, 41.888387], + [-87.62556, 41.88817], + [-87.62664, 41.88711], + [-87.62806, 41.88694], + [-87.627636, 41.871977], + [-87.627467, 41.87188], + [-87.627435, 41.871562], + [-87.627547, 41.869042], + [-87.627418, 41.867333], + [-87.623428, 41.867447], + [-87.62308, 41.867318], + [-87.620457, 41.867342], + [-87.619678, 41.865108], + [-87.61936, 41.864893], + [-87.616563, 41.864965], + [-87.61588, 41.864767], + [-87.615228, 41.864965], + [-87.614163, 41.864997], + [-87.613893, 41.865243], + [-87.613723, 41.866102], + [-87.60779, 41.866188] + ] + } + }, + { + "id": "200", + "type": "Feature", + "properties": { + "route_id": "70", + "shape_id": "64702291", + "direction": "West", + "trip_id": 206, + "route_short_name": "70", + "route_long_name": "Division", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/70/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.630967, 41.899893], + [-87.63133, 41.89979], + [-87.631384, 41.903808], + [-87.631609, 41.903934], + [-87.654229, 41.903556], + [-87.659192, 41.903613], + [-87.66013, 41.903358], + [-87.662243, 41.903207], + [-87.66269, 41.903493], + [-87.689297, 41.903008], + [-87.723628, 41.902795], + [-87.746613, 41.902397], + [-87.75402, 41.902452], + [-87.755163, 41.902317], + [-87.75785, 41.90254], + [-87.758533, 41.902253], + [-87.772807, 41.902143], + [-87.774747, 41.902078], + [-87.774937, 41.901825] + ] + } + }, + { + "id": "201", + "type": "Feature", + "properties": { + "route_id": "J14", + "shape_id": "64804275", + "direction": "South", + "trip_id": 208, + "route_short_name": "J14", + "route_long_name": "Jeffery Jump", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/J14/", + "route_color": "0065bd", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.642906, 41.883278], + [-87.639977, 41.883347], + [-87.639835, 41.883163], + [-87.62452, 41.88323], + [-87.624277, 41.873317], + [-87.624085, 41.873144], + [-87.620594, 41.873238], + [-87.620505, 41.868025], + [-87.62014, 41.866578], + [-87.618502, 41.862065], + [-87.613655, 41.851105], + [-87.608377, 41.838143], + [-87.608092, 41.836998], + [-87.607932, 41.834408], + [-87.607408, 41.832858], + [-87.606772, 41.831825], + [-87.60496, 41.829543], + [-87.601527, 41.826858], + [-87.60078, 41.826063], + [-87.600112, 41.824927], + [-87.598538, 41.821413], + [-87.593962, 41.815373], + [-87.590305, 41.81218], + [-87.588175, 41.80943], + [-87.585728, 41.806792], + [-87.582548, 41.804542], + [-87.581612, 41.803158], + [-87.581437, 41.802262], + [-87.581468, 41.799543], + [-87.581262, 41.798668], + [-87.580673, 41.797668], + [-87.579528, 41.7965], + [-87.579227, 41.795745], + [-87.57937, 41.794783], + [-87.580372, 41.79305], + [-87.580498, 41.792335], + [-87.580418, 41.791572], + [-87.579465, 41.790165], + [-87.578448, 41.789275], + [-87.578098, 41.788758], + [-87.577702, 41.786382], + [-87.577352, 41.78523], + [-87.576763, 41.78391], + [-87.574903, 41.781065], + [-87.574745, 41.780573], + [-87.57492, 41.779658], + [-87.575667, 41.778642], + [-87.575953, 41.77787], + [-87.575905, 41.777077], + [-87.575273, 41.77558], + [-87.575659, 41.774604], + [-87.576496, 41.773916], + [-87.576508, 41.773239], + [-87.576158, 41.758693], + [-87.575937, 41.758392], + [-87.57592, 41.755022], + [-87.576143, 41.754783], + [-87.575205, 41.716693], + [-87.574903, 41.716177], + [-87.572388, 41.713479], + [-87.560725, 41.71357], + [-87.559915, 41.713458], + [-87.55974, 41.71337], + [-87.559725, 41.713157], + [-87.55966, 41.709413], + [-87.559677, 41.708483], + [-87.559788, 41.708228], + [-87.560042, 41.708205], + [-87.580117, 41.707982], + [-87.580515, 41.708038], + [-87.58115, 41.708762], + [-87.58177, 41.708848], + [-87.582215, 41.70873], + [-87.582263, 41.708587], + [-87.581373, 41.708538] + ] + } + }, + { + "id": "202", + "type": "Feature", + "properties": { + "route_id": "95", + "shape_id": "64710956", + "direction": "West", + "trip_id": 209, + "route_short_name": "95", + "route_long_name": "95th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/95/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.544307, 41.728495], + [-87.55259, 41.72822], + [-87.55254, 41.727818], + [-87.55395, 41.72641], + [-87.55382, 41.72635], + [-87.55647, 41.72634], + [-87.556465, 41.726213], + [-87.55647, 41.72634], + [-87.55787, 41.72632], + [-87.557865, 41.726205], + [-87.55787, 41.72632], + [-87.560544, 41.726374], + [-87.563078, 41.726165], + [-87.566442, 41.726233], + [-87.567878, 41.72603], + [-87.574062, 41.725895], + [-87.577527, 41.725872], + [-87.57787, 41.72589], + [-87.57787, 41.72607], + [-87.579594, 41.72605], + [-87.581373, 41.725817], + [-87.585393, 41.725848], + [-87.585505, 41.725578], + [-87.585203, 41.72379], + [-87.585235, 41.722605], + [-87.585393, 41.722455], + [-87.586363, 41.72239], + [-87.594708, 41.722295], + [-87.594852, 41.72255], + [-87.594883, 41.725673], + [-87.594915, 41.725832], + [-87.59528, 41.725927], + [-87.604547, 41.725705], + [-87.604705, 41.72545], + [-87.60452, 41.72208], + [-87.606693, 41.72216], + [-87.61828, 41.72186], + [-87.681936, 41.721051], + [-87.682112, 41.723368], + [-87.682387, 41.735389], + [-87.673132, 41.7356], + [-87.672751, 41.735798], + [-87.672791, 41.736346], + [-87.673059, 41.736362] + ] + } + }, + { + "id": "203", + "type": "Feature", + "properties": { + "route_id": "95", + "shape_id": "64708147", + "direction": "East", + "trip_id": 210, + "route_short_name": "95", + "route_long_name": "95th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/95/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.672969, 41.736153], + [-87.672863, 41.735758], + [-87.682192, 41.735575], + [-87.682557, 41.735432], + [-87.68235, 41.724648], + [-87.682102, 41.720939], + [-87.680188, 41.720825], + [-87.676485, 41.720992], + [-87.606597, 41.72193], + [-87.604483, 41.722113], + [-87.604497, 41.725428], + [-87.604357, 41.725705], + [-87.596043, 41.725848], + [-87.594898, 41.725705], + [-87.594835, 41.722455], + [-87.594565, 41.722113], + [-87.58533, 41.722327], + [-87.584997, 41.722542], + [-87.585077, 41.723687], + [-87.584885, 41.724417], + [-87.584917, 41.725848], + [-87.584742, 41.725992], + [-87.554082, 41.726357], + [-87.552652, 41.727597], + [-87.55259, 41.72822], + [-87.548693, 41.728217], + [-87.545768, 41.728495], + [-87.54561, 41.728567], + [-87.545625, 41.730083], + [-87.545467, 41.730203], + [-87.544338, 41.73014], + [-87.544195, 41.728613] + ] + } + }, + { + "id": "204", + "type": "Feature", + "properties": { + "route_id": "75", + "shape_id": "64701541", + "direction": "West", + "trip_id": 210, + "route_short_name": "75", + "route_long_name": "74th-75th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/75/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.555305, 41.761475], + [-87.560211, 41.759088], + [-87.58088, 41.758948], + [-87.589495, 41.758733], + [-87.598667, 41.758813], + [-87.600398, 41.758773], + [-87.600955, 41.758615], + [-87.60299, 41.758693], + [-87.62629, 41.758185], + [-87.626378, 41.758097], + [-87.626418, 41.758058], + [-87.626275, 41.754467], + [-87.625767, 41.750867], + [-87.62567, 41.750683], + [-87.625083, 41.750603], + [-87.625003, 41.750945], + [-87.624622, 41.750993], + [-87.624495, 41.751415], + [-87.62459, 41.75623], + [-87.62486, 41.757932], + [-87.625115, 41.758138], + [-87.625623, 41.758122], + [-87.625877, 41.758122], + [-87.626083, 41.758122], + [-87.626307, 41.758122], + [-87.626562, 41.758122], + [-87.626815, 41.75813], + [-87.627277, 41.758113], + [-87.62788, 41.758122], + [-87.629072, 41.758082], + [-87.629597, 41.75821], + [-87.635588, 41.75805], + [-87.635748, 41.758352], + [-87.6357, 41.75983], + [-87.63675, 41.759958], + [-87.653995, 41.759663], + [-87.65417, 41.759393], + [-87.653963, 41.759307], + [-87.6539, 41.758822], + [-87.653915, 41.756158], + [-87.658367, 41.755928], + [-87.658778, 41.756008], + [-87.658938, 41.759545], + [-87.672385, 41.759393], + [-87.674038, 41.759497] + ] + } + }, + { + "id": "205", + "type": "Feature", + "properties": { + "route_id": "75", + "shape_id": "64801540", + "direction": "East", + "trip_id": 210, + "route_short_name": "75", + "route_long_name": "74th-75th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/75/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.67372, 41.759425], + [-87.672973, 41.759273], + [-87.658985, 41.759505], + [-87.658827, 41.759448], + [-87.658715, 41.75608], + [-87.658445, 41.755857], + [-87.653868, 41.756118], + [-87.653915, 41.759465], + [-87.653772, 41.759577], + [-87.635892, 41.759893], + [-87.635685, 41.758122], + [-87.62753, 41.75817], + [-87.62637, 41.758035], + [-87.626212, 41.754712], + [-87.625893, 41.752908], + [-87.625782, 41.751008], + [-87.625638, 41.750945], + [-87.624653, 41.75097], + [-87.624415, 41.751215], + [-87.624697, 41.758174], + [-87.606105, 41.758598], + [-87.56021, 41.759052], + [-87.555847, 41.761333], + [-87.555305, 41.761412] + ] + } + }, + { + "id": "206", + "type": "Feature", + "properties": { + "route_id": "70", + "shape_id": "64802289", + "direction": "East", + "trip_id": 210, + "route_short_name": "70", + "route_long_name": "Division", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/70/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.77507, 41.901829], + [-87.774757, 41.901966], + [-87.76346, 41.902182], + [-87.689837, 41.902937], + [-87.62999, 41.90392], + [-87.62987, 41.89981], + [-87.63075, 41.899794] + ] + } + }, + { + "id": "207", + "type": "Feature", + "properties": { + "route_id": "60", + "shape_id": "64701350", + "direction": "West", + "trip_id": 213, + "route_short_name": "60", + "route_long_name": "Blue Island/26th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/60/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.615691, 41.884941], + [-87.615343, 41.885046], + [-87.61524, 41.884744], + [-87.615024, 41.884788], + [-87.615261, 41.885107], + [-87.6157, 41.885136], + [-87.615846, 41.885099], + [-87.615835, 41.884624], + [-87.615961, 41.884601], + [-87.624566, 41.884491], + [-87.62457, 41.882156], + [-87.64118, 41.88185], + [-87.64093, 41.874404], + [-87.647504, 41.874372], + [-87.64759, 41.874168], + [-87.648383, 41.874407], + [-87.656967, 41.874272], + [-87.656618, 41.863259], + [-87.661325, 41.857675], + [-87.661209, 41.857326], + [-87.661338, 41.856683], + [-87.661258, 41.852623], + [-87.665788, 41.852337], + [-87.666583, 41.852115], + [-87.676835, 41.848077], + [-87.678027, 41.847657], + [-87.678345, 41.84776], + [-87.680873, 41.84679], + [-87.681095, 41.846695], + [-87.681095, 41.846535], + [-87.685374, 41.844878], + [-87.74097, 41.843985], + [-87.741797, 41.84423], + [-87.742607, 41.844088], + [-87.743387, 41.84404], + [-87.743577, 41.84404], + [-87.743783, 41.844023], + [-87.743973, 41.844017], + [-87.744642, 41.843952], + [-87.745722, 41.843658], + [-87.74569, 41.84334], + [-87.745342, 41.843133], + [-87.744085, 41.843087], + [-87.743878, 41.84334], + [-87.743735, 41.843937], + [-87.743752, 41.844088], + [-87.743688, 41.84439], + [-87.743688, 41.845327], + [-87.743958, 41.845573], + [-87.744053, 41.846018], + [-87.74461, 41.846193], + [-87.744498, 41.846328] + ] + } + }, + { + "id": "208", + "type": "Feature", + "properties": { + "route_id": "151", + "shape_id": "64808102", + "direction": "South", + "trip_id": 213, + "route_short_name": "151", + "route_long_name": "Sheridan", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/151/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.670923, 41.99979], + [-87.671218, 41.999751], + [-87.670689, 41.998069], + [-87.65622, 41.99822], + [-87.65569, 41.99788], + [-87.65507, 41.97989], + [-87.65503, 41.97793], + [-87.65514, 41.977927], + [-87.65503, 41.97793], + [-87.65481, 41.96969], + [-87.654876, 41.967024], + [-87.65476, 41.96638], + [-87.654797, 41.960751], + [-87.65449, 41.95267], + [-87.649862, 41.952712], + [-87.64551, 41.95299], + [-87.64502, 41.95253], + [-87.645106, 41.952111], + [-87.64497, 41.95145], + [-87.644529, 41.950261], + [-87.64225, 41.94657], + [-87.63964, 41.94148], + [-87.63933, 41.93433], + [-87.639405, 41.933097], + [-87.63872, 41.93232], + [-87.63898, 41.93187], + [-87.63904, 41.931243], + [-87.638791, 41.930444], + [-87.638907, 41.928011], + [-87.638415, 41.927219], + [-87.637673, 41.926481], + [-87.636149, 41.925869], + [-87.6359, 41.92531], + [-87.6356, 41.92017], + [-87.63457, 41.91887], + [-87.63424, 41.91733], + [-87.63396, 41.91671], + [-87.63297, 41.91564], + [-87.63266, 41.91498], + [-87.63185, 41.91418], + [-87.63172, 41.9133], + [-87.6306, 41.91312], + [-87.62841, 41.91222], + [-87.62754, 41.91223], + [-87.62698, 41.91242], + [-87.62624, 41.91104], + [-87.62613, 41.90943], + [-87.626243, 41.909422], + [-87.62613, 41.90943], + [-87.625793, 41.907584], + [-87.62513, 41.90531], + [-87.625035, 41.903846], + [-87.62421, 41.90143], + [-87.62419, 41.89791], + [-87.624406, 41.895914], + [-87.6242, 41.88988], + [-87.62464, 41.88804], + [-87.62444, 41.87954], + [-87.641091, 41.87929], + [-87.641052, 41.877884], + [-87.640104, 41.877796] + ] + } + }, + { + "id": "209", + "type": "Feature", + "properties": { + "route_id": "119", + "shape_id": "64700757", + "direction": "South", + "trip_id": 216, + "route_short_name": "119", + "route_long_name": "Michigan/119th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/119/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.624856, 41.722663], + [-87.624853, 41.722771], + [-87.623915, 41.722781], + [-87.623904, 41.721618], + [-87.620618, 41.721702], + [-87.620568, 41.714983], + [-87.619885, 41.710573], + [-87.619902, 41.708808], + [-87.620522, 41.705518], + [-87.620998, 41.700083], + [-87.620728, 41.694957], + [-87.621077, 41.692342], + [-87.620537, 41.682075], + [-87.620537, 41.678347], + [-87.62238, 41.67826], + [-87.622412, 41.677982], + [-87.625973, 41.67787], + [-87.627277, 41.677887], + [-87.627467, 41.67814], + [-87.629613, 41.678117], + [-87.631917, 41.678085], + [-87.632092, 41.677855], + [-87.632172, 41.678068], + [-87.63675, 41.67799], + [-87.63694, 41.677687], + [-87.63702, 41.677982], + [-87.642248, 41.677942], + [-87.644045, 41.67783], + [-87.644172, 41.6776], + [-87.64441, 41.677838], + [-87.65885, 41.67757], + [-87.661152, 41.677664], + [-87.676533, 41.677235], + [-87.679967, 41.677353], + [-87.680395, 41.677712] + ] + } + }, + { + "id": "210", + "type": "Feature", + "properties": { + "route_id": "119", + "shape_id": "64800754", + "direction": "North", + "trip_id": 216, + "route_short_name": "119", + "route_long_name": "Michigan/119th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/119/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.680475, 41.677727], + [-87.68065, 41.677663], + [-87.68073, 41.677393], + [-87.680173, 41.677155], + [-87.620442, 41.678203], + [-87.6206, 41.683855], + [-87.620998, 41.687987], + [-87.621045, 41.69305], + [-87.62076, 41.694503], + [-87.620887, 41.697452], + [-87.62076, 41.702467], + [-87.620442, 41.705813], + [-87.619902, 41.70892], + [-87.619853, 41.71074], + [-87.620442, 41.71554], + [-87.62056, 41.721849], + [-87.624841, 41.721817], + [-87.624853, 41.722494] + ] + } + }, + { + "id": "211", + "type": "Feature", + "properties": { + "route_id": "60", + "shape_id": "64701345", + "direction": "East", + "trip_id": 220, + "route_short_name": "60", + "route_long_name": "Blue Island/26th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/60/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.74418, 41.846948], + [-87.744323, 41.84636], + [-87.744117, 41.846098], + [-87.744053, 41.845335], + [-87.744053, 41.844063], + [-87.744102, 41.843833], + [-87.744102, 41.84361], + [-87.744133, 41.843412], + [-87.744387, 41.843222], + [-87.744863, 41.843245], + [-87.745405, 41.843492], + [-87.745405, 41.843643], + [-87.744593, 41.843833], + [-87.744323, 41.843833], + [-87.744085, 41.843833], + [-87.743783, 41.843825], + [-87.74256, 41.843833], + [-87.741765, 41.843913], + [-87.740588, 41.84377], + [-87.739492, 41.84396], + [-87.713982, 41.844468], + [-87.685405, 41.844741], + [-87.66617, 41.852218], + [-87.661227, 41.852417], + [-87.661212, 41.857733], + [-87.656557, 41.863235], + [-87.656772, 41.872054], + [-87.656637, 41.874203], + [-87.648527, 41.874447], + [-87.64706, 41.87427], + [-87.63948, 41.87439], + [-87.639687, 41.876423], + [-87.639494, 41.877506], + [-87.639572, 41.883149], + [-87.62436, 41.88325], + [-87.624231, 41.883369], + [-87.624296, 41.88434], + [-87.617818, 41.884308], + [-87.615688, 41.884643] + ] + } + }, + { + "id": "212", + "type": "Feature", + "properties": { + "route_id": "20", + "shape_id": "64800957", + "direction": "East", + "trip_id": 222, + "route_short_name": "20", + "route_long_name": "Madison", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/20/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.774078, 41.880295], + [-87.773903, 41.880073], + [-87.771853, 41.879858], + [-87.77157, 41.88009], + [-87.758852, 41.880312], + [-87.726013, 41.88059], + [-87.711755, 41.880955], + [-87.689042, 41.881042], + [-87.687787, 41.881185], + [-87.657412, 41.881512], + [-87.647622, 41.881813], + [-87.647383, 41.88202], + [-87.647255, 41.88314], + [-87.643012, 41.883108], + [-87.642906, 41.883278], + [-87.641785, 41.88335], + [-87.639977, 41.883347], + [-87.639835, 41.883163], + [-87.624612, 41.883203], + [-87.624528, 41.882182], + [-87.625004, 41.882151] + ] + } + }, + { + "id": "213", + "type": "Feature", + "properties": { + "route_id": "20", + "shape_id": "64800954", + "direction": "West", + "trip_id": 224, + "route_short_name": "20", + "route_long_name": "Madison", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/20/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.624857, 41.882146], + [-87.648193, 41.88179], + [-87.649322, 41.88179], + [-87.649862, 41.88194], + [-87.654758, 41.881678], + [-87.670175, 41.881408], + [-87.698405, 41.881145], + [-87.702902, 41.880978], + [-87.70365, 41.88109], + [-87.709593, 41.880923], + [-87.71379, 41.880995], + [-87.72463, 41.880708], + [-87.740683, 41.880685], + [-87.759392, 41.880367], + [-87.762713, 41.88039], + [-87.764478, 41.88059], + [-87.764685, 41.880358], + [-87.765368, 41.880312], + [-87.773538, 41.880192], + [-87.774348, 41.880192], + [-87.774508, 41.88043], + [-87.77446, 41.880565], + [-87.774078, 41.880582], + [-87.773903, 41.880502], + [-87.77392, 41.880343] + ] + } + }, + { + "id": "214", + "type": "Feature", + "properties": { + "route_id": "55", + "shape_id": "64705424", + "direction": "East", + "trip_id": 228, + "route_short_name": "55", + "route_long_name": "Garfield", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/55/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.738888, 41.786263], + [-87.739285, 41.786128], + [-87.739953, 41.784937], + [-87.740095, 41.784317], + [-87.74105, 41.78438], + [-87.741495, 41.792955], + [-87.713663, 41.793288], + [-87.68421, 41.793885], + [-87.682892, 41.793408], + [-87.61666, 41.79447], + [-87.614878, 41.794402], + [-87.612892, 41.793583], + [-87.610667, 41.793242], + [-87.609777, 41.793337], + [-87.60868, 41.793702], + [-87.607758, 41.794322], + [-87.607202, 41.794973], + [-87.592705, 41.795132], + [-87.591858, 41.79472], + [-87.589685, 41.794853], + [-87.588748, 41.795197], + [-87.58409, 41.79518], + [-87.583878, 41.79491], + [-87.583932, 41.793122], + [-87.583852, 41.791802], + [-87.583725, 41.791707] + ] + } + }, + { + "id": "216", + "type": "Feature", + "properties": { + "route_id": "29", + "shape_id": "64801039", + "direction": "North", + "trip_id": 229, + "route_short_name": "29", + "route_long_name": "State", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/29/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.624065, 41.722772], + [-87.623754, 41.722858], + [-87.623715, 41.72379], + [-87.62403, 41.72994], + [-87.623938, 41.732483], + [-87.62434, 41.74321], + [-87.624303, 41.747147], + [-87.624478, 41.749292], + [-87.624702, 41.762422], + [-87.624892, 41.764512], + [-87.62478, 41.765577], + [-87.62521, 41.777562], + [-87.62521, 41.781788], + [-87.62558, 41.78972], + [-87.625813, 41.804462], + [-87.626307, 41.820945], + [-87.626577, 41.84156], + [-87.62707, 41.852655], + [-87.627024, 41.85533], + [-87.627387, 41.867913], + [-87.627445, 41.872852], + [-87.627277, 41.872968], + [-87.627445, 41.87297], + [-87.627499, 41.874071], + [-87.6279, 41.88449], + [-87.62798, 41.890771], + [-87.62765, 41.89089], + [-87.611551, 41.891132], + [-87.611492, 41.892382], + [-87.610368, 41.893017], + [-87.610164, 41.892895], + [-87.61016, 41.892496] + ] + } + }, + { + "id": "217", + "type": "Feature", + "properties": { + "route_id": "55", + "shape_id": "64805425", + "direction": "West", + "trip_id": 231, + "route_short_name": "55", + "route_long_name": "Garfield", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/55/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.583687, 41.791748], + [-87.582978, 41.79166], + [-87.582072, 41.791778], + [-87.582025, 41.792573], + [-87.582373, 41.792717], + [-87.583725, 41.7927], + [-87.583852, 41.79479], + [-87.584075, 41.795203], + [-87.58878, 41.795275], + [-87.590115, 41.795585], + [-87.5918, 41.795545], + [-87.592768, 41.79518], + [-87.607122, 41.795037], + [-87.60739, 41.79494], + [-87.60816, 41.79405], + [-87.60879, 41.79368], + [-87.60997, 41.7933], + [-87.61125, 41.79324], + [-87.61295, 41.79363], + [-87.61331, 41.79384], + [-87.61321, 41.793972], + [-87.61331, 41.79384], + [-87.61445, 41.79433], + [-87.61467, 41.79477], + [-87.616379, 41.79486], + [-87.65898, 41.79409], + [-87.68294, 41.79381], + [-87.684545, 41.793933], + [-87.72322, 41.79319], + [-87.741812, 41.793073], + [-87.741908, 41.792892], + [-87.74167, 41.792247], + [-87.741288, 41.784332], + [-87.740175, 41.784228], + [-87.739348, 41.78442], + [-87.738268, 41.785683], + [-87.738395, 41.78616], + [-87.738792, 41.786247] + ] + } + }, + { + "id": "218", + "type": "Feature", + "properties": { + "route_id": "29", + "shape_id": "64701042", + "direction": "South", + "trip_id": 235, + "route_short_name": "29", + "route_long_name": "State", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/29/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.610164, 41.892319], + [-87.610164, 41.89214], + [-87.61379, 41.89189], + [-87.615639, 41.891968], + [-87.62267, 41.89177], + [-87.622572, 41.891677], + [-87.62807, 41.89167], + [-87.628124, 41.89134], + [-87.62798, 41.88889], + [-87.628167, 41.888578], + [-87.627823, 41.880988], + [-87.627653, 41.872129], + [-87.627452, 41.869813], + [-87.627498, 41.865705], + [-87.62734, 41.86576], + [-87.627515, 41.865505], + [-87.627498, 41.863908], + [-87.627435, 41.86216], + [-87.627277, 41.862048], + [-87.627331, 41.85749], + [-87.627148, 41.855095], + [-87.627165, 41.851415], + [-87.626608, 41.83316], + [-87.626577, 41.823362], + [-87.626227, 41.813768], + [-87.626227, 41.809025], + [-87.625083, 41.769057], + [-87.62521, 41.768818], + [-87.626482, 41.768772], + [-87.62664, 41.768502], + [-87.626322, 41.756525], + [-87.625798, 41.751398], + [-87.62575, 41.749308], + [-87.625973, 41.749253], + [-87.62567, 41.746033], + [-87.62556, 41.738222], + [-87.625162, 41.727548], + [-87.625226, 41.725502], + [-87.62507, 41.72278], + [-87.624316, 41.722774] + ] + } + }, + { + "id": "219", + "type": "Feature", + "properties": { + "route_id": "85", + "shape_id": "64807570", + "direction": "South", + "trip_id": 235, + "route_short_name": "85", + "route_long_name": "Central", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/85/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.764685, 41.984023], + [-87.76532, 41.984278], + [-87.766068, 41.983937], + [-87.768325, 41.984953], + [-87.768468, 41.978373], + [-87.76846, 41.97641], + [-87.768116, 41.975893], + [-87.7675, 41.97541], + [-87.767068, 41.974828], + [-87.764653, 41.972302], + [-87.763572, 41.971053], + [-87.763413, 41.970895], + [-87.763302, 41.970767], + [-87.76327, 41.970735], + [-87.763137, 41.970588], + [-87.763004, 41.970441], + [-87.762871, 41.970294], + [-87.76234, 41.969707], + [-87.761998, 41.969988], + [-87.762329, 41.970381], + [-87.762822, 41.970301], + [-87.76319, 41.970686], + [-87.763365, 41.970596], + [-87.76354, 41.970505], + [-87.763873, 41.97029], + [-87.764717, 41.969877], + [-87.76521, 41.969718], + [-87.767338, 41.970307], + [-87.767513, 41.97029], + [-87.767625, 41.970012], + [-87.766528, 41.941108], + [-87.766608, 41.938795], + [-87.766242, 41.932652], + [-87.766195, 41.92956], + [-87.766322, 41.929385], + [-87.766195, 41.92592], + [-87.766068, 41.92592], + [-87.766003, 41.925405], + [-87.765828, 41.921312], + [-87.76594, 41.920318], + [-87.765813, 41.914977], + [-87.76559, 41.911322], + [-87.765655, 41.910042], + [-87.765972, 41.908842], + [-87.764653, 41.873023] + ] + } + }, + { + "id": "220", + "type": "Feature", + "properties": { + "route_id": "85", + "shape_id": "64710943", + "direction": "North", + "trip_id": 237, + "route_short_name": "85", + "route_long_name": "Central", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/85/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.76486, 41.872673], + [-87.764573, 41.873], + [-87.764573, 41.873215], + [-87.765925, 41.908063], + [-87.765877, 41.909017], + [-87.76559, 41.91013], + [-87.765607, 41.917838], + [-87.766068, 41.924975], + [-87.766577, 41.941427], + [-87.76648, 41.942038], + [-87.766783, 41.951035], + [-87.766973, 41.951908], + [-87.766878, 41.954603], + [-87.767068, 41.957098], + [-87.767022, 41.960142], + [-87.767219, 41.961778], + [-87.767085, 41.962002], + [-87.767312, 41.962718], + [-87.76754, 41.96959], + [-87.76754, 41.96976], + [-87.767338, 41.969822], + [-87.76754, 41.96976], + [-87.76756, 41.97033], + [-87.76507, 41.96965], + [-87.763246, 41.970598], + [-87.762393, 41.969713], + [-87.761998, 41.969988], + [-87.762481, 41.970371], + [-87.762844, 41.970313], + [-87.767637, 41.975571], + [-87.768325, 41.976442], + [-87.768325, 41.977277], + [-87.768262, 41.98245], + [-87.768133, 41.982872], + [-87.764478, 41.982927], + [-87.764255, 41.983182], + [-87.764208, 41.983618], + [-87.764622, 41.983912] + ] + } + }, + { + "id": "221", + "type": "Feature", + "properties": { + "route_id": "34", + "shape_id": "64810934", + "direction": "South", + "trip_id": 238, + "route_short_name": "34", + "route_long_name": "South Michigan", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/34/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.624856, 41.722663], + [-87.624853, 41.722771], + [-87.623915, 41.722781], + [-87.623904, 41.721618], + [-87.620618, 41.721702], + [-87.620568, 41.714983], + [-87.619902, 41.710757], + [-87.619885, 41.709118], + [-87.620522, 41.705518], + [-87.620998, 41.700083], + [-87.620728, 41.695522], + [-87.620792, 41.694115], + [-87.621077, 41.692953], + [-87.62095, 41.688217], + [-87.620537, 41.682075], + [-87.620315, 41.67071], + [-87.619902, 41.663645], + [-87.619583, 41.663438], + [-87.617772, 41.663342], + [-87.61758, 41.66308], + [-87.618455, 41.659155], + [-87.610952, 41.659052], + [-87.610778, 41.659003], + [-87.610713, 41.657485], + [-87.60976, 41.657318], + [-87.60504, 41.657398], + [-87.602115, 41.657128], + [-87.599015, 41.65727], + [-87.597792, 41.656905] + ] + } + }, + { + "id": "222", + "type": "Feature", + "properties": { + "route_id": "34", + "shape_id": "64810916", + "direction": "North", + "trip_id": 241, + "route_short_name": "34", + "route_long_name": "South Michigan", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/34/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.597617, 41.65685], + [-87.597188, 41.656468], + [-87.596982, 41.656], + [-87.596885, 41.655062], + [-87.596727, 41.654847], + [-87.596727, 41.65418], + [-87.596933, 41.653782], + [-87.599778, 41.653702], + [-87.603848, 41.652653], + [-87.60461, 41.652582], + [-87.605055, 41.654442], + [-87.605087, 41.657088], + [-87.60523, 41.65727], + [-87.610475, 41.657327], + [-87.610618, 41.657542], + [-87.610603, 41.658845], + [-87.610825, 41.65909], + [-87.618375, 41.659058], + [-87.618502, 41.659162], + [-87.617612, 41.663303], + [-87.619773, 41.663493], + [-87.619948, 41.66362], + [-87.620315, 41.67117], + [-87.620537, 41.68252], + [-87.620998, 41.687987], + [-87.621045, 41.69305], + [-87.62076, 41.694503], + [-87.620887, 41.700305], + [-87.620568, 41.704772], + [-87.619902, 41.70892], + [-87.619853, 41.71074], + [-87.620442, 41.71554], + [-87.62056, 41.721849], + [-87.624841, 41.721817], + [-87.624853, 41.722494] + ] + } + }, + { + "id": "223", + "type": "Feature", + "properties": { + "route_id": "147", + "shape_id": "64804524", + "direction": "North", + "trip_id": 241, + "route_short_name": "147", + "route_long_name": "Outer DuSable Lake Shore Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/147/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.62368, 41.874809], + [-87.62337, 41.87527], + [-87.62329, 41.87587], + [-87.627548, 41.875778], + [-87.627764, 41.88305], + [-87.627637, 41.883192], + [-87.624452, 41.883242], + [-87.624254, 41.883364], + [-87.62447, 41.88801], + [-87.624002, 41.889903], + [-87.62421, 41.89642], + [-87.623981, 41.898145], + [-87.62406, 41.90061], + [-87.62363, 41.90265], + [-87.6248, 41.90571], + [-87.6255, 41.90852], + [-87.62593, 41.91229], + [-87.62846, 41.91735], + [-87.629, 41.91872], + [-87.62977, 41.9217], + [-87.63178, 41.92807], + [-87.63196, 41.92936], + [-87.63189, 41.93297], + [-87.63221, 41.93453], + [-87.63271, 41.93555], + [-87.6336, 41.93665], + [-87.63743, 41.9396], + [-87.63886, 41.94125], + [-87.64443, 41.95103], + [-87.6446, 41.95175], + [-87.64461, 41.95484], + [-87.64593, 41.95885], + [-87.64625, 41.96212], + [-87.64863, 41.97259], + [-87.64918, 41.97431], + [-87.64964, 41.97679], + [-87.65121, 41.97644], + [-87.655, 41.97647], + [-87.655362, 41.992415], + [-87.65562, 41.9977], + [-87.65586, 41.99808], + [-87.65622, 41.99822], + [-87.65845, 41.99822], + [-87.658445, 41.998107], + [-87.65845, 41.99822], + [-87.65976, 41.9982], + [-87.66059, 41.99887], + [-87.66084, 42.00395], + [-87.660694, 42.003949], + [-87.66084, 42.00395], + [-87.66094, 42.00567], + [-87.660782, 42.005703], + [-87.66094, 42.00567], + [-87.66105, 42.00598], + [-87.661676, 42.008224], + [-87.66215, 42.00935], + [-87.662036, 42.009374], + [-87.66215, 42.00935], + [-87.66299, 42.01185], + [-87.662891, 42.011876], + [-87.66492, 42.01549], + [-87.66517, 42.01635], + [-87.665054, 42.01637], + [-87.66517, 42.01635], + [-87.66604, 42.01925], + [-87.66839, 42.0193], + [-87.672893, 42.017203], + [-87.673085, 42.017242], + [-87.673085, 42.017703] + ] + } + }, + { + "id": "224", + "type": "Feature", + "properties": { + "route_id": "71", + "shape_id": "64707029", + "direction": "South", + "trip_id": 243, + "route_short_name": "71", + "route_long_name": "71st South Shore", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/71/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.626212, 41.768668], + [-87.626482, 41.768502], + [-87.626513, 41.767968], + [-87.627053, 41.766443], + [-87.627741, 41.765426], + [-87.624542, 41.765417], + [-87.624352, 41.765258], + [-87.622905, 41.76541], + [-87.618613, 41.76537], + [-87.618502, 41.765553], + [-87.615102, 41.76572], + [-87.610572, 41.765688], + [-87.60568, 41.76588], + [-87.60472, 41.76581], + [-87.604705, 41.765672], + [-87.60461, 41.7658], + [-87.60187, 41.76584], + [-87.600828, 41.76572], + [-87.595995, 41.765783], + [-87.596, 41.7659], + [-87.59513, 41.76598], + [-87.588748, 41.765887], + [-87.56756, 41.76614], + [-87.566208, 41.765672], + [-87.560265, 41.759138], + [-87.557498, 41.76049], + [-87.55707, 41.760507], + [-87.548375, 41.752202], + [-87.548168, 41.751708], + [-87.548058, 41.749912], + [-87.547898, 41.745588], + [-87.54801, 41.744683], + [-87.551252, 41.74473], + [-87.55273, 41.744572], + [-87.55184, 41.743928], + [-87.551507, 41.741727], + [-87.550982, 41.713378], + [-87.552827, 41.708618], + [-87.553605, 41.707513], + [-87.554432, 41.706672], + [-87.555015, 41.706422], + [-87.559464, 41.70644], + [-87.559716, 41.706261], + [-87.559485, 41.693463], + [-87.559533, 41.693153], + [-87.559788, 41.692907], + [-87.559708, 41.69278] + ] + } + }, + { + "id": "225", + "type": "Feature", + "properties": { + "route_id": "71", + "shape_id": "64807032", + "direction": "North", + "trip_id": 244, + "route_short_name": "71", + "route_long_name": "71st South Shore", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/71/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.559677, 41.692763], + [-87.559407, 41.692907], + [-87.559602, 41.706342], + [-87.555082, 41.706345], + [-87.554478, 41.706505], + [-87.553065, 41.708062], + [-87.550872, 41.713267], + [-87.550918, 41.720865], + [-87.551062, 41.721318], + [-87.550982, 41.724585], + [-87.55138, 41.734352], + [-87.551412, 41.74125], + [-87.55173, 41.743872], + [-87.552523, 41.744627], + [-87.547883, 41.744787], + [-87.547962, 41.750373], + [-87.5482, 41.75223], + [-87.55559, 41.75899], + [-87.557102, 41.760545], + [-87.557467, 41.760507], + [-87.557642, 41.760228], + [-87.560036, 41.759144], + [-87.563222, 41.76266], + [-87.5664, 41.762707], + [-87.56648, 41.765417], + [-87.566368, 41.765617], + [-87.566543, 41.766268], + [-87.569658, 41.766372], + [-87.58932, 41.766165], + [-87.59031, 41.76601], + [-87.591448, 41.766086], + [-87.59636, 41.76588], + [-87.60461, 41.7658], + [-87.608887, 41.765927], + [-87.61243, 41.765743], + [-87.618248, 41.765727], + [-87.619138, 41.765553], + [-87.624702, 41.765592], + [-87.624972, 41.765792], + [-87.625083, 41.768763], + [-87.626322, 41.768818] + ] + } + }, + { + "id": "228", + "type": "Feature", + "properties": { + "route_id": "36", + "shape_id": "64705905", + "direction": "South", + "trip_id": 258, + "route_short_name": "36", + "route_long_name": "Broadway", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/36/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.670923, 41.99979], + [-87.671218, 41.999751], + [-87.670689, 41.998069], + [-87.66059, 41.9982], + [-87.659708, 41.968826], + [-87.649744, 41.953289], + [-87.649557, 41.950956], + [-87.6445, 41.94279], + [-87.64421, 41.93441], + [-87.64463, 41.93365], + [-87.644925, 41.932563], + [-87.64356, 41.9301], + [-87.64282, 41.92955], + [-87.63736, 41.920262], + [-87.635987, 41.9183], + [-87.63171, 41.91129], + [-87.631435, 41.903954], + [-87.62868, 41.90389], + [-87.62865, 41.90317], + [-87.62834, 41.9024], + [-87.628452, 41.901998], + [-87.62798, 41.88926], + [-87.628167, 41.888578], + [-87.627729, 41.876984], + [-87.633582, 41.876829], + [-87.633611, 41.87451], + [-87.632994, 41.874512], + [-87.633005, 41.875105] + ] + } + }, + { + "id": "229", + "type": "Feature", + "properties": { + "route_id": "54", + "shape_id": "64804588", + "direction": "North", + "trip_id": 260, + "route_short_name": "54", + "route_long_name": "Cicero", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/54/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.744593, 41.846845], + [-87.744121, 41.847072], + [-87.74434, 41.85124], + [-87.744286, 41.853958], + [-87.744785, 41.872205], + [-87.745128, 41.877637], + [-87.745357, 41.887385], + [-87.745405, 41.888473], + [-87.745515, 41.888505], + [-87.745818, 41.897732], + [-87.745977, 41.909478], + [-87.745738, 41.911178], + [-87.746708, 41.936992], + [-87.746835, 41.945582], + [-87.746962, 41.945853], + [-87.747328, 41.954642], + [-87.74736, 41.958878], + [-87.747518, 41.959967], + [-87.748043, 41.960133], + [-87.74782, 41.960285] + ] + } + }, + { + "id": "230", + "type": "Feature", + "properties": { + "route_id": "54", + "shape_id": "64804590", + "direction": "South", + "trip_id": 260, + "route_short_name": "54", + "route_long_name": "Cicero", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/54/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.747805, 41.960285], + [-87.747598, 41.960253], + [-87.74755, 41.96007], + [-87.747677, 41.958958], + [-87.746962, 41.942182], + [-87.746915, 41.93475], + [-87.74658, 41.929488], + [-87.746502, 41.924617], + [-87.74633, 41.92373], + [-87.746327, 41.91973], + [-87.74604, 41.915938], + [-87.745945, 41.911543], + [-87.746263, 41.909453], + [-87.745945, 41.902477], + [-87.745897, 41.894522], + [-87.745468, 41.885373], + [-87.745369, 41.88213], + [-87.7455, 41.88179], + [-87.745245, 41.878165], + [-87.745135, 41.871467], + [-87.744164, 41.846288], + [-87.744542, 41.846289], + [-87.744593, 41.846473], + [-87.744415, 41.846573] + ] + } + }, + { + "id": "231", + "type": "Feature", + "properties": { + "route_id": "49B", + "shape_id": "64804107", + "direction": "North", + "trip_id": 262, + "route_short_name": "49B", + "route_long_name": "North Western", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/49B/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.688518, 41.966142], + [-87.688725, 41.966302], + [-87.688868, 41.972818], + [-87.689217, 41.978548], + [-87.689138, 41.97962], + [-87.689738, 41.996501], + [-87.689868, 42.004908], + [-87.690138, 42.009542], + [-87.690138, 42.017052], + [-87.690088, 42.018127], + [-87.689737, 42.018314] + ] + } + }, + { + "id": "232", + "type": "Feature", + "properties": { + "route_id": "12", + "shape_id": "64704135", + "direction": "East", + "trip_id": 263, + "route_short_name": "12", + "route_long_name": "Roosevelt", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/12/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.764843, 41.872602], + [-87.764748, 41.87277], + [-87.764622, 41.872713], + [-87.764668, 41.871712], + [-87.764383, 41.869368], + [-87.764337, 41.865583], + [-87.763858, 41.865545], + [-87.727572, 41.866165], + [-87.685752, 41.866547], + [-87.68359, 41.866722], + [-87.680713, 41.869033], + [-87.676582, 41.869067], + [-87.67639, 41.869018], + [-87.676247, 41.866888], + [-87.675833, 41.866658], + [-87.623428, 41.867447], + [-87.622905, 41.867357], + [-87.622825, 41.86719], + [-87.623, 41.866595], + [-87.623017, 41.865568], + [-87.622667, 41.865568], + [-87.622572, 41.864425], + [-87.622412, 41.864195], + [-87.622443, 41.861723] + ] + } + }, + { + "id": "233", + "type": "Feature", + "properties": { + "route_id": "49B", + "shape_id": "64804108", + "direction": "South", + "trip_id": 264, + "route_short_name": "49B", + "route_long_name": "North Western", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/49B/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.6899, 42.01822], + [-87.690214, 42.01821], + [-87.690416, 42.012079], + [-87.690155, 42.008238], + [-87.689976, 41.997504], + [-87.689217, 41.979097], + [-87.689345, 41.977427], + [-87.688978, 41.971443], + [-87.68898, 41.968415], + [-87.689153, 41.967048], + [-87.68901, 41.966753], + [-87.68812, 41.966508], + [-87.688152, 41.966038], + [-87.688358, 41.96603] + ] + } + }, + { + "id": "234", + "type": "Feature", + "properties": { + "route_id": "155", + "shape_id": "64800904", + "direction": "West", + "trip_id": 265, + "route_short_name": "155", + "route_long_name": "Devon", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/155/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.665487, 42.007905], + [-87.6617, 42.00798], + [-87.66089, 42.00553], + [-87.66088, 42.00531], + [-87.661005, 42.005303], + [-87.66088, 42.00531], + [-87.66086, 42.00495], + [-87.660791, 41.999849], + [-87.66059, 41.9982], + [-87.67035, 41.998148], + [-87.70903, 41.99739], + [-87.70989, 41.997473], + [-87.709933, 41.997734], + [-87.70968, 41.997778] + ] + } + }, + { + "id": "235", + "type": "Feature", + "properties": { + "route_id": "8", + "shape_id": "64709376", + "direction": "North", + "trip_id": 268, + "route_short_name": "8", + "route_long_name": "Halsted", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/8/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.643648, 41.74973], + [-87.644, 41.74972], + [-87.64421, 41.75636], + [-87.64464, 41.77419], + [-87.644538, 41.774192], + [-87.64464, 41.77419], + [-87.6447, 41.77612], + [-87.6447, 41.77642], + [-87.644592, 41.776418], + [-87.6447, 41.77642], + [-87.64476, 41.77839], + [-87.644655, 41.778726], + [-87.64476, 41.77872], + [-87.64479, 41.78011], + [-87.644679, 41.780116], + [-87.64479, 41.78011], + [-87.64486, 41.78201], + [-87.64474, 41.782014], + [-87.64487, 41.78215], + [-87.64487, 41.78327], + [-87.644769, 41.783266], + [-87.64487, 41.78327], + [-87.644812, 41.784894], + [-87.64517, 41.7943], + [-87.645445, 41.809257], + [-87.64564, 41.81238], + [-87.645536, 41.812826], + [-87.64564, 41.81282], + [-87.646501, 41.84705], + [-87.646534, 41.847128], + [-87.646566, 41.847142], + [-87.646627, 41.847182], + [-87.646681, 41.847186], + [-87.647515, 41.847004], + [-87.64848, 41.846488], + [-87.648324, 41.846231], + [-87.646706, 41.847083], + [-87.646607, 41.847165], + [-87.646509, 41.847246], + [-87.646409, 41.847329], + [-87.646365, 41.850843], + [-87.64685, 41.86478], + [-87.646849, 41.870112], + [-87.64719, 41.87553], + [-87.647069, 41.875501], + [-87.64719, 41.87553], + [-87.647542, 41.891517], + [-87.64768, 41.8926], + [-87.64772, 41.89687], + [-87.647609, 41.896827], + [-87.64785, 41.8977], + [-87.6479, 41.89932], + [-87.647797, 41.899322], + [-87.6479, 41.89932], + [-87.64807, 41.90243], + [-87.6481, 41.90396], + [-87.647987, 41.903962], + [-87.6481, 41.90396], + [-87.648278, 41.91373], + [-87.6493, 41.94044], + [-87.649545, 41.94925], + [-87.649504, 41.94977], + [-87.649333, 41.949816] + ] + } + }, + { + "id": "236", + "type": "Feature", + "properties": { + "route_id": "155", + "shape_id": "64800905", + "direction": "East", + "trip_id": 268, + "route_short_name": "155", + "route_long_name": "Devon", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/155/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.709547, 41.997835], + [-87.70935, 41.99782], + [-87.70931, 41.99738], + [-87.708928, 41.997337], + [-87.660608, 41.998201], + [-87.660501, 41.99834], + [-87.6606, 42.00011], + [-87.66073, 42.00022], + [-87.66084, 42.00395], + [-87.660694, 42.003949], + [-87.66084, 42.00395], + [-87.66089, 42.00553], + [-87.66996, 42.00538], + [-87.67003, 42.00783], + [-87.66562, 42.00791] + ] + } + }, + { + "id": "237", + "type": "Feature", + "properties": { + "route_id": "12", + "shape_id": "64807471", + "direction": "West", + "trip_id": 269, + "route_short_name": "12", + "route_long_name": "Roosevelt", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/12/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.622492, 41.861342], + [-87.622443, 41.860363], + [-87.62397, 41.86042], + [-87.624044, 41.865905], + [-87.624177, 41.867397], + [-87.624335, 41.867532], + [-87.647493, 41.867198], + [-87.650197, 41.86669], + [-87.658875, 41.866888], + [-87.659128, 41.867032], + [-87.674865, 41.866833], + [-87.676072, 41.866928], + [-87.676278, 41.86909], + [-87.676978, 41.869177], + [-87.680983, 41.86905], + [-87.683512, 41.86696], + [-87.68402, 41.866722], + [-87.70783, 41.866538], + [-87.76416, 41.865648], + [-87.764255, 41.87044], + [-87.764525, 41.872738], + [-87.764732, 41.872802] + ] + } + }, + { + "id": "238", + "type": "Feature", + "properties": { + "route_id": "6", + "shape_id": "64714134", + "direction": "North", + "trip_id": 269, + "route_short_name": "6", + "route_long_name": "Jackson Park Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/6/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.544958, 41.751876], + [-87.54573, 41.75171], + [-87.54596, 41.7518], + [-87.54587, 41.75197], + [-87.54482, 41.75202], + [-87.5445, 41.75171], + [-87.54442, 41.75107], + [-87.54684, 41.75167], + [-87.5482, 41.752193], + [-87.55559, 41.75899], + [-87.562553, 41.766102], + [-87.56295, 41.76631], + [-87.56645, 41.76631], + [-87.56663, 41.77305], + [-87.56683, 41.77356], + [-87.58609, 41.77334], + [-87.586157, 41.777028], + [-87.58633, 41.77726], + [-87.58642, 41.77877], + [-87.5863, 41.778762], + [-87.58642, 41.77877], + [-87.58651, 41.78266], + [-87.586363, 41.782663], + [-87.58651, 41.78266], + [-87.58652, 41.78284], + [-87.58658, 41.7859], + [-87.586458, 41.785905], + [-87.58658, 41.7859], + [-87.58663, 41.78614], + [-87.58657, 41.789522], + [-87.58667, 41.78951], + [-87.58672, 41.79155], + [-87.58543, 41.79167], + [-87.58532, 41.7921], + [-87.58498, 41.79241], + [-87.58388, 41.79264], + [-87.583852, 41.795562], + [-87.58402, 41.79812], + [-87.58402, 41.79847], + [-87.583915, 41.79847], + [-87.58402, 41.79847], + [-87.58404, 41.79953], + [-87.583932, 41.799527], + [-87.58516, 41.80238], + [-87.58532, 41.80249], + [-87.5858, 41.802544], + [-87.58645, 41.80248], + [-87.58657, 41.802603], + [-87.58645, 41.8026], + [-87.58647, 41.8034], + [-87.58544, 41.80341], + [-87.58532, 41.80249], + [-87.58606, 41.80248], + [-87.586255, 41.80248], + [-87.58645, 41.80248], + [-87.58731, 41.80248], + [-87.58778, 41.80247], + [-87.589082, 41.805837], + [-87.59069, 41.80826], + [-87.59203, 41.80939], + [-87.59201, 41.80968], + [-87.58894, 41.81089], + [-87.59079, 41.81302], + [-87.59275, 41.81447], + [-87.59384, 41.81555], + [-87.59827, 41.82136], + [-87.60091, 41.82633], + [-87.60483, 41.82992], + [-87.60683, 41.83253], + [-87.6073, 41.83338], + [-87.60771, 41.83476], + [-87.60808, 41.83792], + [-87.61112, 41.84528], + [-87.61351, 41.85261], + [-87.61514, 41.85528], + [-87.61744, 41.85994], + [-87.61855, 41.86295], + [-87.61921, 41.8659], + [-87.6192, 41.86655], + [-87.61885, 41.86731], + [-87.616968, 41.869509], + [-87.616989, 41.87328], + [-87.620637, 41.8732], + [-87.620362, 41.869343], + [-87.620358, 41.868718], + [-87.620573, 41.868694], + [-87.620658, 41.873296], + [-87.623907, 41.87327], + [-87.62413, 41.87316], + [-87.624128, 41.878118], + [-87.624336, 41.880424], + [-87.624145, 41.882448], + [-87.62438, 41.8845], + [-87.624429, 41.888173], + [-87.623419, 41.888233], + [-87.621536, 41.88797], + [-87.620805, 41.887755], + [-87.620847, 41.887308] + ] + } + }, + { + "id": "239", + "type": "Feature", + "properties": { + "route_id": "79", + "shape_id": "64701612", + "direction": "East", + "trip_id": 269, + "route_short_name": "79", + "route_long_name": "79th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/79/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.73309, 41.755841], + [-87.733112, 41.755238], + [-87.733841, 41.755159], + [-87.733422, 41.754679], + [-87.733927, 41.754248], + [-87.735393, 41.754034], + [-87.736472, 41.753445], + [-87.737553, 41.753466], + [-87.739598, 41.753972], + [-87.740518, 41.754396], + [-87.741524, 41.754318], + [-87.741673, 41.754006], + [-87.74153, 41.75179], + [-87.741652, 41.751819], + [-87.74153, 41.75179], + [-87.74143, 41.74907], + [-87.685447, 41.749969], + [-87.682905, 41.750114], + [-87.68267, 41.750914], + [-87.681605, 41.750908], + [-87.681438, 41.750078], + [-87.680661, 41.750045], + [-87.634481, 41.750719], + [-87.627188, 41.750859], + [-87.62583, 41.75101], + [-87.62481, 41.75102], + [-87.624812, 41.750898], + [-87.62481, 41.75102], + [-87.623206, 41.750928], + [-87.60564, 41.75129], + [-87.548621, 41.751973], + [-87.548023, 41.751943], + [-87.544733, 41.75107], + [-87.544416, 41.751142], + [-87.544384, 41.751418], + [-87.5447, 41.751968], + [-87.545937, 41.751896], + [-87.545784, 41.751718], + [-87.545075, 41.751844] + ] + } + }, + { + "id": "240", + "type": "Feature", + "properties": { + "route_id": "79", + "shape_id": "64801599", + "direction": "West", + "trip_id": 271, + "route_short_name": "79", + "route_long_name": "79th", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/79/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.54491, 41.751876], + [-87.54471, 41.751925], + [-87.544566, 41.751739], + [-87.544543, 41.751166], + [-87.547751, 41.751935], + [-87.548705, 41.752026], + [-87.58287, 41.7515], + [-87.605024, 41.751363], + [-87.62282, 41.75097], + [-87.625258, 41.751144], + [-87.626972, 41.750968], + [-87.63386, 41.750775], + [-87.633985, 41.750828], + [-87.63411, 41.75088], + [-87.633999, 41.750864], + [-87.634151, 41.750851], + [-87.634303, 41.750839], + [-87.634606, 41.750813], + [-87.636568, 41.750814], + [-87.63793, 41.75071], + [-87.68074, 41.75011], + [-87.681468, 41.750196], + [-87.681529, 41.750647], + [-87.681593, 41.750695], + [-87.682779, 41.75077], + [-87.682669, 41.750919], + [-87.681712, 41.750936], + [-87.681598, 41.75087], + [-87.681592, 41.750703], + [-87.681585, 41.750536], + [-87.681573, 41.750202], + [-87.681588, 41.750183], + [-87.74125, 41.74922], + [-87.741311, 41.754281], + [-87.740555, 41.754323], + [-87.73975, 41.753967], + [-87.738179, 41.753675], + [-87.737562, 41.753414], + [-87.736527, 41.753427], + [-87.735518, 41.753986], + [-87.734182, 41.754094], + [-87.733029, 41.754838], + [-87.732443, 41.7549], + [-87.732452, 41.756749], + [-87.73311, 41.756749], + [-87.733091, 41.755925] + ] + } + }, + { + "id": "241", + "type": "Feature", + "properties": { + "route_id": "8", + "shape_id": "64709368", + "direction": "South", + "trip_id": 271, + "route_short_name": "8", + "route_long_name": "Halsted", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/8/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.64898, 41.949803], + [-87.648796, 41.949784], + [-87.648455, 41.949229], + [-87.649596, 41.949122], + [-87.64956, 41.94689], + [-87.64944, 41.94636], + [-87.649365, 41.940099], + [-87.64836, 41.91383], + [-87.648155, 41.903298], + [-87.64765, 41.89297], + [-87.647602, 41.886929], + [-87.6475, 41.88693], + [-87.64746, 41.88535], + [-87.647564, 41.885352], + [-87.64746, 41.88535], + [-87.647514, 41.883833], + [-87.64713, 41.8746], + [-87.647238, 41.873891], + [-87.647116, 41.869862], + [-87.64691, 41.86811], + [-87.64689, 41.86675], + [-87.646999, 41.866747], + [-87.64689, 41.86675], + [-87.64643, 41.8503], + [-87.64654, 41.84718], + [-87.64721, 41.84687], + [-87.647666, 41.846904], + [-87.648423, 41.846386], + [-87.648263, 41.846299], + [-87.646529, 41.847043], + [-87.645861, 41.817559], + [-87.64571, 41.81626], + [-87.645727, 41.812158], + [-87.64557, 41.81035], + [-87.645681, 41.810345], + [-87.64557, 41.81035], + [-87.64552, 41.80847], + [-87.645638, 41.808529], + [-87.64552, 41.80847], + [-87.645261, 41.794418], + [-87.64512, 41.79366], + [-87.64524, 41.793616], + [-87.64512, 41.79366], + [-87.6451, 41.7926], + [-87.64521, 41.792595], + [-87.6451, 41.7926], + [-87.64505, 41.79078], + [-87.645162, 41.790781], + [-87.64505, 41.79078], + [-87.64501, 41.78898], + [-87.645117, 41.788979], + [-87.64498, 41.78884], + [-87.64497, 41.78719], + [-87.64508, 41.787191], + [-87.64497, 41.78719], + [-87.64492, 41.78531], + [-87.645043, 41.785307], + [-87.64492, 41.78531], + [-87.64488, 41.7842], + [-87.64486, 41.78314], + [-87.644987, 41.783072], + [-87.64488, 41.78302], + [-87.644871, 41.778039], + [-87.64469, 41.77637], + [-87.64469, 41.77577], + [-87.644795, 41.775765], + [-87.64469, 41.77577], + [-87.64465, 41.77441], + [-87.644768, 41.774404], + [-87.64464, 41.77429], + [-87.644338, 41.758557], + [-87.64421, 41.75793], + [-87.64428, 41.756206], + [-87.64408, 41.75288], + [-87.644188, 41.752606], + [-87.64406, 41.75238], + [-87.64403, 41.75079], + [-87.644153, 41.750793], + [-87.644045, 41.749878], + [-87.643759, 41.749789] + ] + } + }, + { + "id": "242", + "type": "Feature", + "properties": { + "route_id": "3", + "shape_id": "64705342", + "direction": "North", + "trip_id": 281, + "route_short_name": "3", + "route_long_name": "King Drive", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/3/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.609013, 41.720992], + [-87.6086, 41.721095], + [-87.608617, 41.721525], + [-87.609395, 41.722033], + [-87.613972, 41.72201], + [-87.614163, 41.722033], + [-87.61421, 41.72251], + [-87.614341, 41.732711], + [-87.614798, 41.745175], + [-87.614973, 41.758217], + [-87.615197, 41.762985], + [-87.615133, 41.765823], + [-87.615482, 41.775225], + [-87.615288, 41.778324], + [-87.615562, 41.778618], + [-87.615463, 41.78228], + [-87.615562, 41.783927], + [-87.61572, 41.784102], + [-87.615593, 41.784348], + [-87.615992, 41.795037], + [-87.616023, 41.802293], + [-87.616357, 41.803588], + [-87.616547, 41.80978], + [-87.616945, 41.824203], + [-87.617008, 41.829893], + [-87.616833, 41.831673], + [-87.617342, 41.84822], + [-87.617612, 41.848745], + [-87.61874, 41.850032], + [-87.618932, 41.852417], + [-87.619202, 41.852822], + [-87.619997, 41.853068], + [-87.622365, 41.852902], + [-87.62362, 41.852988], + [-87.623637, 41.854467], + [-87.623812, 41.854555], + [-87.62389, 41.854872], + [-87.624082, 41.866165], + [-87.623953, 41.869582], + [-87.62417, 41.87437], + [-87.624128, 41.878118], + [-87.624336, 41.880424], + [-87.624145, 41.882448], + [-87.624443, 41.886448], + [-87.624395, 41.888363], + [-87.624081, 41.889659], + [-87.624036, 41.89174], + [-87.624428, 41.893021], + [-87.624573, 41.896355], + [-87.624017, 41.896708], + [-87.620434, 41.896698], + [-87.620327, 41.894221], + [-87.61992, 41.894166], + [-87.619866, 41.893839] + ] + } + }, + { + "id": "243", + "type": "Feature", + "properties": { + "route_id": "53", + "shape_id": "64801232", + "direction": "South", + "trip_id": 286, + "route_short_name": "53", + "route_long_name": "Pulaski", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/53/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.728445, 41.990023], + [-87.728683, 41.989785], + [-87.72854, 41.989118], + [-87.728588, 41.984055], + [-87.728032, 41.968892], + [-87.728143, 41.967207], + [-87.727698, 41.957822], + [-87.727618, 41.953005], + [-87.727793, 41.952235], + [-87.727572, 41.951352], + [-87.727443, 41.948523], + [-87.726808, 41.9243], + [-87.726553, 41.922822], + [-87.726935, 41.922607], + [-87.726935, 41.922417], + [-87.726665, 41.92147], + [-87.72649, 41.916518], + [-87.726395, 41.910073], + [-87.726538, 41.909318], + [-87.726315, 41.902118], + [-87.726458, 41.899663], + [-87.7263, 41.899202], + [-87.72614, 41.896477], + [-87.726062, 41.890277], + [-87.725775, 41.884713], + [-87.725775, 41.883625], + [-87.725902, 41.88365], + [-87.725425, 41.873207], + [-87.725393, 41.86936], + [-87.725138, 41.86576], + [-87.725267, 41.864672], + [-87.72498, 41.85991], + [-87.724948, 41.851987], + [-87.72463, 41.846313], + [-87.724583, 41.844517], + [-87.724742, 41.844612], + [-87.724742, 41.844445], + [-87.724552, 41.842355], + [-87.724422, 41.836951], + [-87.725975, 41.836848], + [-87.725959, 41.836536], + [-87.725722, 41.8366] + ] + } + }, + { + "id": "244", + "type": "Feature", + "properties": { + "route_id": "22", + "shape_id": "64803932", + "direction": "North", + "trip_id": 287, + "route_short_name": "22", + "route_long_name": "Clark", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/22/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.631027, 41.874065], + [-87.630709, 41.87386], + [-87.630635, 41.872299], + [-87.629098, 41.872293], + [-87.629811, 41.898982], + [-87.62987, 41.89981], + [-87.63133, 41.89979], + [-87.631256, 41.903763], + [-87.631424, 41.90403], + [-87.631455, 41.909374], + [-87.631562, 41.909336], + [-87.631615, 41.911289], + [-87.63586, 41.918243], + [-87.636177, 41.918355], + [-87.63694, 41.919357], + [-87.639038, 41.922822], + [-87.64276, 41.929559], + [-87.643572, 41.930185], + [-87.644697, 41.932139], + [-87.644908, 41.932825], + [-87.646397, 41.934583], + [-87.64635, 41.934822], + [-87.647668, 41.93649], + [-87.64993, 41.93901], + [-87.654503, 41.944915], + [-87.66243, 41.95464], + [-87.66405, 41.957283], + [-87.665343, 41.960055], + [-87.6659, 41.961525], + [-87.667298, 41.967827], + [-87.668205, 41.973843], + [-87.668412, 41.975988], + [-87.668283, 41.979812], + [-87.66838, 41.9816], + [-87.668682, 41.983595], + [-87.66946, 41.986567], + [-87.66987, 41.98958], + [-87.670128, 41.996597], + [-87.670398, 41.997915], + [-87.673132, 42.005687], + [-87.674117, 42.009835], + [-87.674578, 42.013015], + [-87.67471, 42.01314], + [-87.67509, 42.01531], + [-87.675087, 42.016027], + [-87.673005, 42.017172], + [-87.672957, 42.018387] + ] + } + }, + { + "id": "245", + "type": "Feature", + "properties": { + "route_id": "3", + "shape_id": "64705343", + "direction": "South", + "trip_id": 290, + "route_short_name": "3", + "route_long_name": "King Drive", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/3/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.619856, 41.893771], + [-87.619886, 41.893475], + [-87.620209, 41.893451], + [-87.62035, 41.89679], + [-87.62433, 41.89672], + [-87.6242, 41.88988], + [-87.62464, 41.88776], + [-87.62418, 41.86931], + [-87.624232, 41.865511], + [-87.62406, 41.86384], + [-87.62419, 41.863837], + [-87.62406, 41.86384], + [-87.624033, 41.859975], + [-87.62389, 41.85933], + [-87.623922, 41.85771], + [-87.62405, 41.85763], + [-87.62389, 41.857312], + [-87.623858, 41.853115], + [-87.62369, 41.852762], + [-87.619847, 41.852826], + [-87.619237, 41.85259], + [-87.619057, 41.852251], + [-87.61909, 41.85105], + [-87.618932, 41.85016], + [-87.617818, 41.848657], + [-87.617708, 41.848093], + [-87.617643, 41.843437], + [-87.617447, 41.843326], + [-87.617409, 41.842503], + [-87.617378, 41.840095], + [-87.617503, 41.839906], + [-87.617561, 41.838493], + [-87.617342, 41.830998], + [-87.617167, 41.829847], + [-87.6165, 41.803413], + [-87.616198, 41.80211], + [-87.616118, 41.800893], + [-87.615785, 41.787082], + [-87.6158, 41.781995], + [-87.61421, 41.723352], + [-87.614083, 41.721922], + [-87.613862, 41.72166], + [-87.609585, 41.721922], + [-87.609347, 41.72166], + [-87.609315, 41.721198], + [-87.609062, 41.720992] + ] + } + }, + { + "id": "246", + "type": "Feature", + "properties": { + "route_id": "77", + "shape_id": "64710944", + "direction": "East", + "trip_id": 292, + "route_short_name": "77", + "route_long_name": "Belmont", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/77/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.835257, 41.937428], + [-87.833207, 41.937563], + [-87.833078, 41.937707], + [-87.828708, 41.937658], + [-87.811923, 41.937977], + [-87.811398, 41.93816], + [-87.806948, 41.938088], + [-87.806997, 41.937977], + [-87.806773, 41.937977], + [-87.718638, 41.93924], + [-87.672813, 41.939575], + [-87.65719, 41.939908], + [-87.639765, 41.940043], + [-87.63878, 41.94022], + [-87.63694, 41.937087], + [-87.636545, 41.934175] + ] + } + }, + { + "id": "247", + "type": "Feature", + "properties": { + "route_id": "53", + "shape_id": "64801228", + "direction": "North", + "trip_id": 293, + "route_short_name": "53", + "route_long_name": "Pulaski", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/53/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.725713, 41.836679], + [-87.725633, 41.836837], + [-87.724432, 41.836868], + [-87.724297, 41.837087], + [-87.724948, 41.862892], + [-87.72507, 41.86289], + [-87.725218, 41.870695], + [-87.725743, 41.88043], + [-87.725615, 41.880685], + [-87.725758, 41.88392], + [-87.725663, 41.884317], + [-87.725695, 41.885295], + [-87.725855, 41.885422], + [-87.725727, 41.887153], + [-87.725855, 41.891485], + [-87.726013, 41.892288], + [-87.72595, 41.895133], + [-87.726108, 41.895665], + [-87.726235, 41.902905], + [-87.726538, 41.908595], + [-87.726538, 41.909327], + [-87.726347, 41.909947], + [-87.726538, 41.914795], + [-87.726427, 41.915312], + [-87.72649, 41.918728], + [-87.726617, 41.918975], + [-87.726507, 41.919062], + [-87.726538, 41.920882], + [-87.726648, 41.921987], + [-87.726935, 41.922512], + [-87.726442, 41.922742], + [-87.726665, 41.92333], + [-87.72676, 41.925325], + [-87.726872, 41.932198], + [-87.727062, 41.933923], + [-87.727093, 41.940845], + [-87.727538, 41.949667], + [-87.72738, 41.952035], + [-87.72703, 41.95221], + [-87.727348, 41.952712], + [-87.727603, 41.955318], + [-87.72808, 41.969377], + [-87.728302, 41.982783], + [-87.728603, 41.98926], + [-87.728572, 41.989578], + [-87.728287, 41.98977], + [-87.728428, 41.989833] + ] + } + }, + { + "id": "248", + "type": "Feature", + "properties": { + "route_id": "77", + "shape_id": "64810902", + "direction": "West", + "trip_id": 294, + "route_short_name": "77", + "route_long_name": "Belmont", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/77/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.636566, 41.933996], + [-87.63607, 41.93318], + [-87.63622, 41.93285], + [-87.63933, 41.93292], + [-87.63954, 41.94012], + [-87.64048, 41.94017], + [-87.649083, 41.940123], + [-87.649162, 41.93996], + [-87.656363, 41.939972], + [-87.658318, 41.939813], + [-87.666043, 41.939828], + [-87.671748, 41.93959], + [-87.688487, 41.939518], + [-87.688757, 41.939265], + [-87.68909, 41.93924], + [-87.709965, 41.939403], + [-87.712052, 41.939297], + [-87.712036, 41.939111], + [-87.712218, 41.939131], + [-87.712072, 41.939067], + [-87.712228, 41.93898], + [-87.712485, 41.93898], + [-87.712491, 41.939287], + [-87.71724, 41.939312], + [-87.72204, 41.939257], + [-87.722357, 41.938993], + [-87.723137, 41.938923], + [-87.723852, 41.939058], + [-87.72382, 41.939248], + [-87.724122, 41.939058], + [-87.725393, 41.938993], + [-87.72773, 41.939058], + [-87.727667, 41.939153], + [-87.728287, 41.939033], + [-87.734453, 41.939097], + [-87.73625, 41.93897], + [-87.759058, 41.938772], + [-87.802832, 41.938088], + [-87.81647, 41.93804], + [-87.834748, 41.937667], + [-87.835782, 41.937492], + [-87.835782, 41.937357], + [-87.8354, 41.937365] + ] + } + }, + { + "id": "249", + "type": "Feature", + "properties": { + "route_id": "9", + "shape_id": "64701600", + "direction": "South", + "trip_id": 300, + "route_short_name": "9", + "route_long_name": "Ashland", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/9/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.663465, 41.956472], + [-87.664005, 41.957245], + [-87.664273, 41.957285], + [-87.664224, 41.9545], + [-87.664347, 41.954392], + [-87.6691, 41.95435], + [-87.669127, 41.953983], + [-87.66833, 41.92891], + [-87.668443, 41.928902], + [-87.66832, 41.92877], + [-87.66819, 41.92433], + [-87.6687, 41.92148], + [-87.668363, 41.91911], + [-87.66783, 41.91711], + [-87.667807, 41.910702], + [-87.667332, 41.893092], + [-87.666853, 41.881202], + [-87.666561, 41.867121], + [-87.66634, 41.86507], + [-87.66628, 41.86299], + [-87.666424, 41.862983], + [-87.66628, 41.86299], + [-87.66625, 41.86247], + [-87.666374, 41.861616], + [-87.666072, 41.855073], + [-87.666155, 41.852632], + [-87.665954, 41.84755], + [-87.665906, 41.839668], + [-87.665823, 41.839016], + [-87.665726, 41.838949], + [-87.665542, 41.838928], + [-87.665433, 41.838923], + [-87.665345, 41.838878], + [-87.665101, 41.838505], + [-87.664735, 41.838626], + [-87.664946, 41.83908], + [-87.66536, 41.839097], + [-87.665438, 41.838977], + [-87.66563, 41.838867], + [-87.665788, 41.838715], + [-87.665868, 41.83804], + [-87.66554, 41.823575], + [-87.66528, 41.82085], + [-87.664515, 41.786914], + [-87.66431, 41.786907], + [-87.664478, 41.786697], + [-87.664342, 41.780588], + [-87.662862, 41.725764], + [-87.662797, 41.720941], + [-87.662943, 41.720635] + ] + } + }, + { + "id": "250", + "type": "Feature", + "properties": { + "route_id": "9", + "shape_id": "64709372", + "direction": "North", + "trip_id": 300, + "route_short_name": "9", + "route_long_name": "Ashland", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/9/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.662943, 41.720483], + [-87.662705, 41.720397], + [-87.662593, 41.720698], + [-87.662764, 41.728338], + [-87.664065, 41.778826], + [-87.664247, 41.77884], + [-87.664053, 41.778989], + [-87.664263, 41.783013], + [-87.664818, 41.808913], + [-87.664978, 41.810383], + [-87.665073, 41.815748], + [-87.664883, 41.815867], + [-87.665073, 41.821692], + [-87.665312, 41.823537], + [-87.665662, 41.837618], + [-87.66555, 41.838763], + [-87.665153, 41.838827], + [-87.664835, 41.838485], + [-87.664677, 41.838597], + [-87.66493, 41.83908], + [-87.66564, 41.83903], + [-87.665713, 41.839857], + [-87.66571, 41.847347], + [-87.665868, 41.84741], + [-87.665995, 41.858058], + [-87.666297, 41.861962], + [-87.666345, 41.866713], + [-87.666187, 41.866802], + [-87.666425, 41.874002], + [-87.666557, 41.873978], + [-87.666503, 41.876775], + [-87.666974, 41.887893], + [-87.667108, 41.896348], + [-87.667362, 41.899893], + [-87.667738, 41.915376], + [-87.667617, 41.917203], + [-87.668091, 41.918714], + [-87.668544, 41.921564], + [-87.66801, 41.924279], + [-87.66898, 41.95424], + [-87.66225, 41.95437], + [-87.66337, 41.95619], + [-87.663263, 41.956228], + [-87.66345, 41.95632] + ] + } + }, + { + "id": "252", + "type": "Feature", + "properties": { + "route_id": "6", + "shape_id": "64707107", + "direction": "South", + "trip_id": 310, + "route_short_name": "6", + "route_long_name": "Jackson Park Express", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/6/", + "route_color": "b71234", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.620861, 41.887159], + [-87.62076, 41.88452], + [-87.622242, 41.884605], + [-87.622308, 41.888059], + [-87.62273, 41.888353], + [-87.624987, 41.888425], + [-87.625453, 41.888254], + [-87.626837, 41.887016], + [-87.628077, 41.886732], + [-87.627569, 41.873037], + [-87.620594, 41.873238], + [-87.620487, 41.867774], + [-87.619138, 41.863558], + [-87.618248, 41.86127], + [-87.61607, 41.8567], + [-87.614003, 41.851852], + [-87.608362, 41.83796], + [-87.608138, 41.83703], + [-87.607965, 41.834687], + [-87.607377, 41.832922], + [-87.604753, 41.829457], + [-87.601098, 41.826253], + [-87.600462, 41.825253], + [-87.598888, 41.821875], + [-87.597903, 41.82031], + [-87.594025, 41.815263], + [-87.59331, 41.814515], + [-87.591402, 41.813013], + [-87.590655, 41.812147], + [-87.589813, 41.810478], + [-87.591195, 41.80989], + [-87.592514, 41.809678], + [-87.591412, 41.808809], + [-87.58986, 41.806815], + [-87.58789, 41.80261], + [-87.5856, 41.802563], + [-87.585045, 41.802265], + [-87.584043, 41.799678], + [-87.583847, 41.793766], + [-87.584012, 41.792685], + [-87.585187, 41.792287], + [-87.5856, 41.791572], + [-87.586665, 41.791453], + [-87.586777, 41.791302], + [-87.586587, 41.787877], + [-87.58672, 41.787552], + [-87.58634, 41.77333], + [-87.566813, 41.773477], + [-87.56667, 41.773142], + [-87.566463, 41.766458], + [-87.566082, 41.766275], + [-87.563078, 41.76634], + [-87.56268, 41.766188], + [-87.557182, 41.760545], + [-87.550108, 41.753982], + [-87.54836, 41.752153], + [-87.547342, 41.751732], + [-87.54437, 41.751048], + [-87.544275, 41.75135], + [-87.544513, 41.751875], + [-87.545673, 41.752027], + [-87.545943, 41.751835], + [-87.545768, 41.751732], + [-87.545022, 41.751852] + ] + } + }, + { + "id": "253", + "type": "Feature", + "properties": { + "route_id": "22", + "shape_id": "64803936", + "direction": "South", + "trip_id": 315, + "route_short_name": "22", + "route_long_name": "Clark", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/22/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.673292, 42.01892], + [-87.673625, 42.018998], + [-87.673725, 42.019357], + [-87.673927, 42.019388], + [-87.676295, 42.019388], + [-87.676327, 42.019197], + [-87.675485, 42.017275], + [-87.67523, 42.01623], + [-87.674627, 42.01206], + [-87.67318, 42.005402], + [-87.671352, 42.000283], + [-87.670413, 41.997048], + [-87.670128, 41.989492], + [-87.668458, 41.981965], + [-87.668332, 41.979072], + [-87.66849, 41.976387], + [-87.667697, 41.971133], + [-87.667522, 41.968765], + [-87.666012, 41.961787], + [-87.665312, 41.959823], + [-87.664517, 41.957997], + [-87.662483, 41.95457], + [-87.661212, 41.953203], + [-87.65827, 41.949333], + [-87.657523, 41.948658], + [-87.653757, 41.943787], + [-87.653152, 41.94323], + [-87.652198, 41.94199], + [-87.652193, 41.941751], + [-87.64805, 41.936602], + [-87.64786, 41.936587], + [-87.647033, 41.935665], + [-87.645068, 41.932982], + [-87.644005, 41.930781], + [-87.64347, 41.92999], + [-87.64282, 41.92955], + [-87.63736, 41.920262], + [-87.635987, 41.9183], + [-87.63171, 41.91129], + [-87.63112, 41.89203], + [-87.631199, 41.891701], + [-87.632572, 41.891649], + [-87.632722, 41.891313], + [-87.632566, 41.886911], + [-87.631027, 41.886777], + [-87.631142, 41.885319], + [-87.6306, 41.87643], + [-87.631107, 41.876313], + [-87.631155, 41.87617], + [-87.631027, 41.874168] + ] + } + }, + { + "id": "254", + "type": "Feature", + "properties": { + "route_id": "81", + "shape_id": "64816551", + "direction": "West", + "trip_id": 326, + "route_short_name": "81", + "route_long_name": "Lawrence", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/81/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.648654, 41.965918], + [-87.64964, 41.96917], + [-87.65967, 41.96904], + [-87.659708, 41.968826], + [-87.657665, 41.965441], + [-87.669209, 41.965263], + [-87.669358, 41.968824], + [-87.669957, 41.968961], + [-87.68768, 41.96862], + [-87.708307, 41.968537], + [-87.75919, 41.9679], + [-87.761188, 41.969937], + [-87.761477, 41.970101], + [-87.761769, 41.969936] + ] + } + }, + { + "id": "255", + "type": "Feature", + "properties": { + "route_id": "81", + "shape_id": "64716550", + "direction": "East", + "trip_id": 327, + "route_short_name": "81", + "route_long_name": "Lawrence", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/81/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.761897, 41.96981], + [-87.76219, 41.96954], + [-87.761716, 41.968849], + [-87.76078, 41.9679], + [-87.76028, 41.967817], + [-87.66968, 41.96887], + [-87.6695, 41.96882], + [-87.66942, 41.96522], + [-87.6574, 41.9654], + [-87.65965, 41.96878], + [-87.65967, 41.96904], + [-87.6488, 41.96925], + [-87.64785, 41.96806], + [-87.64762, 41.96708], + [-87.64798, 41.9656], + [-87.64862, 41.96556], + [-87.64869, 41.96581] + ] + } + }, + { + "id": "256", + "type": "Feature", + "properties": { + "route_id": "49", + "shape_id": "64801178", + "direction": "South", + "trip_id": 340, + "route_short_name": "49", + "route_long_name": "Western", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/49/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.689472, 41.97846], + [-87.689392, 41.97854], + [-87.689345, 41.978373], + [-87.68909, 41.973072], + [-87.68854, 41.95493], + [-87.688217, 41.937762], + [-87.68736, 41.91355], + [-87.685545, 41.844938], + [-87.685323, 41.839145], + [-87.684545, 41.836188], + [-87.684592, 41.834472], + [-87.685077, 41.833112], + [-87.685157, 41.832174], + [-87.684528, 41.808388], + [-87.684372, 41.805864], + [-87.68381, 41.805545], + [-87.683988, 41.804868], + [-87.683824, 41.804867], + [-87.683802, 41.804366], + [-87.684329, 41.804283], + [-87.684416, 41.804143], + [-87.682985, 41.751966], + [-87.682914, 41.751026], + [-87.682004, 41.750911], + [-87.681945, 41.750793], + [-87.682507, 41.750748] + ] + } + }, + { + "id": "257", + "type": "Feature", + "properties": { + "route_id": "49", + "shape_id": "64801180", + "direction": "North", + "trip_id": 345, + "route_short_name": "49", + "route_long_name": "Western", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/49/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.682637, 41.750715], + [-87.682787, 41.750866], + [-87.682938, 41.755842], + [-87.683273, 41.771608], + [-87.683415, 41.772553], + [-87.684305, 41.804461], + [-87.684126, 41.80527], + [-87.684283, 41.80553], + [-87.684417, 41.808325], + [-87.68503, 41.832224], + [-87.684973, 41.833008], + [-87.684493, 41.834285], + [-87.684497, 41.835933], + [-87.685085, 41.838763], + [-87.685418, 41.845263], + [-87.686087, 41.873572], + [-87.686213, 41.873787], + [-87.686087, 41.875972], + [-87.68627, 41.87789], + [-87.686563, 41.890897], + [-87.686817, 41.895618], + [-87.686658, 41.895737], + [-87.686802, 41.901045], + [-87.686928, 41.901148], + [-87.687008, 41.901992], + [-87.687198, 41.914255], + [-87.687532, 41.92178], + [-87.687453, 41.923663], + [-87.687818, 41.929958], + [-87.688005, 41.942538], + [-87.688963, 41.97614], + [-87.689202, 41.978135], + [-87.689948, 41.978325], + [-87.689933, 41.978477], + [-87.68971, 41.978483] + ] + } + }, + { + "id": "261", + "type": "Feature", + "properties": { + "route_id": "66", + "shape_id": "64806665", + "direction": "West", + "trip_id": 406, + "route_short_name": "66", + "route_long_name": "Chicago", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/66/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.609991, 41.892311], + [-87.609979, 41.89218], + [-87.61221, 41.89196], + [-87.620043, 41.891803], + [-87.62035, 41.89679], + [-87.621702, 41.896828], + [-87.64245, 41.89648], + [-87.642667, 41.896582], + [-87.64267, 41.89648], + [-87.6477, 41.89639], + [-87.64826, 41.89639], + [-87.648262, 41.896525], + [-87.64826, 41.89639], + [-87.64979, 41.89635], + [-87.664787, 41.896207], + [-87.67742, 41.8959], + [-87.67744, 41.896007], + [-87.67742, 41.8959], + [-87.68195, 41.89583], + [-87.692205, 41.895753], + [-87.693922, 41.895888], + [-87.694527, 41.895705], + [-87.736345, 41.8953], + [-87.741288, 41.895053], + [-87.746088, 41.895148], + [-87.74798, 41.895013], + [-87.763253, 41.894967], + [-87.771535, 41.89476], + [-87.774762, 41.894863], + [-87.774905, 41.895125], + [-87.774698, 41.895205], + [-87.774428, 41.89503] + ] + } + }, + { + "id": "262", + "type": "Feature", + "properties": { + "route_id": "66", + "shape_id": "64806662", + "direction": "East", + "trip_id": 408, + "route_short_name": "66", + "route_long_name": "Chicago", + "route_type": "3", + "route_url": "http://www.transitchicago.com/bus/66/", + "route_color": "565a5c", + "route_text_color": "ffffff" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [-87.774443, 41.894903], + [-87.774173, 41.894743], + [-87.77268, 41.89472], + [-87.759615, 41.894903], + [-87.745977, 41.894878], + [-87.723677, 41.895205], + [-87.723645, 41.895363], + [-87.722135, 41.895403], + [-87.68677, 41.895697], + [-87.6556, 41.89631], + [-87.62058, 41.896748], + [-87.620409, 41.896641], + [-87.620282, 41.890995], + [-87.611519, 41.891122], + [-87.611523, 41.892383], + [-87.610478, 41.892997], + [-87.61008, 41.892983], + [-87.610011, 41.892461] + ] + } + } + ] +} diff --git a/scrape_data/cta_data_downloads.py b/scrape_data/cta_data_downloads.py index 9e02e31..3bcc17f 100644 --- a/scrape_data/cta_data_downloads.py +++ b/scrape_data/cta_data_downloads.py @@ -6,7 +6,9 @@ import pandas as pd import data_analysis.static_gtfs_analysis as sga +import data_analysis.schedule_manager as sm import data_analysis.compare_scheduled_and_rt as csrt +import data_analysis.realtime_analysis as rta from utils import s3_csv_reader ACCESS_KEY = sys.argv[1] @@ -63,9 +65,10 @@ def save_csv_to_bucket(df: pd.DataFrame, filename: str) -> None: def save_sched_daily_summary() -> None: - data = sga.GTFSFeed.extract_data(CTA_GTFS) + data = sm.GTFSFeed.extract_data(CTA_GTFS, version_id=today) data = sga.format_dates_hours(data) - trip_summary = sga.make_trip_summary(data) + schedule = sga.Schedule(data) + trip_summary = schedule.make_trip_summary() route_daily_summary = ( sga.summarize_date_rt(trip_summary) @@ -93,7 +96,7 @@ def save_realtime_daily_summary() -> None: daily_data = s3_csv_reader.read_csv(csrt.BASE_PATH / f"bus_full_day_data_v2/{end_date}.csv") - daily_data = csrt.make_daily_summary(daily_data) + daily_data = rta.RealtimeProvider.make_daily_summary(daily_data) filename = f'realtime_summaries/daily_job/bus_full_day_data_v2/{end_date}.csv' save_csv_to_bucket(daily_data, filename=filename) diff --git a/scrape_data/scrape_schedule_versions.py b/scrape_data/scrape_schedule_versions.py index 67c140d..cbd28ed 100644 --- a/scrape_data/scrape_schedule_versions.py +++ b/scrape_data/scrape_schedule_versions.py @@ -14,31 +14,15 @@ BASE_URL = "https://transitfeeds.com" -def check_latest_rt_data_date() -> str: - """Fetch the latest available date of real-time bus data - - Returns: - str: A string of the latest date in YYYY-MM-DD format. - """ - if pendulum.now("America/Chicago").hour >= 11: - end_date = ( - pendulum.yesterday("America/Chicago") - .date().format('YYYY-MM-DD') - ) - else: - end_date = ( - pendulum.now("America/Chicago").subtract(days=2) - .date().format('YYYY-MM-DD') - ) - return end_date - - def fetch_schedule_versions(month: int, year: int) -> List[pendulum.date]: """Get the schedule versions from transitfeeds.com from the most recent to specified month and year (inclusive). In case there are multiple schedules for a given month and year pair, all schedules will be fetched. + The last update to transitfeeds.com schedules was in December 2023 + and no further updates are planned. + Args: month (int): The month of interest year (int): The year of interest @@ -152,11 +136,6 @@ def calculate_version_date_ranges( except IndexError: pass - # Handle the current schedule version by setting the end date as the latest - # available date for data. - start_end_list.append( - (schedule_list[-1].add(days=1), check_latest_rt_data_date()) - ) return schedule_list, start_end_list diff --git a/update_data.py b/update_data.py index 553620f..dcc23d4 100644 --- a/update_data.py +++ b/update_data.py @@ -1,9 +1,15 @@ from collections import namedtuple +from argparse import ArgumentParser +import calendar +import datetime +import json import pandas as pd +import geopandas import data_analysis.compare_scheduled_and_rt as csrt import data_analysis.plots as plots +from data_analysis.cache_manager import CacheManager DataUpdate = namedtuple( "DataUpdate", ["combined_long_df", "summary_df", "start_date", "end_date"] @@ -167,6 +173,8 @@ def update_interactive_map_data(data_update: DataUpdate) -> None: for col in summary_df_mean.columns[2:]: summary_df_mean = plots.calculate_percentile_and_rank(summary_df_mean, col=col) + summary_df_wk = None + # JSON files for frontend interactive map by day type for day_type in plots.DAY_NAMES.keys(): summary_df_mean_day = plots.filter_day_type(summary_df_mean, day_type=day_type) @@ -177,6 +185,26 @@ def update_interactive_map_data(data_update: DataUpdate) -> None: f"{save_path}.json", date_format="iso", orient="records" ) summary_df_mean_day.to_html(f"{save_path}_table.html", index=False) + if day_type == 'wk': + summary_df_wk = summary_df_mean_day + + # data.json for frontend + shapes_file = plots.ASSETS_PATH / 'bus_route_shapes_simplified_linestring.json' + shapes = geopandas.read_file(shapes_file, driver='GeoJSON') + raw_data_json = summary_df_wk.set_index('route_id').join(shapes.set_index('route_id')) + data_cols = ['route_id', 'day_type', 'ratio', 'ratio_percentiles', 'ratio_ranking', 'shape_id', 'direction', 'trip_id', + 'route_short_name', 'route_long_name', 'route_type', 'route_url', 'route_color', 'route_text_color', + 'geometry'] + + # create a json string so we can append the dates attribute + data_json = geopandas.GeoDataFrame(raw_data_json.reset_index()[data_cols]).to_json() + data_json = json.loads(data_json) + data_json.update({"dates": {"start": start_date, "end": end_date }}) + + data_json_path = plots.DATA_PATH / f"frontend_data_{start_date}_to_{end_date}_wk" + + with open(f"{data_json_path}.json", 'w') as f: + json.dump(data_json, f) def update_lineplot_data(data_update: DataUpdate) -> None: @@ -203,6 +231,10 @@ def update_lineplot_data(data_update: DataUpdate) -> None: start_date = data_update.start_date end_date = data_update.end_date + # date being in actual datetime format is problematic for the front end + combined_long_df["date_dt"] = combined_long_df["date"].copy() + combined_long_df["date"] = combined_long_df.date_dt.dt.strftime('%Y-%m-%d') + # JSON files for lineplots json_cols = ["date", "trip_count_rt", "trip_count_sched", "ratio", "route_id"] @@ -270,10 +302,10 @@ def update_barchart_data( last_month = plots.datetime.now().month - 1 current_year = plots.datetime.now().year - last_day = plots.calendar.monthrange(current_year, last_month)[1] + last_day = calendar.monthrange(current_year, last_month)[1] last_month_str = f"0{last_month}" if last_month < 10 else str(last_month) - combined_long_groupby_day_type = plots.filter_dates( + combined_long_groupby_day_type = filter_dates( combined_long_groupby_day_type, bar_start_date, f"{current_year}-{last_month_str}-{last_day}", @@ -308,9 +340,39 @@ def update_barchart_data( ) +class Updater: + def __init__(self, previous_file): + self.previous_df = pd.read_json(previous_file) + + # https://stackoverflow.com/questions/13703720/converting-between-datetime-timestamp-and-datetime64 + def latest(self) -> datetime.datetime: + return pd.Timestamp(max(self.previous_df['date'].unique())).to_pydatetime() + + def main() -> None: """Refresh data for interactive map, lineplots, and barcharts.""" - combined_long_df, summary_df = csrt.main(freq="D") + parser = ArgumentParser( + prog='UpdateData', + description='Update Ghost Buses Data', + ) + parser.add_argument('--update', nargs=1, required=False, help="Update all-day comparison file.") + parser.add_argument('--frequency', nargs=1, required=False, default='D', + help="Frequency as described in pandas offset aliases.") + parser.add_argument('--verbose', action='store_true') + args = parser.parse_args() + + start_date = None + existing_df = None + if args.update: + u = Updater(args.update[0]) + start_date = u.latest() + existing_df = u.previous_df + freq = 'D' + if args.frequency: + freq = args.frequency[0] + cache_manager = CacheManager(verbose=args.verbose) + combined_long_df, summary_df = csrt.main(cache_manager, freq=freq, start_date=start_date, end_date=None, + existing=existing_df) combined_long_df.loc[:, "ratio"] = ( combined_long_df.loc[:, "trip_count_rt"] diff --git a/utils/s3_csv_reader.py b/utils/s3_csv_reader.py index 704feef..c44854a 100644 --- a/utils/s3_csv_reader.py +++ b/utils/s3_csv_reader.py @@ -5,17 +5,15 @@ CACHE_MANAGER = CacheManager(verbose=False) -def read_csv(filename: str | Path) -> pd.DataFrame: +def read_csv(filename: Path) -> pd.DataFrame: """Read pandas csv from S3 Args: - filename (str | Path): file to download from S3. + filename (Path): file to download from S3. Returns: pd.DataFrame: A Pandas DataFrame from the S3 file. """ - if isinstance(filename, str): - filename = Path(filename) s3_filename = '/'.join(filename.parts[-2:]) cache_filename = f'{filename.stem}.csv' df = pd.read_csv( @@ -27,4 +25,3 @@ def read_csv(filename: str | Path) -> pd.DataFrame: low_memory=False ) return df - \ No newline at end of file