Interested Article - NYCS DB
- 2020-12-04
- 1
Модуль содержит более 60 функций для вычисления информации, связанной с маршрутами Нью-Йоркского метрополитена . Область использования:
- более 400 статей о станциях и пересадочных узлах;
- около 70 статей о линиях и маршрутах;
- список станций, список маршрутов, список линий;
- другие статьи со ссылками на статьи о станциях, линиях и маршрутах.
Проблема состоит в том, что поезда в Нью-Йорке ходят по маршрутам, отражена в статьях, а маршруты периодически меняются. До появления этого модуля каждый раз при изменении в каком-то маршруте приходилось вносить апдейт в несколько десятков статей, каждый раз рискуя что-то забыть или ошибиться. Модуль вычисляет практически всю информацию такого рода.
Охват информации
Что учитывается
Что учитывается в модуле (если надо, см. подробности ):
- движение поездов по маршрутам;
- деление маршрутов на экспрессы и локальные;
- изменение маршрутов в зависимости от времени суток;
- наличие вилочного движения;
- возможность различий между направлениями;
- доступность станций для инвалидов;
- закрытые станции;
- неиспользуемые пути;
- проектируемые/строящиеся станции и проектируемые маршруты;
- отображение временных изменений (вся та же информация, но параллельно для обычной схемы и для введённой на несколько месяцев в связи с каким-нибудь большим ремонтом; пока только для изменений в маршрутах и в виртуальных пересадках и только в карточке станции).
Что пока не учитывается
В дальнейшем можно добавить новые возможности:
- учёт того факта, что некоторые поезда оборачиваются не доезжая до конечной станции (при этом на станции Кингс-Хайвей и на станции Бернсайд-авеню и трёх предыдущих идут по экспресс-пути, что в модуле пока не отражено);
- различия в остановках между поездами, движущимися на юг и на север (на момент составления модуля это имеет значение для станции Акуидакт-Рейстрак и для некоторых поездов в северной части маршрута в часы пик, а также для выбора между локальным и экспресс-путём у некоторых маршрутов на станциях Канал-стрит и Куинс-Плаза , хотя совсем недавно это было и у ночного челнока и ещё где-то); сегодня учитываются только различия между поездами, движущимися в пиковом направлении и в обратном ему; информация о различиях между севером и югом пока находится прямо в статьях и поддерживается вручную;
- различия между утренним и вечерним часом пик;
- суперэкспрессы (маршруты, проходящие без остановки даже некоторые из станций, помеченных как «для всех поездов»; в последние годы не используются, но могут быть введены в любой момент);
- места возможного перехода поезда с экспресс-путей на локальные или наоборот для пополнения вычисляемого списка соседних станций для каждой станции;
- количество путей по участкам на схемах линий.
Функции
Во всех примерах взяты:
- в качестве станции — Эссекс-стрит (линия Нассо-стрит, Би-эм-ти) ,
- в качестве пересадочного узла — Деланси-стрит / Эссекс-стрит (Нью-Йоркское метро) ,
- в качестве маршрута — ,
- в качестве линии — линия Нассо-стрит, Би-эм-ти ,
- в качестве бывшей станции — Корт-стрит (линия Фултон-стрит, Ай-эн-ди) .
Кроме того, во избежание повторения примеров в таблице функций использованы для построения:
- навигационной таблицы — Парк-Плейс (линия Франклин-авеню, Би-эм-ти) ,
- сегмента линии — Franklin (и в качестве пары сегментов — PP и Brigh),
- маршрута — челнок Франклин-авеню .
Для карточек статей о станциях
Название | Ввод | Вывод | Форматирование вывода | Применение | Пример |
---|---|---|---|---|---|
station_full | Станция. | Останавливающиеся на станции маршруты. | Для каждого маршрута его буллет со ссылкой на статью о маршруте и в уголке значок, обозначающий, когда этот маршрут останавливается на этой станции. | Карточка станции. | |
station_lines | Станция. | Линии, проходящие через станцию. | Просто список ссылок на статьи о линиях. Второй (опциональный) параметр — цвет букв (для вывода на цветном фоне в карточке). | Карточка станции. | линия Нассо-стрит, Би-эм-ти |
station_next | Станция. | Те станции, которые могут оказаться следующими при поездке от данной станции на поездах разных маршрутов. | Как в station_full, но вместо буллетов маршрутов — текст со ссылкой на статью о маршруте. Список состоит из двух разделённых горизонтальной чертой частей (как правило север и юг, но в общем случае просто по одну и другую сторону от станции). Если во втором параметре написать acc, будут выданы те станции, которые доступны для инвалидов. | Карточка станции. |
Бауэри
( J Z ) Бродвей — Лафайетт-стрит ( M ) Марси-авеню ( J M Z ) |
station_netto_T | Станция. | Название станции (или пересадочного узла) без уточнения. | Чистый текст. | Карточка станции. | Эссекс-стрит |
station_acc | Станция. | Обозначение доступности станции для инвалидов. | Значок инвалидного кресла и (опционально) текст примечания. | Карточка станции. | |
station_opened | Станция. | Дата открытия. | Текст. | Карточка станции. | 16 сентября 1908 |
station_eng | Станция. Во втором параметре поддерживаются значения former и future для бывших и будущих станций соответственно. | Английское название. | Текст. | Карточка станции. | Essex Street |
station_ridership | Станция. | Пассажиропоток. | Текст. Для станций, входящих в пересадочный узел, не выводится ничего, потому что в источнике данные приводятся по пересадочным узлам суммарно. Для таких станций пассажиропоток выводится только в карточке всего пересадочного узла при помощи функции complex_ridership. | Карточка станции. |
▼
1 347 765
(317 из 424) |
station_connections | Станция. Во втором параметре поддерживаются значения former и future для бывших и будущих станций соответственно. | Пересадки на другие виды транспорта, а также виртуальные пересадки между станциями метро. В статьях о пересадочных узлах срабатывает в карточке узла, а не в карточках отдельных станций. | Текст. | Карточка станции. | [ ] |
station_csv | Станция и имя поля. | Боро (если второй параметр boro), структурный тип станции (если второй параметр struc), географические координаты (если второй параметр coord), код станции (если второй параметр id). | Текст. | Карточка станции. |
|
station_cats | Станция. Во втором параметре поддерживаются значения former и future для бывших и будущих станций соответственно. | Категории для статьи (три вида категорий: по линии, по году открытия и по кросс-платформенной пересадке ). | При вызове не в пространстве статей категории показываются как обычные ссылки списком. | Карточка станции. | |
former_data | Станция и имя поля. | Только для бывших станций: боро (если второй параметр boro), дата открытия (если второй параметр opened), дата закрытия (если второй параметр closed), структурный тип станции (если второй параметр struc). | Текст. | Карточка станции. |
|
Карточки для примера
|
|
Для других частей статей о станциях
Название | Ввод | Вывод | Форматирование вывода | Применение | Пример | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
station_prose0 | Станция. | Самое начало преамбулы: название станции на русском и английском и линия (либо список линий). | Связный текст. | Преамбула статьи о станции. | «Эссекс-стрит» ( англ. Essex Street ) — станция Нью-Йоркского метрополитена , расположенная на линии Нассо-стрит, Би-эм-ти . | ||||||||||||||||||||||||
station_prose | Станция. Один необязательный параметр описан правее. | Останавливающиеся на станции маршруты, и далее (в зависимости от типа станции) маршруты: для которых станция является конечной; проходящие станцию без остановки; проходящие по тем и иным путям. Если станция на одном из 10 первых мест по пассажиропотоку, то добавляется текст ещё и об этом. | Связный текст. Через второй параметр можно передать дополнительный текст, который будет вставлен после слов «На станции». | Преамбула статьи о станции. | На станции останавливаются маршруты: J (круглосуточно), M (круглосуточно, кроме ночи) и Z (в часы пик в пиковом направлении). Станция является северной конечной для маршрута M (в выходные). | ||||||||||||||||||||||||
SL |
Станция, ориентация схемы (V или H), тип пути, список маршрутов (через запятую и пробел) для добавки к вычисляемым и список маршрутов (через запятую и пробел) для отмены.
Допустимые типы пути:
|
Маршруты, проходящие через станцию по данному пути. | Для каждого маршрута только мелкий буллет без значка. | Схема платформ и путей станции, составленная при помощи шаблонов серии SL . |
|
||||||||||||||||||||||||
station_expressinuse |
Станция и два варианта возвращаемого значения. Если не задана валидная станция, статья заносится в
Категория:Статьи с ошибочными параметрами при обращении к модулю NYCS DB
.
Для демонстрационных целей поддерживаются фиктивные станции «+» и «-», соответствующие двум случаям, описанным правее. |
Если на станции экспресс-пути используются хотя бы одним маршрутом (без разницы, с остановкой или без), то второй из переданных параметров, иначе третий. | Строка. | На схеме путей и платформ позволяет создать if, чтобы показывать экспресс-пути сплошной линией или пунктиром. |
|
||||||||||||||||||||||||
station_terminalinuse | Как выше. В четвёртый параметр можно передать направление (n или s). | Если станция является конечной хотя бы для одного маршрута (северной или южной соответственно, если в четвёртом параметре задано n или s, и хотя бы северной или южной в противном случае), то второй из переданных параметров, иначе третий. Функция используется для путей, которые служат только для разворота поездов. | Строка. | Аналогично предыдущей функции. |
|
||||||||||||||||||||||||
connection_use_st | Две или три станции. Если не задано две валидных станции, статья заносится в Категория:Статьи с ошибочными параметрами при обращении к модулю NYCS DB . Один необязательный параметр (и альтернативный способ заполнения обязательных) описан правее. | Маршруты, использующие соединение между двумя станциями (если задано три, то от первой до двух остальных суммарно). Учитываются только маршруты, останавливающиеся на заданных станциях, но не проходящие их без остановки. | Текст. Если в третьем параметре (для случая трёх станций в четвёртом) задано слово when, то маршруты выдаются с описанием времён, иначе без. Если там же задано слово letters, то выдаётся только список букв и цифр текстом без ссылок, а если слово bullets, bullets all или full small, то список буллетов. Если в третьем параметре (вместо третьей станции) задано x или o, это обозначает, что для второй станции нужны только маршруты, проходящие по экспресс- или локальным путям соответственно. | Статья о станции (описание развилок на пути от станции). |
А пути уходят вон туда (маршрут
Q
круглосуточно). Они делятся на экспресс-пути (регулярного движения нет) и локальные (маршрут
Q
круглосуточно).
Тоннель входит в состав линии Восьмой авеню, Ай-эн-ди (маршруты A и C метрополитена ). |
||||||||||||||||||||||||
station_terminal | Станция и направление (n или s). Два необязательных параметра описаны правее. | Маршруты, для которых данная станция является конечной. | Текст. Если в третьем параметре задано слово when, то маршруты выдаются с описанием времён, иначе без. Если в четвёртом параметре (при незаданном when в третьем) задано слово plain, то буквы маршрутов выдаются без ссылок на статьи о них. Если там же задано слово letters, выдаётся только список букв и цифр текстом без ссылок. | Статья о станции. | А этот путь служит конечным (маршрут S (челнок Франклин-авеню)). | ||||||||||||||||||||||||
station_terminalonly | Станция. | Проверка, является ли станция конечной для всех маршрутов, останавливающихся на ней. | Если станция является северной конечной для всех её поездов, то n, если южной, то s, иначе пустая строка. | Статья о станции. | s | ||||||||||||||||||||||||
route_table_nav | Станция или пересадочный узел. | Списки станций по маршрутам, проходящим через станцию или пересадочный узел, которым посвящена статья (по порядку с севера на юг). | Горизонтальный навшаблон. | Навшаблон в статье о станции или о пересадочном узле. |
Фрагмент преамбулы для примера
«Эссекс-стрит» ( англ. Essex Street ) — станция Нью-Йоркского метрополитена , расположенная на линии Нассо-стрит, Би-эм-ти . … На станции останавливаются маршруты: J (круглосуточно), M (круглосуточно, кроме ночи) и Z (в часы пик в пиковом направлении). Станция является северной конечной для маршрута M (в выходные).
Для поездов, следующих на восток, используется островная платформа и два пути с двух сторон от неё: северный из них относится к линии Нассо-стрит (маршруты J и Z ), а южный входит в состав соединения Кристи-стрит , соединяющего линию Шестой авеню и линию Джамейка (маршрут M ).
Для списка станций
Название | Ввод | Вывод | Форматирование вывода | Применение |
---|---|---|---|---|
all_stations |
Неограниченное количество параметров парами: название станции и викитекст, выводящий иллюстрацию. В качестве станций задаются физические станции, то есть для перечисленных в таблице multiline_stations целые станции, а в таблице station_complexes — части статьи. Викитекст в чётных параметрах имеет вид:
Параметры должны быть заданы для всех действующих станций. |
Весь список станций. | См. в статье Список станций . |
Для статей о пересадочных узлах
Название | Ввод | Вывод | Форматирование вывода | Применение | Пример | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
complex_lines | Пересадочный узел. | Линии, проходящие через все станции пересадочного узла. | Просто список ссылок на статьи о линиях, как в station_lines. | Карточка пересадочного узла. |
линия Нассо-стрит,
Би-эм-ти
линия Шестой авеню, Ай-эн-ди |
|||||||||
complex_ridership | Пересадочный узел. | Пассажиропоток. | Текст, аналогично station_ridership. | Карточка пересадочного узла. |
▲
8 861 296
(34 из 424) |
|||||||||
complex_boro | Пересадочный узел. | Боро (или список боро для разных станций, если узел находит на границе). | Текст. | Карточка пересадочного узла. | Манхэттен | |||||||||
complex_prose | Пересадочный узел. | Маршруты, останавливающиеся на всех станциях узла, единым списком, а также линии, проходящие через станции пересадочного узла. Если узел на одном из 10 первых мест по пассажиропотоку, то добавляется текст ещё и об этом. | Всё связным текстом, каждая линия и каждый маршрут оформлены как пункт списка. Если несколько маршрутов останавливаются на станциях узла в одни и те же периоды времени, они перечисляются через запятую в одном пункте списка. | Преамбула статьи о пересадочном узле. |
В пересадочный узел входят станции следующих линий:
На станциях пересадочного узла останавливаются маршруты: |
|||||||||
complex_next | Пересадочный узел. Один необязательный параметр описан правее. | Следующие станции для всех станций пересадочного узла. | Отдельная таблица, а в ней списки как в station_next (но части не разделены горизонтальной чертой, а расположены слева и справа). Значение acc во втором параметре тоже поддерживается. | Статья о пересадочном узле, раздел «Соседние станции». |
|
|||||||||
station_next_ns | Как station_next, но третий параметр — n или s. | Как station_next, но только для следующих станций на север или на юг соответственно третьему параметру. | Статья о пересадочном узле, альтернативный вариант раздела «Соседние станции». | |||||||||||
station_bkg | Станция. | Цвет фона для станции, как в all_stations, на основе поля bkg таблицы routes. |
Фрагмент преамбулы и карточка для примера
- (использованы также некоторые функции, перечисленные выше в разделе для станций, но поддерживающие также пересадочные узлы)
«
Деланси-стрит / Эссекс-стрит
»
|
|
---|---|
Нью-Йоркский метрополитен | |
|
|
Боро | Манхэттен |
Округ | Нижний Ист-Сайд |
Выход к улицам | Деланси-стрит , Эссекс-стрит |
Пассажиропоток (2019) |
▲
8 861 296
(34 из 424) |
... В пересадочный узел входят станции следующих линий:
На станциях пересадочного узла останавливаются маршруты:
Условные обозначения |
---|
для
дней и часов работы маршрутов
(более точно указано во всплывающих подсказках при этих обозначениях): |
|
Предыдущая станция |
Линия
Название станции |
Следующая станция |
---|---|---|
Бауэри
( J Z ) Бродвей — Лафайетт-стрит ( M ) |
линия Нассо-стрит,
Би-эм-ти
|
Марси-авеню
( J M Z ) |
Вторая авеню
( F <F> ) |
линия Шестой авеню,
Ай-эн-ди
|
Ист-Бродвей
( F <F> ) |
Для статей о маршрутах и списка маршрутов
Название | Ввод | Вывод | Форматирование вывода | Применение | Пример | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
route_descr | Маршрут. | Полное название. | Текст; название линии в этом тексте оформляется как ссылка на статью о линии. | Карточка маршрута, список маршрутов. | Локальный маршрут линии Шестой авеню | ||||||||||||||||||||||||||||||||||
route_terminals | Маршрут. Для планируемого маршрута надо задать во втором параметре слово future. | Конечные станции. | Список из двух разделённых горизонтальной чертой частей (север и юг); у каждого элемента списка выводятся периоды времени. Периоды не выводятся, если они совпадают с общими для маршрута. Если во втором параметре задать слово small, периоды выводятся уменьшенным шрифтом (это используется только в списке маршрутов). | Карточка маршрута, список маршрутов. |
Форест-Хилс — 71-я авеню
(в будни днём и вечером)
Мидл-Виллидж — Метрополитан-авеню (ночью) Эссекс-стрит (в выходные) Мидл-Виллидж — Метрополитан-авеню (круглосуточно, кроме ночи) Мертл-авеню (ночью) |
||||||||||||||||||||||||||||||||||
route_count_stations | Маршрут. Для планируемого маршрута надо задать во втором параметре слово future. | Количество станций на маршруте. | У каждого элемента списка выводятся периоды времени; периоды не выводятся, если они совпадают с общими для маршрута. | Карточка маршрута. |
8 (ночью)
13 (в выходные) 36 (в будни днём и вечером) |
||||||||||||||||||||||||||||||||||
route_periods | Маршрут. Для планируемого маршрута надо задать во втором параметре слово future. | Когда работает маршрут. | Текст. | Карточка маршрута. | круглосуточно | ||||||||||||||||||||||||||||||||||
route_color | Маршрут. | Код цвета маршрута. | Код без предшествующего #. | Карточка маршрута. | ff6319 | ||||||||||||||||||||||||||||||||||
route_prose | Маршрут. | Фраза, сообщающая про цвет маршрута. | Текст. | Преамбула статьи о маршруте. | На картах, станциях, вагонах и т. д. он обозначается оранжевым цветом, поскольку проходит по линии Шестой авеню . | ||||||||||||||||||||||||||||||||||
route_lines | Маршрут и контекст: list (список маршрутов, этот вариант работает по умолчанию) или lead (преамбула статьи о маршруте). | Список линий, по которым проходит маршрут. | Текст со ссылками на статьи о линиях; в варианте для списка маршрутов перед линией, дающей маршруту цвет, ставится квадратик этого цвета. | Список маршрутов либо преамбула статьи о маршруте. |
линия Куинс-бульвара, Ай-эн-ди
;
линия Шестой авеню, Ай-эн-ди
;
линия Нассо-стрит, Би-эм-ти
;
линия Джамейка, Би-эм-ти
;
линия Мертл-авеню, Би-эм-ти
линиям Куинс-бульвара, Ай-эн-ди , Шестой авеню, Ай-эн-ди , Нассо-стрит, Би-эм-ти , Джамейка, Би-эм-ти , и Мертл-авеню, Би-эм-ти . |
||||||||||||||||||||||||||||||||||
route_regimes | Маршрут либо два маршрута (если второй является разновидностью первого). Для планируемого маршрута надо задать во втором параметре слово future (в этом случае два маршрута не поддерживаются). | Таблица способов обслуживания станций маршрутом по участкам пути и периодам времени. | Строки таблицы соответствуют участкам (от станции до станции), а столбцы периодам времени. Один вызов функции строит таблицу для всего маршрута. | Статья о маршруте. |
|
||||||||||||||||||||||||||||||||||
route_table | Маршрут либо два маршрута (если второй является разновидностью первого). Один необязательный параметр (и альтернативный способ заполнения обязательных) описан правее. | Несколько строк таблицы с информацией по станциям (способ обслуживания маршрутом/ами, название, пересадки). Один вызов функции строит таблицу для всего маршрута (или двух). Во втором параметре поддерживается слово future, в этом случае строится схема для планируемого маршрута (на момент создания модуля ), включая планируемые станции. В третьем параметре поддерживается обозначение периода времени (как в таблице routes_periods), тогда схема строится только для него. | Статья о маршруте. |
|
|||||||||||||||||||||||||||||||||||
route_schedule | Маршрут. | Ссылка на расписание маршрута на сайте MTA . | Текст. | Статья о маршруте. |
Фрагмент списка маршрутов для примера
Локальный маршрут линии Шестой авеню | линия Куинс-бульвара, Ай-эн-ди ; линия Шестой авеню, Ай-эн-ди ; линия Нассо-стрит, Би-эм-ти ; линия Джамейка, Би-эм-ти ; линия Мертл-авеню, Би-эм-ти | локальный |
Форест-Хилс — 71-я авеню
(в будни днём и вечером)
Мидл-Виллидж — Метрополитан-авеню (ночью) Эссекс-стрит (в выходные) Мидл-Виллидж — Метрополитан-авеню (круглосуточно, кроме ночи) Мертл-авеню (ночью) |
Фрагмент преамбулы, карточка, табличка и схема маршрута для примера
Локальный маршрут линии Шестой авеню | |
---|---|
Нью-Йоркский метрополитен |
|
Количество станций |
8 (ночью)
13 (в выходные) 36 (в будни днём и вечером) |
Конечные станции |
Форест-Хилс — 71-я авеню
(в будни днём и вечером)
Мидл-Виллидж — Метрополитан-авеню (ночью) Эссекс-стрит (в выходные) Мидл-Виллидж — Метрополитан-авеню (круглосуточно, кроме ночи) Мертл-авеню (ночью) |
M — маршрут Нью-Йоркского метрополитена , следующий по линиям Куинс-бульвара, Ай-эн-ди , Шестой авеню, Ай-эн-ди , Нассо-стрит, Би-эм-ти , Джамейка, Би-эм-ти , и Мертл-авеню, Би-эм-ти .
От станции
включительно |
До станции
включительно |
День + вечер | Выходные | Ночь |
---|---|---|---|---|
Форест-Хилс — 71-я авеню | Бродвей — Лафайетт-стрит | локальные пути | — | — |
Эссекс-стрит | Флашинг-авеню | локальные пути | локальные пути | — |
Мертл-авеню | локальные пути | локальные пути | экспресс-пути | |
Сентрал-авеню | Мидл-Виллидж — Метрополитан-авеню | локальные пути | локальные пути | локальные пути |
Условные обозначения |
---|
для
дней и часов работы маршрутов
(более точно указано во всплывающих подсказках при этих обозначениях): |
|
Для статей о линиях и списка линий
Название | Ввод | Вывод | Форматирование вывода | Применение | Пример | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
line_prose | Линия. | Маршруты, использующие линию, и их время работы на этой линии. Если линия считается «стволовой» и даёт цвет маршрутам, то добавляется текст ещё и об этом. | Текст. | Преамбула статьи о линии. | маршрутами: J (круглосуточно), M (круглосуточно, кроме ночи) и Z (в часы пик в пиковом направлении). Линия считается « стволовой »: маршруты J и Z , проходящие по ней, обозначаются коричневым цветом. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
line_bullets | Линия. | Маршруты, использующие линию. | Крупные буллеты. Если во втором параметре передать ненулевое значение, будут буллеты обычного размера. | Карточка линии; список линий. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
line_count_stations | Линия. | Количество станций на линии. | Просто число. | Карточка линии. | 6 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
line_nowrap | Линия. | Название линии с предотвращением переноса по дефисам в части после запятой. | Карточка линии. | Линия Нассо-стрит, Би-эм-ти | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
line_color | Линия. | Код цвета, который получают от линии маршруты, проходящие по ней. Если его нет (линия не «стволовая»), то чёрный. | Код без предшествующего #. | Карточка линии. | 996633 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
line_opened | Линия. | Год открытия самой старой станции. Если во втором параметре передать непустое значение, то для линий, которые были построены раньше, чем перешли в состав метрополитена, будут выданы оба года и поясняющий текст. | Текст. | Карточка линии. | 1908 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
line_aboveground | Линия. | Есть ли наземные участки (ответ для карточки). | Текст: «есть», «нет» или «вся линия». | Карточка линии. | нет | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
segment_table | Сегмент линии. Три необязательных параметра описаны ниже | .Несколько строк таблицы с информацией по станциям (название, пути у платформ, маршруты с временами, пересадки). Один вызов функции строит таблицу для одного сегмента. Для построения таблицы по всей линии надо комбинировать эту функцию с функцией connection_use и прочим текстом и разметкой. | Статья о линии. |
Станции на линии
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
connection_use | Два сегмента линий. Если не задано два валидных сегмента, статья заносится в Категория:Статьи с ошибочными параметрами при обращении к модулю NYCS DB . Один необязательный параметр описан правее. | Маршруты, использующие соединение между двумя сегментами. Если маршрутов не найдено, то возвращается текст, заданный через третий параметр, а в его отсутствие — «соединение не используется». Пустая строка в третьем параметре рассматривается как заданный в параметре пустой текст, в отличие от по-настоящему незаданного параметра. | Буллеты и значки как в route_table. | Статья о линии. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
connection_use_2 | Четыре сегмента линий. Если не задано четыре валидных сегмента, статья заносится в Категория:Статьи с ошибочными параметрами при обращении к модулю NYCS DB . Два необязательных параметра описаны правее. | Список маршрутов для первой пары сегментов в скобках, затем слова «и обратно» и список для второй пары в скобках. Если маршрутов для какой-либо пары не найдено, то в соответствующих скобках возвращается текст, заданный через пятый параметр, а в его отсутствие — «соединение не используется». Если не найдено для обеих пар, то скобки возвращаются одни, а в них текст, заданный через шестой параметр, а в его отсутствие — «оба соединения не используются»; слова «и обратно» в этом случае возвращаются до скобок. | Буллеты и значки как в route_table. | Статья о линии. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
segment_regimes | Сегмент линии. Два необязательных параметра описаны правее. | Маршруты, работающие на этом сегменте как экспрессы и локальные, в зависимости от периода времени. | Таблица. В левой верхней клетке можно вывести текст, сообщающий о том, о каком участке линии идёт речь, и передаваемый через второй параметр. Если во втором параметре передать слово auto, в левой верхней клетке будут выведены названия первой и последней станций сегмента, разделённые при помощи тире и перевода строки (если на участке всего одна станция, то просто её название). Если в третьем параметре передать непустое значение, вместо «экспресс-пути» будет написано «экспресс-путь». | Статья о линии. |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
connection_use_color | Два сегмента линий. | Код цвета, соответствующего маршрутам, использующим соединение между двумя сегментами. Если маршрутов нет или их цвета различны, то чёрный. | Код без предшествующего #. | Статья о линии. | 996633 |
Дополнительные параметры функции segment_table
В функции segment_table второй параметр может принимать значения:
Значение параметра | Смысл | Для каких станций |
---|---|---|
Для более компактного показа информации о пересадках: | ||
2 | Добавить столбец с маршрутами для второй части каждой станции (для станций, обслуживающих по две линии) и показать в столбце с пересадками только данные по другим станциям пересадочного узла. | Для пар линий 63-й улицы и Арчер-авеню, где по две линии идут параллельно через одни и те же станции. |
1 | Все маршруты из обеих частей станции показать вместе, соединив столбцы с маршрутами и с пересадками. | Для станции Декалб-авеню , где распределение путей между линиями сделано в какой-то мере условно. |
0 | В столбце с пересадками вместо информации о пересадках поместить текст: «Все станции в этой рамке связаны пересадкой». Это будет сделано для всех станций сегмента, поэтому сегмент должен состоять из одной станции. |
Для двух случаев на линиях Восьмой авеню и Бродвея, где две станции находятся на разных ветках одной линии и связаны пересадкой (те, которые перечислены в таблице twins). В этих случаях две таблицы строятся параллельно слева и справа и в каждой из них есть строка, соответствующая части одного и того же пересадочного узла. Два значения параметра соответствуют строкам левой и правой таблиц.
Для этих же случаев имеются третий и четвёртый параметры, обеспечивающие визуальное объединение этих двух строк. В третий параметр можно передать значение left или right, чтобы вокруг строки таблицы нарисовать жирную рамочку с трёх сторон: сверху, снизу и слева/справа. Если третий параметр задан, то в четвёртый параметр можно передать высоту строки таблицы, измеренную в строках текста. |
название станции из таблицы twins | В столбце с пересадками убрать данные по указанной станции. | |
Для обозначения того факта, что это схема строящейся или исторической линии: | ||
future | Проектируемый/строящийся сегмент, информацию о станциях надо брать из таблицы stations_future. | |
former | Закрытый/исторический сегмент, информацию о станциях надо брать из таблицы stations_former. | |
reincarn | Сегмент из обычной таблицы stations, но в составе закрытой/исторической линии, поэтому строится с некоторыми особенностями. | |
reincarn back | То же, но станции перечисляются в обратном порядке. |
Фрагмент преамбулы, карточка, табличка и схема линии для примера
Линия Нассо-стрит, Би-эм-ти | |
---|---|
BMT Nassau Street Line
Нью-Йоркский метрополитен |
|
Открытие первого участка | 1908 год |
Количество станций | 6 |
Наземные участки | нет |
Линия Нассо-стрит, Би-эм-ти — линия Нью-Йоркского метрополитена , расположенная на Манхэттене и обслуживаемая маршрутами: J (круглосуточно), M (круглосуточно, кроме ночи) и Z (в часы пик в пиковом направлении). Линия считается « стволовой »: маршруты J и Z , проходящие по ней, обозначаются коричневым цветом.
Часы пик | Остальное время | |
---|---|---|
Локальные пути | ||
— в пиковом направлении ; — в обратном пиковому |
Станции на линии
Условные обозначения |
---|
для
дней и часов работы маршрутов
(более точно указано во всплывающих подсказках при этих обозначениях): |
|
Станция |
Тип
(по данным MTA ) |
Пути у
платформ |
Дата
открытия |
Маршруты | Пересадки | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Линия является продолжением линии Джамейка |
|
|||||||||||||||||
Бруклин
Вильямсбургский мост Манхэттен |
||||||||||||||||||
Эссекс-стрит | подземная | все | 16 сентября 1908 |
|
||||||||||||||
Ответвление к линии Шестой авеню |
|
|||||||||||||||||
Бауэри | подземная | все | 4 августа 1913 | |||||||||||||||
Канал-стрит | подземная | все | 4 августа 1913 |
|
||||||||||||||
Присоединялись пути от Манхэттенского моста |
|
|||||||||||||||||
Чеймберс-стрит | подземная | все | 4 августа 1913 |
|
||||||||||||||
Фултон-стрит | подземная | все | 30 мая 1931 |
|
||||||||||||||
Брод-стрит | подземная | все | 30 мая 1931 | |||||||||||||||
Линия сливается с
линией Бродвея
и продолжается как линия Четвёртой авеню |
|
|||||||||||||||||
Манхэттен
Тоннель Монтегью-стрит Бруклин |
Для схемы всего метрополитена
Название | Ввод | Вывод | Форматирование вывода | Пример |
---|---|---|---|---|
segment_color | Сегмент линии либо два сегмента. Если задан второй сегмент, то третий параметр — обозначения segor, segand, segandnot, как в шаблоне {{ NYCS seg use }} . | Код цвета, соответствующего маршрутам, проходящим по сегменту. Если маршрутов нет или их цвета различны, то чёрный. Если задан второй сегмент, то он учитывается так, как указано в третьем параметре. | Код без предшествующего #. | 000000 |
seg2color | Сегмент линии либо два сегмента. | Код цвета, соответствующего линии, на которой расположен сегмент. Если линия не стволовая, то чёрный. Если задан второй сегмент, то цвет (не чёрный) возвращается только при условии, что он одинаковый для обоих сегментов. | Код без предшествующего #. | 996633 |
segment_dir | Сегмент линии либо два сегмента. Если задан второй сегмент, то третий параметр — обозначения segor, segand, segandnot, как в шаблоне {{ NYCS seg use }} . В четвёртом параметре можно передать обозначение периода времени согласно модулю. | Способы использования сегмента (есть экспресс-поезда; есть экспресс-поезда только в пиковом направлении; есть движение по схеме «скип-стоп»; ничего из перечисленного нет). | Имя цвета. | grey |
seg_route | Сегмент, маршрут. | Непустое значение, если маршрут проходит по сегменту, и пустое в противном случае. | Текст. | x |
segment_route_coef | Маршрут, сегмент линии либо два сегмента. Если задан второй сегмент, то четвёртый параметр — обозначения segor, segand, segandnot, как в шаблоне {{ NYCS seg use }} . | Коэффициент зелёного и синего для функции rgb, обозначающей использование сегмента маршрутом по временам суток: наиболее яркий красный обозначает круглосуточное использование, наиболее бледный розовый только по ночам, серый отсутствие маршрута на сегменте. | Число от 0 до 255. | 0 |
seg_line | Сегмент, линия. | Непустое значение, если линия проходит по сегменту, и пустое в противном случае. | Текст. | x |
Некоторые примеры — здесь .
Для других статей и общего назначения
Название | Ввод | Вывод | Форматирование вывода | Пример для станции | Пример для пересадочного узла |
---|---|---|---|---|---|
station_bullets | Станция или пересадочный узел. | Останавливающиеся на станции маршруты. | Буллеты со ссылками на статьи о маршрутах. | ||
station_letters | Станция или пересадочный узел. | Останавливающиеся на станции маршруты. | Всё текстом без ссылок, и для каждого маршрута выводится только его буква или цифра. | J, M, Z | F, <F>, J, M, Z |
station_letters_L | Станция или пересадочный узел. Один необязательный параметр описан правее. | Название станции без уточнения, но с останавливающимися на ней маршрутами. | Всё текстом со ссылкой на статью о станции, и для каждого маршрута выводится только его буква или цифра. Если во второй параметр передать true, выводится текст без ссылки. | Эссекс-стрит (J, M, Z) | Деланси-стрит / Эссекс-стрит (F, <F>, J, M, Z) |
station_netto_L | Станция или пересадочный узел. | Название станции без уточнения. | Текст со ссылкой на статью о станции. | Эссекс-стрит | Деланси-стрит / Эссекс-стрит |
station_descr | Станция или пересадочный узел. | Описание станции для дизамбига. | « Эссекс-стрит » — станция Нью-Йоркского метрополитена на Манхэттене, обслуживаемая маршрутами J, M, Z. | « Деланси-стрит / Эссекс-стрит » — пересадочный узел Нью-Йоркского метрополитена на Манхэттене, обслуживаемый маршрутами F, <F>, J, M, Z. | |
SM | Станция и прочие параметры для шаблона {{ SM smart }} . Прочие параметры (dir, side, X, Y) должны передаваться во втором параметре единым стрингом, в котором перед именем параметра ставится {{ ! }} , а перед значением {{ = }} , которые при подстановке превратятся в | и = соответственно. Третий параметр может принимать значения former или reincarn, как в функции segment_table. В четвёртом параметре можно передать любое непустое значение, чтобы был использован графический файл не с белым, а с серым фоном. Пятый параметр предназначен для параметра label, передаваемого в шаблон {{ SM smart }} . | Функция вызывает шаблон {{ SM smart }} , который строит кружок, обозначающий станцию на схеме метро, — например, на схеме демонтированных линий. |
на пробу
|
||
const | Различные константы. Единственным параметром служит имя константы, значение которой нужно получить (подробнее см. комментарии в модуле в тексте локальной функции const). | 2019 | |||
legend | Список условных обозначений для периодов времени. |
|
Фрагмент карточки и текста для статьи об улице
улица Такая-то | |
---|---|
англ. Some Street | |
Общая информация | |
Страна | США |
Город | Нью-Йорк |
Метро |
Эссекс-стрит
(
)
Деланси-стрит ( ) или Деланси-стрит / Эссекс-стрит ( ) |
Боро | Манхэттен |
- Эссекс-стрит (J, M, Z) — на углу таком;
- Деланси-стрит (F, <F>) — на углу сяком.
Пример строчек для дизамбига
- (на самом деле в дизамбигах будет дана ссылка на каждую статью один раз, а не три, как здесь)
- « Эссекс-стрит » — станция Нью-Йоркского метрополитена на Манхэттене, обслуживаемая маршрутами J, M, Z.
- « Деланси-стрит » — станция Нью-Йоркского метрополитена на Манхэттене, обслуживаемая маршрутами F, <F>.
- « Деланси-стрит / Эссекс-стрит » — пересадочный узел Нью-Йоркского метрополитена на Манхэттене, обслуживаемый маршрутами F, <F>, J, M, Z.
Примечания к функциям
- ↑ В качестве станций, а также сегментов линий следует передавать названия согласно списку в таблице stations (см. ниже), в качестве пересадочных узлов — согласно списку в таблице station_complexes, в качестве маршрутов — согласно списку в таблице routes.
- ↑
- ↑ В качестве примера взята станция Фар-Рокавей — Мотт-авеню (линия Рокавей, Ай-эн-ди) .
- В качестве примера взята станция Корт-стрит (линия Фултон-стрит, Ай-эн-ди) .
- ↑ В тех форматах, где не выводятся времена, из списка маршрутов исключаются те, которые останавливаются на станции только ночью, только иногда в часы пик, только в выходные летом и т. п. Это примечание не касается, однако, форматов, строящих куски связного текста, а также формата bullets all.
- Станция имела перпендикулярные платформы для эстакадной линии Фултон-стрит и для линии Брайтон (ныне эта её часть относится к линии Франклин-авеню ).
- Станция была перемещена севернее в 1928 году.
Таблицы
Для нужд этого модуля вся схема Нью-Йоркского метрополитена разделена на сегменты , каждый из которых на всём своём протяжении обслуживается одинаковыми маршрутами. В некоторых случаях может оказаться, что между соседними сегментами нет разницы с точки зрения маршрутов, а разделены они по другим причинам, например из-за необходимости нарисовать что-нибудь между ними на схеме линии. Сегменты всегда разделены в тех местах, где одна линия переходит в другую.
Две главных таблицы
stations
Большая таблица, около 500 записей. Все станции по сегментам, в пределах каждого сегмента с севера на юг (согласно принятому в Нью-Йорке railroad north и railroad south для всех участков метрополитена ). Поля:
Имя поля | Смысл | Пояснения |
---|---|---|
segment | Название сегмента, на котором находится станция. | |
station | Название станции (ключ таблицы). | Названием в большинстве случаев служит название статьи, кроме , перечисленных в таблицах multiline_stations и station_complexes, когда названием служит название перенаправления. |
info | Примечание к названию станции. | Показывается в виде сноски. Сообщает как правило о том, что станция в прошлом имела пересадку на другую станцию, ныне снесённую. |
type | Тип станции, отвечающий на вопрос, все ли поезда останавливаются на станции. |
Возможные типы:
|
subtype | Подтип, конкретизация к предыдущему полю. |
Для станций типа x задаётся подтип, используемый только для вычисления маршрутов, идущих по экспресс-путям. Возможные подтипы:
Для станций типа o есть другие значения подтипа:
Ещё один подтип, используемый независимо от типа:
|
other_type | Только для станций, обслуживающих несколько линий, если на текущей линии в пределах станции нет путей без остановки, а на другой линии есть. | В этом поле ставится o (как в поле type в записи, соответствующей другой части этой станции), и это приводит к правильному показу «лок.» на схеме линии в графе «Пути у платформ»; использовано только у двух станций. |
note | Примечание. | У станции Акуидакт-Рейстрак стрелка вверх, обозначающая платформу только в северном направлении. |
north_back | Логическое поле , обозначающее, что в списке соседних станций надо для данной станции северную соседнюю показывать как южную, а южную как северную. Применяется тогда, когда railroad north и railroad south для данной станции противоположны им же для расположенных параллельно других частей физической станции или других станций внутри пересадочного узла, для которых список соседних станций показывается вместе. | |
acc | Доступность для инвалидов. |
или
. Варианты:
Чтобы поддерживать это поле в актуальном состоянии, можно следить за статьёй английской Википедии (по методу «наблюдение за наблюдающим»): англоязычные коллеги следят за источниками по теме и регулярно обновляют эту статью. |
sep | Отсутствие бесплатного перехода между направлениями. |
, вот сам сайт и
, ссылка подписана «2010 Route Map in the style of the 1959 Schematic». Единственный вариант:
|
eng | Английское название станции. | |
old | Старое название станции, используемое при указанном параметре reincarn (существующая станция как часть исторической линии). Знак минус в этом параметре обозначает, что при построении схемы исторической линии эту станцию надо пропустить. | |
oldlink | Ссылка на статью, используемая при указанном параметре reincarn (существующая станция как часть исторической линии). Эта ссылка содержит в качестве уточнения название исторической линии и является перенаправлением на статью о существующей станции, где сказано о её конфигурации в прошлом. | |
oldtype | Тип станции, используемый при указанном параметре reincarn (существующая станция как часть исторической линии). Фактически нужно только для случаев, когда на исторической схеме надо показать станцию как локальную (oldtype='o'), а на современной не надо. | |
oldeng | Старое английское название станции (пока не используется, потому что в схемах линий английские названия не участвуют). | |
opened | Дата открытия. Внимание: последние 4 цифры обязаны быть номером года. Если дата неизвестна, поле остаётся пустым (пустой стринг, между кавычками ничего). | |
orig | Дата первоначального открытия. | Если станция была открыта в составе железной дороги, а позже включена в состав метрополитена, то в поле opened ставится дата включения в состав метрополитена, а в поле orig — дата первоначального открытия. |
above | Если на схеме линии надо изобразить перед станцией мост или тоннель, то здесь указывается его имя. Здесь же, вокруг имени моста/тоннеля или вместо него, указывается граница боро, например: Манхэттен<hr>Такой-то тоннель<hr>Бруклин | Если для этого моста/тоннеля существует статья, то имя ставится как ссылка на неё; если нет статьи, а есть только перенаправление на статью о линии метро, то без ссылки. Манхэттенский мост и некоторые другие мосты и тоннели указывать не надо, они указываются вручную прямо на схеме. |
below | То же, но не перед станцией, а после неё. | Если станции до и после моста/тоннеля относятся к разным линиям, то мост/тоннель надо указывать для обеих станций, а если к одной и той же, то только для одной из них. |
below_key | Если на схеме линии после станции надо изобразить строчку или несколько из таблицы stations_former, то здесь указывается имя сегмента из той таблицы. | |
below_key_reincarn | Аналогично предыдущему, но игнорируется в режиме reincarn. | |
below_stub | Если на схеме линии после станции надо изобразить подключение бывшей линии, то здесь указывается его конфигурация. | Значение параметра состоит из двух символов: плюс или минус обозначает подключение или ответвление, а затем w или e обозначает запад или восток. |
below_stub_text | Текст к предыдущему параметру. | |
above_stub | То же, но до станции. | |
above_stub_text | Текст к предыдущему параметру. | |
r_key | Ключ для извлечения пассажиропотока из таблицы ridership. | |
r_ast | Логическое поле , обозначающее, что цифра пассажиропотока дана для всего пересадочного узла. | |
c_key | Ключ для извлечения географических данных из таблицы csv. | |
conn | Ссылка на русскую статью (и, если надо, на английскую) для пересадки на другой вид транспорта. | |
br | Для длинных названий станций — название, разбитое на две строчки тегом <br>. | Используется только в схеме линии. В схеме маршрута использовать нельзя, потому что там важна высота текста в клетке в строках. |
Если через станцию проходят несколько линий (см. ниже таблицу multiline_stations), то здесь каждая из частей станции имеет свою запись. При этом поля начиная с acc в каждой из записей заполняются одинаково, дублируя информацию.
routes_periods
Большая таблица, около 1000 записей. Собственно расписание движения поездов. Поля:
Имя поля | Смысл | Пояснения |
---|---|---|
route | Маршрут. | Как в таблице routes. |
period | Период времени. |
Варианты:
Кроме того, в некоторых записях обозначен период времени:
Это нужно для построения схемы маршрута — схема составляется на основе тех сегментов, которые маршрут проходит в часы пик (поскольку в часы пик он проходит почти все свои сегменты), и если какой-то из своих сегментов маршрут не проходит в часы пик, то этот сегмент добавляется в таблицу с пометкой also. Аналогично, если схема маршрута строится для двух маршрутов-вариантов параллельно (на момент составления модуля такими случаями являются: и , и , и , и , и ; можно так же изобразить и , но это уже будет орисс), то надо иметь в виду, что сегменты для неё берутся от первого маршрута, поэтому если у второго есть сегменты, отсутствующие в часах пик у первого, то их тоже надо добавить к первому с периодом also. Последовательность записей с also должна укладываться в общую последовательность обхода сегментов маршрутом, задаваемую записями с rh, а записи с rh и also вместе должны предшествовать остальным записям для того же маршрута и для его варианта. (Если маршрут в часы пик не проходит какой-то свой сегмент, зато проходит другой сегмент, на котором находятся те же станции, как это происходит с маршрутом на станции Декалб-авеню , то применяется другой подход, без записи с also, и он описан ниже.) |
segment | Сегмент. | Сегменты в пределах каждого сочетания маршрута и периода времени перечислены с севера на юг, аналогично станциям в таблице stations; исключения из этого порядка обрабатываются таблицей nodes и полями fork и joint. |
Три поля выше этого места — ключ. | ||
how | Ответ на вопрос, как этот маршрут в это время обслуживает этот сегмент. |
Варианты:
|
dir | Ограничение движения поездов по направлению движения (пиковое или противоположное ему) или по части периода времени. |
Варианты:
Кроме того, есть вариант, обозначаемый цифрой 1, смысл которого — ограничение периода времени:
Аналогично, есть вариант, обозначаемый цифрой 2:
|
fork | Пометка сегментов, расположение которых в таблице отличается от порядка обхода поездом. | Значение south соответствует началу (северному сегменту) ответвления на юг (например, маршрут ), а north наоборот (например, маршрут ); значение uturn у последнего сегмента по списку обозначает, что он не последний по маршруту (маршрут ). |
alt | Отношение записи к временным изменениям в маршрутах. |
Варианты:
Для включения механизма показа временных изменений надо занести в таблицу alts запись с соответствующим номером. |
future | Логическое поле , обозначающее, что маршрут проектируется. | |
tt | Логическое поле , обозначающее, что экспресс-пути в данном случае используются для оборота. | |
shuttle | Логическое поле , обозначающее, что маршрут в этот период времени является челноком (расставляется во всех записях, относящихся к данному сочетанию маршрута и периода времени). | |
Все поля ниже этого места — только для построения схем маршрутов . | ||
joint | Точка пристыковки перевёрнутого сегмента к обычному. | Для маршрута, у которого на трассе имеется точка разворота и поэтому часть сегментов надо изобразить задом наперёд (на момент создания модуля только маршрут ). Оно ставится со значением true в записи с периодом времени rh у последнего обычного сегмента перед первым сегментом, который надо перевернуть. Сегменты после точки разворота у такого маршрута перечисляются в обратном порядке: от второй конечной станции к точке разворота, навстречу той части маршрута, которая до точки разворота. При этом поддерживаются маршруты с разворотом с двумя северными концами, но не с двумя южными. Если появится маршрут с двумя южными, программу придётся дописывать. Тем более не поддерживаются маршруты с двумя разворотами (а они возможны, например если тот же M будет перенаправлен на Бродвей-Джанкшен и затем на Канарси). |
pattern | В записях с периодом времени rh либо also схематическое изображение символов, которые должны быть нарисованы в схеме маршрута слева от названия станции у всех станций данного сегмента и всех последующих, пока не попадётся сегмент, у которого задан другой pattern. | |
shape | Аналогично, но которые должны быть нарисованы в отдельной строке после данного сегмента (и заодно признак, что нужно нарисовать такую отдельную строку). | |
novert_n | Логическое поле , сообщающее о том, что если строка таблицы увеличена в высоту из-за нескольких строк пересадок в её правом столбце, то в символах, расположенных слева от названия станции, не нужно рисовать соединяющую кружки вертикальную линию сверху от первой станции сегмента (если сегмент первый в маршруте, то заполнять поле не нужно, отмена вертикальной линии работает автоматически). | |
novert_s | То же снизу от последней станции сегмента (и если сегмент последний в маршруте, то заполнять не нужно). | |
Следующая группа полей тоже предназначена для построения схем маршрутов, но используется только для маршрута на станции Декалб-авеню , где распределение путей между линиями сделано в какой-то мере условно. Маршрут проходит эту станцию ночью по путям, отнесённым к одной линии, а в остальное время — по путям, отнесённым к другой (как экспресс). Первым путям соответствует сегмент Brigh DK, а вторым сегмент Fourth DK, оба сегмента включают только эту станцию. Соответственно, сегмент Brigh DK для маршрута присутствует в таблице с периодом времени ln, а сегмент Fourth DK — со всеми остальными. Если бы для этой станции была задана запись с периодом времени also, то станция была бы показана на схеме маршрута дважды. | ||
fullsta | Логическое поле в записи с периодом rh, сообщающее о том, что в схеме маршрута для станций этого сегмента (то есть для станции Декалб-авеню ) надо рассматривать проход поездов по всем путям, а не только по путям определённой линии (аналогично параметру 1 в функции segment_table). | |
segment_subst | В записи, сегмент которой отсутствует среди записей с периодом rh, альтернативный сегмент, присутствующий там. |
Внимание: данные в этой таблице должны отражать прохождение маршрутов по тем или иным путям, а не просто факт остановки на станции. Запись должна присутствовать в таблице, даже если поезд проходит сегмент экспрессом, а на сегменте нет ни одной экспресс-остановки.
Дополнительная информация о станциях
stations_future
Аналогично таблице stations, но только проектируемые/строящиеся станции. В поле opened ограничение про номер года не действует. Дополнительные поля:
- struc — тип станции, который для действующих станций вычисляется на основании таблицы csv; задаётся текстом, и если поле отсутствует, то по умолчанию имеется в виду «подземная»;
- boro — боро.
stations_former
Аналогично таблицам stations и stations_future, но только закрытые/исторические станции. Большая таблица, более 200 записей. Дополнительные поля:
- struc и boro — как в предыдущей таблице; поле struc по умолчанию имеется в виду «эстакадная»;
- saved — логическое поле , обозначающее, что станция закрыта, но не снесена;
- closed — дата закрытия;
- station2 — как station, поле для второго названия станции на случай, если платформы разных направлений представляли собой две отдельных станции;
- en — название английской статьи на случай, если русская отсутствует (а она как правило отсутствует);
- transfer — комментарий про бывшие пересадки на другие станции. Поле может быть указано и в таблице stations — у станций, вставляемых при помощи параметра reincarn в схемы исторических линий. В отличие от поля info, используется не в сноске, а в графе «Примечания» и заполняется без точки в конце и с маленькой буквы;
- spur — обозначение бывшей конечной, находившейся на ответвлении (значение поля состоит из двух букв: s или n обозначает южную или северную, а затем w или e обозначает, что станция располагалась к западу или к востоку от основной линии);
- spur_noreincarn — аналогично предыдущему, но игнорируется в режиме reincarn.
Если станция обслуживала и существующую линию, и закрытую, то она сюда не заносится, потому что эта таблица используется только посегментно для построения схемы линии, а станция, которая до сих пор существует, на такой схеме берётся из таблицы stations.
twins
Те станции, которые описаны в статьях по две в одном разделе статьи. Поля:
- ключ таблицы — название станции, как она бы называлась, если бы она была одна, а не две;
- eng — то же, на английском языке;
- comment1 и comment2 — краткое название на русском, позволяющее отличить одну станцию от другой;
- station1 и station2 — название станции, как она действительно названа в модуле.
multiline_stations
Те станции, через которые проходят две линии и больше. Поля:
- full — название статьи про станцию;
- part — название перенаправления на статью, которое соответствует путям определённой линии на станции и используется в таблице stations в качестве «квазистанции»;
- text — начало текстового описания распределения маршрутов по путям для данной части станции (программа берёт эти описания в том же порядке, в котором они перечислены в таблице, поэтому для первой части каждой станции этот текст начинается с большой буквы, а для остальных укорочен, чтобы не повторять те же слова в статье);
- after — пояснение после этого описания, которое программа заключает в скобки;
- level — текст, который добавляется к описанию части станции, и он же признак, что для данной части станции надо построить также описание распределения маршрутов по локальным и экспресс-путям;
- detailed — логическое поле , обозначающее, что перечисление маршрутов для частей станции должно быть с указанием времён для каждого (по умолчанию оно делается без времён);
- no_lcl и no_exp — логические поля , отменяющие перечисление локальных и экспресс-маршрутов соответственно для данной части станции;
- cross — логическое поле , обозначающее, что на станции имеется кросс-платформенная пересадка (но за таковую засчитываются только пересадки между маршрутами разных линий).
station_complexes
Пересадочные узлы. Поля:
- article — название статьи про пересадочный узел; если статьи про узел нет, то в этом поле ставится условное значение (одинаковое для обеих записей), имеющее длину 1 (цифра либо латинская буква);
- station — название перенаправления на статью, которое соответствует станции;
- section — название раздела, на который ведёт это перенаправление; пустая строка обозначает (кроме станций с заполненным полем future, см. ниже), что станция связана с остальным пересадочным узлом виртуальной пересадкой (с выходом из метро и повторным входом, но без повторной оплаты) и имеет отдельную статью;
- periods — для пересадок, действующих только в некоторые периоды времени, обозначение периодов, совпадающее с одним из значений ключа в таблице icons; наличие этого поля рассматривается как признак, что пересадка не виртуальная (между Таймс-сквер и Брайант-парком пересадка не виртуальная и работает только в часы работы челнока, все виртуальные пересадки работают круглосуточно);
- alt — аналогично одноимённому полю в таблице routes_periods;
- future — логическое поле , обозначающее, что либо это проектируемая/строящаяся станция, либо это пересадочный узел, в котором все станции кроме этой проектируемые/строящиеся.
Дополнительная информация о путях
nodes
Необходимая информация по точкам соединения сегментов, где переход поезда с сегмента на сегмент отличается от порядка перечисления сегментов в расписании. Поля:
- segment — название сегмента, подходящего к точке с одной из сторон;
- node_n — название точки, если она является северной для сегмента;
- node_s — то же, если она является южной;
- nodetype — тип точки.
Каждая запись содержит информацию об одном сегменте, примыкающем к точке. Для точки требуется две или три записи по сегментам. Поля, соответствующие точке, содержат одинаковую информацию во всех записях, относящихся к ней. Поддерживаются два типа точек:
- fork — развилка (в одной точке сходятся три сегмента, один с севера и два с юга либо наоборот, поезд проходит без изменения направления);
- uturn — разворот (два сегмента, но оба примыкают к точке с севера или оба с юга, поезд проходит либо с изменением направления через эти два сегмента, либо обычным образом в порядке перечисления сегментов).
Информация о точке заносится в таблицу только в том случае, если развилка либо разворот используется каким-либо маршрутом (один и тот же маршрут в одно и то же время суток проходит по обеим веткам развилки, либо существует маршрут, проходящий через точку по сегментам, образующим разворот).
Эта таблица частично дублирует информацию из таблицы routes_periods, потому что так было удобнее для алгоритма.
unused_connections
Перегоны, которые по сегодняшнему расписанию не используются маршрутами, однако должны быть учтены при показе соседних станций. Для каждого перегона даются две станции, между которыми он проходит. Поля:
- station — станция;
- north — логическое поле, является ли станция северной для перегона (возможны две южных или две северных, если проезд по перегону является разворотом);
- connection — условное обозначение перегона (чтобы было ясно, какие станции относятся к одному перегону).
unused_tracks
Аналогично предыдущему — участки путей, которые не используются маршрутами. Для каждого участка даются две или более станций. Поля:
- station — станция;
- segment — условное обозначение участка (не связано с сегментами, используемыми в остальных таблицах);
- closed — текст комментария к станции, если она сегодня не существует, например «закрыта» или «снесена»;
- index — номер станции по участку, считая с севера на юг (станции будут связаны перегоном, если они расположены на одном участке и имеют соседние номера).
Эта таблица и предыдущая имеют частично совпадающую функциональность, однако в эту таблицу занесены пути, ведущие к закрытым станциям, а в предыдущую — пары существующих станций, пути между которыми не используются.
В эти две таблицы можно добавить неиспользуемые экспресс-пути, проходящие параллельно локальным путям. Они не добавлены сюда умышленно, потому что не найден источник, который бы гарантировал полноту списка (с учётом всех мест, где поезд может перейти с экспресс-путей на локальные или наоборот). Внимание: несмотря на то что в таблице stations отмечены все экспресс-станции и видно, на каких станциях остановится поезд, идущий по экспресс-пути, — эти вычисления производятся только для существующих маршрутов. Чтобы соседние станции вычислялись и для неиспользуемых экспресс-путей, необходимо все такие пути заносить в эти две таблицы.
Таблицы, копируемые с сайта mta.info
ridership
Большая таблица, около 400 записей. Содержит ключ (сокращённое название станции на английском языке и обозначения останавливающихся на ней маршрутов) и данные по годовому пассажиропотоку для каждой станции или пересадочного узла. Ключ должен совпадать с полем r_key в таблице stations. Поля:
Имя поля | Смысл |
---|---|
r | Пассажиропоток. |
prev | Пассажиропоток за предыдущий год. |
rank | Номер станции по пассажиропотоку. |
comment | Сноска. |
Эти данные вынесены в отдельную таблицу, чтобы при обновлении источника менять только её. Ниже дана инструкция по переносу данных из источника в таблицу.
Если источник представляет собой | Если источник представляет собой |
---|---|
|
|
И далее:
- В предположении, что название станции с маршрутами (ключ) оказалось в столбце A, пассажиропоток за нужный год в столбце G, пассажиропоток за предыдущий год в столбце F, номер станции по пассажиропотоку в столбце J, а столбец K пуст, занести в столбец L такую формулу:
="['" & A2 & "']={r=" & G2 & ",prev=" & F2 & ",rank=" & J2 & "},"
-
- (пример приведён для второй строки) и размножить её на всю высоту.
- Удалить строки, в которых нет станций.
- Скопировать столбцы K и L в модуль на место строк таблицы ridership .
- Если где-то возникают ошибки компиляции из-за станций, по которым нет данных, дополнить данные нулями.
-
Убедиться в предпросмотре, что в статье
Список станций Нью-Йоркского метрополитена
пассажиропоток показывается корректно во всех строках (и нигде нет слова ERROR).
- У тех станций, где есть проблема, проверить, не изменился ли ключ. Изменения могут касаться как названия станции и проходящих через неё маршрутов, так и пропавшего пробела или затесавшегося невидимого символа.
- Если ключ изменился оправданно (в связи с изменением названия станции или маршрутов), оставить здесь новое значение и привести в соответствие поле r_key в таблице stations (помня, что один ключ может использоваться для нескольких станций, поскольку этот источник приводит данные не по станциям, а по пересадочным узлам, а кроме того таблица stations разбивает на несколько строк станции, обслуживающие несколько линий).
- Расхождения в пробелах и невидимых символах подогнать под то, что сделано в таблице stations.
- Не забыть обновить в функции const все значения, связанные с пассажиропотоком.
-
Если с момента предыдущего обновления изменилось вхождение станций в пересадочные узлы:
- Добавить вручную поле comment к тем станциям, которых коснулось это изменение (например:
comment='Без учёта станции «Кортландт-стрит», которая не входила в пересадочный узел.'
-
-
-
- у тех, где это уже не актуально, оно удалится само в момент нажатия на Ctrl+V, см. выше).
- Убедиться, что в таблице stations проставлено поле r_ast у тех станций, пассажиропоток для которых дан по пересадочным узлам (и не проставлено у остальных; фактически проверить надо только те станции, у которых вхождение в пересадочные узлы изменилось).
-
-
csv
Большая таблица, более 400 записей. Содержит ключ (номер станции) и некоторые географические данные для станции. Ключ должен совпадать с полем c_key в таблице stations. Поля:
Имя поля | Смысл |
---|---|
boro | Боро (Манхэттен, Бруклин…). |
struc | Структурный тип станции (подземная, эстакадная…). |
lat | Географическая широта. |
lon | Географическая долгота. |
id | Код станции. |
Эти данные вынесены в отдельную таблицу, чтобы при обновлении менять только её. Ниже дана инструкция по переносу данных из источника в таблицу.
- Сохранить источник в текстовом файле. Убедиться, что у него осталось расширение csv. Открыть его в Экселе.
- В предположении, что код станции оказался в столбце A, номер станции (ключ) в столбце C, боро в столбце G, структурный тип в столбце I, географические координаты в столбцах J и K, направления на север и юг в столбцах L и M, а столбец N пуст, занести в столбец O такую формулу:
="['" & C2 & "']={boro='" & G2 & "',struc='" & I2 & "',lat='" & J2 & "',lon='" & K2 & "',id='" & A2 & "',n='" & L2 & "',s='" & M2 & "'}, --" & F2 & " / " & H2
-
- (пример приведён для второй строки) и размножить её на всю высоту.
- Удалить строки, в которых нет станций либо (в самом низу) которые относятся к Статен-Айленду.
- Скопировать столбцы N и O в модуль на место строк таблицы csv .
Примечание. В файле в источнике добавили поля, связанные с доступностью станций для инвалидов. С одной стороны, можно их учесть, изменив формулу в Экселе следующим образом:
="['" & C2 & "']={boro='" & G2 & "',struc='" & I2 & "',lat='" & J2 & "',lon='" & K2 & "',id='" & A2 & "',n='" & L2 & "',s='" & M2 & "',a='" & N2 & "',an='" & P2 & "',as='" & Q2 & "'}, --" & F2 & " / " & H2
и заменив поле acc в таблице станций на поддержку новых полей в функции station_csv. С одной стороны, подход станет корректнее. С другой стороны, некоторые функции модуля станут забирать больше ресурсов, а каждое изменение будет требовать полного импорта файла.
Словари
routes
Просто список всех маршрутов. Поля:
- id (оно же индекс элемента таблицы) — обозначение маршрута, используемое в других таблицах;
- bkg — код цвета фона для строки в списке станций (только для станций, обслуживаемых маршрутами одного цвета; похож на код цвета маршрута, но бледнее);
- color — код цвета маршрута;
- label — обозначение маршрута, используемое в имени файла, изображающего буллет маршрута (по умолчанию берётся из id);
- link — название статьи про маршрут (по умолчанию строится на основе id);
- name — название маршрута, используемое в текстовой ссылке на статью (по умолчанию берётся из id);
- tooltip — всплывающая подсказка для буллета (по умолчанию берётся из id);
- descr — полное название маршрута (экспресс/локальный такой-то линии);
- onedir — логическое поле , обозначающее, что маршрут идёт только в одну сторону;
- shuttle — логическое поле , обозначающее, что маршрут является челночным (причём всегда, а не только по ночам);
- future — логическое поле , обозначающее, что маршрут проектируется;
- schedule — ссылка на расписание маршрута на сайте MTA (часть ссылки, одинаковая для всех маршрутов, не приводится);
- second — маршрут, являющийся дополнением данного маршрута (только для челнока Леффертс-бульвара).
icons
Названия графических файлов и текст для отображения комбинации периодов времени для каждого маршрута. Поля:
- индекс элемента таблицы — комбинация периодов времени (см. выше про таблицу routes_periods и ниже про функцию howstops), для которой подбирается графический файл;
- icon — часть имени файла (остальная часть у всех файлов достраивается одинаково);
- tooltip — всплывающая подсказка (объединяется программой с подсказкой для маршрута из предыдущей таблицы);
- ignore — логическое поле , надо ли игнорировать данную комбинацию периодов времени, когда задан формат без периодов времени (и тогда маршруты, обслуживающие станцию в наименее значительные периоды времени, просто не показываются);
- comma — логическое поле , надо ли ставить запятую после этого текста перед «и» (например, если в нём есть слово «кроме» и запятая перед ним);
- alltimes — логическое поле , засчитывается ли данная комбинация как круглосуточная;
- num — номер по порядку для использования в списке условных обозначений (только в записях, используемых в этом списке);
- legend — текст для списка условных обозначений (отсутствие поля обозначает, что текст надо брать из поля tooltip).
Если для какой-то комбинации периодов времени в этой таблице отсутствует запись, то все статьи, в которых эта недостающая запись потребовалась, заносятся в Категория:Статьи с незаданным описанием комбинации времён в модуле NYCS DB , а в самих статьях информация, которая должна браться из этой таблицы, заменяется на само обозначение комбинации периодов времени, которое не нашлось в таблице. Если в этой категории окажутся статьи, надо в найти в них это обозначение и дополнить таблицу.
subperiods
Возможные сочетания периодов времени и способов обслуживания станции поездом. Поля:
- period — период, как в таблице routes_periods;
- subperiod — аналог поля dir из той же таблицы, но не для сегмента, а для станции.
Возможные значения для поля subperiod:
- peak — в пиковом направлении;
- not peak — в направлении, обратном пиковому;
- some peak — в пиковом направлении, только иногда;
- пустая строка — в обоих направлениях;
- 1 и 2 — ограничения по времени, как в таблице.
lines
Информация по тем линиям, по которым она нужна. Поля:
- индекс элемента таблицы — название статьи, но с маленькой буквы (потому что именно так они написаны в названиях статей о станциях);
- color — код цвета для квадратика в списке линий для маршрута (квадратик рисуется только для тех линий, у которых цвет совпадает с цветом у маршрута);
- link — ссылка на статью о соответствующей стволовой линии;
- shuttle — логическое поле , обозначающее, что этот цвет соответствует челнокам.
colors
Информация по цветам, используемым для обозначения маршрутов и линий. Поля:
- индекс элемента таблицы — код цвета;
- text — название цвета на русском языке в творительном падеже.
alts
Вре́менные изменения в маршрутах. Каждая запись соответствует вре́менной схеме, вызванной каким-нибудь ремонтом и т. п. Поля:
- number — номер от 1 и дальше (не обязательно подряд) в текстовом формате, используемый в поле alt (с добавлением спереди минуса или плюса) в таблицах routes_periods и station_complexes;
- text — текст, поясняющий смысл временной схемы (с маленькой буквы и без знака препинания в конце, например: «на время ремонта такой-то линии»);
- refname — имя ссылки для подстановки в <ref name="..."> вместо многоточия;
- link — ссылка на источник;
- title — заголовок для ссылки на источник.
Для добавления временной схемы надо:
- добавить запись здесь, дав ей какой-нибудь номер, которого пока нет;
- в таблицах routes_periods и station_complexes добавить записи, действующие только по временной схеме, с плюсом (в поле alt значение должно состоять из плюса и здешнего номера);
- там же снабдить полем alt с минусом записи, действующие только по постоянной схеме, но не действующие по временной (в поле alt значение должно состоять из минуса и здешнего номера);
- если изменение не сводится только к добавлению или отмене, то скопировать постоянную запись, переправить копию на временный вариант и снабдить постоянную запись полем alt с минусом, а копию полем alt с плюсом.
Для удаления временной схемы надо:
- удалить её запись здесь (перенумеровывать остальные не нужно);
- в таблицах routes_periods и station_complexes удалить записи с этим номером и плюсом;
- там же удалить у оставшихся записей поле alt с этим номером и минусом.
Пример удаления временной схемы можно увидеть в истории правок модуля за 27 апреля 2020 года (там большинство временных изменений было отменено, а одна временная бесплатная пересадка превратилась в постоянную).
Если наступит момент, когда никаких временных схем нет, надо будет оставить одну запись, у которой поле number не задано (то есть nil).
Примечания к таблицам
- На линии Джамейка (она наиболее спорная в этом отношении) север сделан на Джамейке.
- ↑ Заполнено только если true.
- ↑ В Экселе выделяем столбцы, проведя мышкой по их заголовкам, жмём Ctrl+C, в редакторе модуля стираем все строки таблицы, ставим курсор в начале строки после них, жмём Ctrl+V.
Принцип действия вкратце
Организация движения и прочее IRL
Понятие маршрута
В обычном метрополитене (например, в Москве) поезд идёт по своей линии из конца в конец; рельсовые соединения между линиями если где-то и существуют, то не используются поездами с пассажирами (кроме редких случаев, когда надо перегнать поезд с линии на линию). В Нью-Йорке метрополитен больше похож на трамвайную сеть: маршрут поворачивает с улицы на улицу, где-то идёт вместе с другим маршрутом, а где-то нет. Поэтому есть отдельно понятие маршрута ( route, service, train , см. Список маршрутов Нью-Йоркского метрополитена ) и отдельно понятие линии ( line , см. Список линий Нью-Йоркского метрополитена ). Линия играет роль улицы, причём в большинстве случаев она и проходит по улице (над ней по эстакаде или под ней на глубине подвальных этажей домов).
На практике в АИ, предназначенных для пассажиров, имеется путаница, состоящая в том, что слово линия ( line ) применяется по отношению к маршрутам (пример можно видеть на фотографии с Томасом Прендергастом ниже). Однако английская Википедия, а русская вслед за ней, старается эту путаницу не копировать, потому что хотя пассажирам, возможно, не нужна информация про историю строительства линий (тех линий, которые на самом деле линии), — читателям Википедии она нужна, соответственно для читателей нужно сохранить два разных термина, не смешивающихся между собой.
Экспресс-маршруты
На многих линиях есть 4 пути, причём два из них имеют платформы на всех станциях, а два только на некоторых, и маршруты идут или по одним путям, или по другим. Первые маршруты и пути называются локальными ( local ), а вторые экспрессами ( express ). Станции называются экспресс-станциями, если на них есть остановка экспресс-маршрутов (платформа при экспресс-пути), и локальными — если нет.
Станция
Путь
|
Экспресс-станция | Локальная станция |
---|---|---|
Экспресс-путь | есть остановка | нет остановки |
Локальный путь | есть остановка | есть остановка |
Как правило все пути идут в одном уровне и экспресс-путями являются два средних, хотя возможны и варианты (они оговорены в статьях о станциях, где это не так). На некоторых линиях есть 3 пути, тогда экспресс-путь один средний и он используется только в пиковом направлении ( peak direction , в сторону Манхэттена утром и обратно вечером).
|
|
Другие особенности маршрутов
Помимо локальных и экспресс-маршрутов, имеются маршруты, работающие в паре по принципу скип-стоп ( skip-stop ), — это своего рода экспресс для бедных, поезд проходит без остановки часть станций (а другой поезд другую часть), но двигается по обычным локальным путям, потому что экспресс-путей на линии нет. На момент составления модуля этот принцип актуален для маршрутов и , у которых в режиме скип-стоп при 6 или 7 пропускаемых станциях время на проход всего маршрута сокращается с 52 минут до 47 .
На некоторых маршрутах организовано вилочное движение , когда часть поездов направляется по другой линии (например, из-за ограниченной пропускной способности конечных станций в часы пик).
Некоторые маршруты называются челночными ( shuttle ), однако они не обязательно ходят по одному пути в обе стороны (только у двух из них есть это свойство), но они просто короче обычных маршрутов (эмпирически замечено, что на маршрутах, называемых челночными, не более 8 станций).
Деление маршрутов на номерные и литерные соответствует двум типоразмерам вагонов (а также станций, тоннелей и т. д.) и с логикой данного модуля не связано (хотя и можно заметить, что по каждому сегменту идут маршруты или только номерные, или только литерные).
Расписание как функция времени
И наконец, всё расписание движения маршрутов, со всеми поворотами и делением на локальные и экспрессы, зависит от времени суток и дня недели ( time period ). Есть 5 периодов времени с разным расписанием:
Часы
Дни
|
00:00—06:30 | 06:30—09:30 | 09:30—15:30 | 15:30—20:00 | 20:00—24:00 |
---|---|---|---|---|---|
пн — пт | ночь | часы пик |
день (кроме
часов пик) |
часы пик | вечер |
сб — вс |
выходные
(и в праздники тоже действует расписание выходного дня) |
В общем случае каждый маршрут на каждом участке своей трассы в каждый период времени в каждом направлении ходит либо локальным, либо экспрессом (либо по схеме скип-стоп с указанием, на каких станциях он останавливается), что и отражено в таблице routes_periods. Линия, по которой ходит всё время один и тот же маршрут, да ещё всегда со всеми остановками, и ещё не переходит на другие линии (линия Канарси и маршрут ), — это редкость.
Живучесть системы
Общая конфигурация сети метрополитена с большим числом рельсовых соединений между линиями придаёт ей живучесть . При закрытии какого-либо участка на ремонт маршруты изменяются таким образом, чтобы обслуживать всю остальную сеть (в отличие от традиционных метрополитенов, где закрытие одного участка приводит к разрыву сети на две части ). Это даёт метрополитену возможность работать круглосуточно и производить ремонт без остановки работы на ночь, закрывая движение только там, где надо, и направляя поезда в объезд. Для показа в статьях самых долгосрочных временных изменений в маршрутах есть поддержка в модуле. Одним из них на момент создания модуля был ремонт тоннеля 14-й улицы, входящего в вышеупомянутую линию Канарси, имеющую мало возможностей по перенаправлению поездов. вызвал в 2016—2019 годах много дискуссий, завершившихся вмешательством губернатора штата Нью-Йорк и изменением плана таким образом, чтобы движение по линии было максимально сохранено.
Названия станций
|
||||||
Названия станций повторяются многократно, потому что станции названы в честь улиц (поперечных к линии — точно как трамвайные остановки), а одна улица может пересекать несколько разных линий, на каждой из которых в этом месте есть станция (и плюс в каждом боро могут быть улицы с одинаковыми названиями). Чтобы указать на станцию однозначно, в реальной жизни принято добавлять к её названию либо боро (Манхэттен, Бруклин, Куинс, Бронкс), либо бывшую компанию, к которой станция относилась до объединения 3 частей метрополитена в 1940 году (IRT, BMT, IND), либо маршруты, останавливающиеся на ней, либо кроме поперечной ещё и продольную улицу. Способы с боро и с компанией дают однозначность только иногда. Способ с маршрутами неудобен тем, что маршруты со временем меняются, поэтому, например, не сразу можно понять, что имелось в виду под в 1996—1997 году (станций под названием «Авеню Ю» всего три , но маршрут сегодня не проходит ни через одну из них). Кроме того, нередка ситуация, когда маршрут останавливается на станции только ночью или только несколько раз в сутки в часы пик, и такой маршрут у такой станции иногда включают в название, а иногда нет.
После терактов 11 сентября были разрушены две станции, расположенные на разных линиях и называвшиеся «Кортландт-стрит»: одна была восстановлена относительно быстро, но затем закрывалась на реконструкцию; другая была признана не подлежащей восстановлению, тоннель был построен заново без станции, а новая станция на этом месте была открыта через 17 лет. Но на протяжении всех этих лет в разных источниках, от новостных сайтов до форумов метрофанов, появлялись формулировки типа «станция „Кортландт-стрит“ разрушена» и «когда она будет восстановлена», без всяких признаков того, что пишущий знает, что этих станций две, и даже в новостях про одну из них нередко размещались фотографии другой.
Отражение реальности в Википедии
Организация статей
Вслед за английской Википедией, статьи про станции как правило названы следующим образом: <название станции> (<название линии>) , где <название линии> совпадает с названием статьи про линию (только в русской Википедии с маленькой буквы). Исключения перечислены ниже, причём если статья названа иначе, то имеется перенаправление , которое названо по тому же принципу и ведёт на соответствующий раздел статьи. Итак, исключения:
- Через станцию проходят пути нескольких линий — тогда статья имеет уточнение «Нью-Йоркское метро». Такие случаи перечислены в таблице multiline_stations. В таблице stations в таком случае каждая из частей станции (пути, платформы и маршруты, относящиеся к каждой линии) представлена по отдельности. Одна из этих станций ( Декалб-авеню ) не имеет однозначного распределения путей между линиями, поэтому для неё придумано несколько ухищрений, прокомментированных в этой документации.
- Станция входит в пересадочный узел (включающий несколько станций) — тогда статья описывает все станции, входящие в узел, и тоже имеет уточнение «Нью-Йоркское метро». Каждая станция имеет раздел в статье, озаглавленный «Платформа (-мы) такой-то линии». Такие случаи перечислены в таблице station_complexes. Отличие от предыдущего случая в том, что в предыдущем случае станция считается одной, несмотря на то что через неё проходят несколько линий.
- Линия разветвляется, на каждой из двух веток имеется станция, обе станции формально относятся к одной линии и при этом соединены пересадкой, то есть входят в пересадочный узел. В таком случае обе станции описываются в одном разделе статьи. Две пары таких станций отмечены в таблице station_complexes комментариями «две станции — один раздел статьи», и они же перечислены в таблице twins. В одной из пар названия станций разные (Чеймберс-стрит и Всемирный торговый центр) и перенаправления названы так, как указано выше, в другой паре названия станций одинаковые (Канал-стрит) и в уточнениях перенаправлений после названия линии есть дополнительные слова.
- Ещё один случай отмечен комментарием в таблице station_complexes: «станция с двумя линиями входит в пересадочный узел» (то есть станция одновременно обладает особенностями, названными в двух первых исключениях).
Рекомендуется по возможности пользоваться этими перенаправлениями, а не прямыми ссылками на статьи, чтобы по тексту ссылки всегда было видно, о чём идёт речь.
Условные обозначения
|
Для обозначения маршрутов и в источниках, и в Википедии используются цветные кружки (для некоторых поставленные на угол квадратики, diamond ) с буквами или цифрами маршрутов («буллеты», bullet ). Для обозначения периодов времени, в которые маршрут останавливается на определённой станции, в Википедии используются специальные значки , найденные в старых расписаниях. Коллеги из английской Википедии смогли найти такие значки не для всех сочетаний периодов времени, поэтому иногда приходится использовать один значок для разных сочетаний (можно надеяться, близких друг другу: см. в таблице icons комментарий «файлы для сочетаний времён есть только досюда»). В выпадающем списке условных обозначений описание к каждому значку сформулировано приблизительно — так, чтобы оно покрыло разные случаи использования каждого значка.
Значок маршрута и значок времён вместе выглядят вот так: (в данном примере обозначение следует понимать так, что маршрут 3 останавливается на станции круглосуточно, кроме ночи). До создания этого модуля такие обозначения строились при помощи шаблонов (в частности, {{ NYCS when }} ).
Модуль
Таблица stations содержит все станции (причём для станций, указанных выше в исключении 1, даны «псевдостанции», составляющие их). Для каждой станции указано, к какому сегменту она относится с точки зрения этого модуля. Таблица routes_periods имеет ключ, состоящий из маршрута, периода времени и сегмента , и отвечает на вопрос, каким образом данный маршрут ходит по данному сегменту в данный период времени. Порядок станций внутри сегмента в первой таблице и порядок сегментов внутри сочетания маршрута и периода времени во второй таблице соответствуют реальному порядку станций на линиях и реальному порядку их обхода поездом с севера на юг.
Функция howstops возвращает комбинацию периодов времени , в которые заданный маршрут останавливается на заданной станции. Она их возвращает примерно в таком формате: rh(peak)+md+ev, где плюсами разделены собственно периоды времени (как в таблице routes_periods), а в скобках при некоторых из них даны способы обслуживания станции поездом (как в таблице subperiods). Внимание: в переменных, обозначающих способы обслуживания станции поездом, различаются пустая строка (в обоих направлениях) и nil (ни в каком направлении): для пустой строки период времени присутствует в возвращаемом значении, но без добавки в скобках (как md и ev в приведённом примере), а для nil — отсутствует.
Функция howskips (используемая реже) — аналог функции howstops, но для прохода маршрута через станцию без остановки. Функция normalize приводит результат двух предыдущих функций к стандартному виду, чтобы его можно было найти в таблице icons.
Массив arr состоит из элементов, каждый из которых имеет два поля: обозначение маршрута (как в таблице routes_periods) и комбинация периодов времени в вышеуказанном формате. Функция arr_add пополняет этот массив одним сочетанием маршрута и периода времени. Функция arr_text строит на основании этого массива викикод в том или ином формате (см. столбец «Форматирование вывода» в списке функций выше). Большинство доступных снаружи функций модуля построены как цикл, заполняющий массив функцией arr_add, и в конце форматирование массива функцией arr_text.
Массив arrarr (используемый для списка конечных станций маршрута и для списка соседних станций заданной станции) состоит из элементов, каждый из которых имеет два поля: название станции и массив arr. При построении списка соседних станций в некоторых элементах массива заполняется также логическое поле, говорящее о том, что станцию надо показать уменьшенным шрифтом (для закрытых станций и для неиспользуемых соединений).
Функция build_route — большая функция, которая строит список станций для маршрута или двух в различных форматах для разных целей.
Поддержка модуля
Основной случай, когда необходимо вносить изменения в модуль, — это изменения в маршрутах, что требует подправить таблицу routes_periods. Но кроме того:
- Возможен случай, что на разных частях какого-либо сегмента движение поездов становится разным. Тогда надо разбить этот сегмент на два, придумать новое название для одной из частей и проапдейтить все места в модуле, где упоминается изменённый сегмент, а также все статьи о линиях, где он упоминается (а он может упоминаться не только в статье о самой линии, к которой он относится).
- Возможен случай, что отменяется движение поездов по какому-либо участку путей (например, там, где поворачивает с линии Шестой авеню на линию Нассо-стрит). Тогда, чтобы не потерять что-то в «соседних станциях», надо добавить этот участок в таблицу unused_connections.
- Возможен случай, что затрагивается та часть маршрута, которая связана с развилками. Тогда надо убедиться, что в статье о маршруте правильно показывается схема, и при необходимости исправить поля shape и pattern.
- Возможен случай, что переименовывается или добавляется станция. Тогда надо привести в соответствие статью либо перенаправление, название станции в модуле (во всех таблицах, включая поле eng в таблице stations), а также обращения к модулю в тех статьях, где данная станция упоминается как параметр при обращении к функциям модуля через шаблоны (для их нахождения можно использовать поиск, и , только надо не напутать с расстановкой трёх типов палок). При переименовании статьи всегда полезно проверить «ссылки сюда» для старого названия.
- Если будет решено изменить систему уточнений в этих статьях, то названия, использованные в этом модуле, должны сохраниться хотя бы в виде перенаправлений. В тех шаблонах, где в модуль передаётся имя статьи, берущееся по умолчанию, надо будет передавать явным образом имя перенаправления.
- Есть некоторые места в статьях, которые не поддерживаются модулем, например столбец «Режим работы» в списке маршрутов.
Для помощи в обнаружении статей с ошибками при обращении к этому модулю созданы две категории, которые надо проверять после любого изменения:
- К:Статьи с незаданным описанием комбинации времён в модуле NYCS DB — в таблице icons должны присутствовать все сочетания периодов времени, получающиеся при разнообразных вычислениях в статьях; если где-то получается сочетание, отсутствующее в таблице, то статья попадает в категорию.
- К:Статьи с ошибочными параметрами при обращении к модулю NYCS DB — в функциях connection_use и connection_use_st должны быть заданы два сегмента либо две станции соответственно; если они заданы некорректно, то статья попадает в категорию.
На подстраницах модуля есть обращения к некоторым особо критичным из его функций для всех станций, пересадочных узлов, линий и маршрутов. Эти подстраницы можно использовать для предпросмотра при внесении изменений в модуль и в шаблоны, обращающиеся к нему. При желании можно на этих подстраницах менять названия функций, оставляя тот же список станций и т. д.
Примечания к принципу действия
Конец документации, начало модуля
local p = {}
local getArgs=require('Module:Arguments').getArgs
local markyes='[[Файл:Check Mark (89605) - The Noun Project.svg|10px|link=]]'
local markpeak='[[Файл:Pfeil rechts.svg|10px|link=]]'
local markback='[[Файл:Pfeil links.svg|10px|link=]]'
local asterisk='<sup>[[Файл:Asterisk.svg|6px|link=]]</sup>'
local onearrow='|align=center|[[Файл:U+21E9.svg|x20px|link=]]\r\n'
local indent='<br> '
local accicon='[[Файл:Wheelchair symbol.svg|12px|Доступность для маломобильных групп населения|link=]]'
local constricon='[[Файл:UnderCon icon black.svg|20px|Станция строится или проектируется|link=]]'
local closedicon='[[Файл:Closed icon black.svg|20px|Станция закрыта|link=]]'
local demolicon='[[Файл:Closed icon black.svg|20px|Станция снесена|link=]]'
local noperiods='[[Категория:Статьи с незаданным описанием комбинации времён в модуле NYCS DB]]'
local badparams='[[Категория:Статьи с ошибочными параметрами при обращении к модулю NYCS DB]]'
local nostation='<b><span style="color:red;">Станция не определена в модуле NYCS DB</span></b>'..badparams
local icon_nostop='<span title="поезд не останавливается">—</span>'
local grayback='background-color:lightgrey;'
local whiteback='background-color:white;'
local tab='{| cellspacing=0 cellpadding=0'
local r_link='<ref name="mta.info">[https://new.mta.info/document/16136 Annual Subway Ridership]</ref>'
local metrocard='<ref name="virt">Переход требует выхода из метро и повторного входа через турникет, но бесплатный для пассажиров, оплачивающих проезд при помощи {{iw|MetroCard}} или {{iw|OMNY}}.</ref>'
local lastcomma,excludefound
local alt_on=false -- переменная (значение меняется программно, руками не трогать)
local future_on=false -- переменная (значение меняется программно, руками не трогать)
local dbg='' -- переменная для отладки, ее описание пусть тут будет, но версии модуля, где она используется, должны оставаться только в предпросмотре
-- tables
local stations = {
{segment='Eighth North',station='Инвуд — 207-я улица (линия Восьмой авеню, Ай-эн-ди)',acc='yes',subtype='bumper',eng='Inwood–207th Street',opened='10 сентября 1932',r_key='Inwood-207 St A',c_key='A02'},
{segment='Eighth North',station='Дайкман-стрит (линия Восьмой авеню, Ай-эн-ди)',eng='Dyckman Street',opened='10 сентября 1932',r_key='Dyckman St A',c_key='A03'},
{segment='Eighth North',station='190-я улица (линия Восьмой авеню, Ай-эн-ди)',eng='190th Street',opened='10 сентября 1932',r_key='190 St A',c_key='A05'},
{segment='Eighth North',station='181-я улица (линия Восьмой авеню, Ай-эн-ди)',acc='yes',eng='181st Street',opened='10 сентября 1932',r_key='181 St A',c_key='A06'},
{segment='Eighth North',station='175-я улица (линия Восьмой авеню, Ай-эн-ди)',acc='yes',eng='175th Street',opened='10 сентября 1932',r_key='175 St A',conn='[[автовокзал Моста Джорджа Вашингтона]]<sup>[[[:en:George Washington Bridge Bus Station|en]]]</sup>',c_key='A07'},
{segment='Eighth North Middle',station='168-я улица (линия Восьмой авеню, Ай-эн-ди)',type='x',acc='yes',eng='168th Street',opened='10 сентября 1932',r_key='168 St A C 1',r_ast=true,c_key='A09'},
{segment='Eighth North Middle',station='163-я улица — Амстердам-авеню (линия Восьмой авеню, Ай-эн-ди)',type='o',subtype='under',sep='yes',eng='163rd Street–Amsterdam Avenue',opened='10 сентября 1932',r_key='163 St-Amsterdam Av C',c_key='A10'},
{segment='Eighth North Middle',station='155-я улица (линия Восьмой авеню, Ай-эн-ди)',type='o',subtype='under',eng='155th Street',opened='10 сентября 1932',r_key='155 St C',c_key='A11'},
{segment='Eighth 145',station='145-я улица (линия Восьмой авеню, Ай-эн-ди)',type='x',eng='145th Street',opened='10 сентября 1932',r_key='145 St A B C D',c_key='A12'},
{segment='Eighth',station='135-я улица (линия Восьмой авеню, Ай-эн-ди)',type='o',sep='yes',eng='135th Street',opened='10 сентября 1932',r_key='135 St B C',c_key='A14'},
{segment='Eighth',station='125-я улица (линия Восьмой авеню, Ай-эн-ди)',type='x',acc='yes',eng='125th Street',opened='10 сентября 1932',r_key='125 St A B C D',c_key='A15'},
{segment='Eighth',station='116-я улица (линия Восьмой авеню, Ай-эн-ди)',type='o',sep='yes',eng='116th Street',opened='10 сентября 1932',r_key='116 St B C',c_key='A16'},
{segment='Eighth',station='Катидрал-Паркуэй — 110-я улица (линия Восьмой авеню, Ай-эн-ди)',type='o',eng='Cathedral Parkway–110th Street',opened='10 сентября 1932',r_key='Cathedral Pkwy-110 St B C',c_key='A17'},
{segment='Eighth',station='103-я улица (линия Восьмой авеню, Ай-эн-ди)',type='o',eng='103rd Street',opened='10 сентября 1932',r_key='103 St B C',c_key='A18'},
{segment='Eighth',station='96-я улица (линия Восьмой авеню, Ай-эн-ди)',type='o',eng='96th Street',opened='10 сентября 1932',r_key='96 St B C',c_key='A19'},
{segment='Eighth',station='86-я улица (линия Восьмой авеню, Ай-эн-ди)',type='o',eng='86th Street',opened='10 сентября 1932',r_key='86 St B C',c_key='A20'},
{segment='Eighth',station='81-я улица — Музей естественной истории (линия Восьмой авеню, Ай-эн-ди)',type='o',eng='81st Street–Museum of Natural History',opened='10 сентября 1932',r_key='81 St-Museum of Natural History B C',c_key='A21'},
{segment='Eighth',station='72-я улица (линия Восьмой авеню, Ай-эн-ди)',type='o',eng='72nd Street',opened='10 сентября 1932',r_key='72 St B C',c_key='A22'},
{segment='Eighth',station='59-я улица — Колумбус-Серкл (линия Восьмой авеню, Ай-эн-ди)',type='x',acc='yes',eng='59th Street–Columbus Circle',opened='10 сентября 1932',r_key='59 St-Columbus Circle A B C D 1',r_ast=true,c_key='A24'},
{segment='Conc North',station='Норвуд — 205-я улица (линия Конкорс, Ай-эн-ди)',eng='Norwood–205th Street',opened='1 июля 1933',r_key='Norwood-205 St D',c_key='D01'},
{segment='BPB',station='Бедфорд-парк-бульвар (линия Конкорс, Ай-эн-ди)',type='x',subtype='tt',acc='yes',eng='Bedford Park Boulevard',opened='1 июля 1933',r_key='Bedford Park Blvd B D',c_key='D03'},
{segment='Conc',station='Кингсбридж-роуд (линия Конкорс, Ай-эн-ди)',type='x',subtype='bidi',acc='yes',eng='Kingsbridge Road',opened='1 июля 1933',r_key='Kingsbridge Rd B D',c_key='D04'},
{segment='Conc',station='Фордем-роуд (линия Конкорс, Ай-эн-ди)',type='x',subtype='bidi',eng='Fordham Road',opened='1 июля 1933',r_key='Fordham Rd B D',conn='[[Фордем (Metro-North)]]<sup>[[[:en:Fordham station|en]]]</sup>',c_key='D05'},
{segment='Conc',station='182-я — 183-я улицы (линия Конкорс, Ай-эн-ди)',type='o',eng='182nd–183rd Streets',opened='1 июля 1933',r_key='182-183 Sts B D',c_key='D06'},
{segment='Conc',station='Тремонт-авеню (линия Конкорс, Ай-эн-ди)',type='x',subtype='bidi',eng='Tremont Avenue',opened='1 июля 1933',r_key='Tremont Av B D',c_key='D07'},
{segment='Conc',station='174-я — 175-я улицы (линия Конкорс, Ай-эн-ди)',type='o',eng='174th–175th Streets',opened='1 июля 1933',r_key='174-175 Sts B D',c_key='D08'},
{segment='Conc',station='170-я улица (линия Конкорс, Ай-эн-ди)',type='o',eng='170th Street',opened='1 июля 1933',r_key='170 St B D',c_key='D09'},
{segment='Conc',station='167-я улица (линия Конкорс, Ай-эн-ди)',type='o',eng='167th Street',opened='1 июля 1933',r_key='167 St B D',c_key='D10'},
{segment='Conc',station='161-я улица — Стадион Янки (линия Конкорс, Ай-эн-ди)',type='o',acc='yes',eng='161st Street–Yankee Stadium',opened='1 июля 1933',below='Бронкс<hr>Тоннель Конкорс<hr>Манхэттен',r_key='161 St-Yankee Stadium B D 4',r_ast=true,conn='[[Янкис — Ист 153-я улица (Metro-North)]]<sup>[[[:en:Yankees–East 153rd Street station|en]]]</sup>',c_key='D11'},
{segment='Conc',station='155-я улица (линия Конкорс, Ай-эн-ди)',type='o',eng='155th Street',opened='1 июля 1933',r_key='155 St B D',c_key='D12'},
{segment='Conc 145',station='145-я улица (линия Конкорс, Ай-эн-ди)',type='x',subtype='bidi',eng='145th Street',opened='10 сентября 1932',r_key='145 St A B C D',c_key='D13'},
{segment='Ast',station='Астория — Дитмарс-бульвар (линия Астория, Би-эм-ти)',type='x',subtype='bumper',eng='Astoria–Ditmars Boulevard',opened='19 июля 1917',r_key='Astoria-Ditmars Blvd N W',c_key='R01'},
{segment='Ast',station='Астория-бульвар (линия Астория, Би-эм-ти)',type='x',acc='yes',subtype='bidi',eng='Astoria Boulevard',opened='19 июля 1917',r_key='Astoria Blvd N W',c_key='R03'},
{segment='Ast',station='30-я авеню (линия Астория, Би-эм-ти)',type='o',eng='30th Avenue',opened='19 июля 1917',r_key='30 Av N W',c_key='R04'},
{segment='Ast',station='Бродвей (линия Астория, Би-эм-ти)',type='o',eng='Broadway',opened='19 июля 1917',r_key='Broadway N W',c_key='R05'},
{segment='Ast',station='36-я авеню (линия Астория, Би-эм-ти)',type='o',eng='36th Avenue',opened='19 июля 1917',r_key='36 Av N W',c_key='R06'},
{segment='Ast',station='39-я авеню (линия Астория, Би-эм-ти)',type='o',eng='39th Avenue',opened='19 июля 1917',r_key='39 Av-Dutch Kills N W',c_key='R08'},
{segment='QBP',station='Куинсборо-Плаза (линия Астория, Би-эм-ти)',eng='Queensboro Plaza',opened='5 ноября 1916',r_key='Queensboro Plaza N W 7',c_key='R09'},
{segment='179',station='Джамейка — 179-я улица (линия Куинс-бульвара, Ай-эн-ди)',type='x',acc='yes',eng='Jamaica–179th Street',opened='10 декабря 1950',r_key='Jamaica-179 St F',c_key='F01'},
{segment='179',station='169-я улица (линия Куинс-бульвара, Ай-эн-ди)',type='o',eng='169th Street',opened='24 апреля 1937',r_key='169 St F',c_key='F02'},
{segment='179',station='Парсонс-бульвар (линия Куинс-бульвара, Ай-эн-ди)',type='x',eng='Parsons Boulevard',opened='24 апреля 1937',r_key='Parsons Blvd F',c_key='F03'},
{segment='179',station='Сатфин-бульвар (линия Куинс-бульвара, Ай-эн-ди)',type='o',eng='Sutphin Boulevard',opened='24 апреля 1937',r_key='Sutphin Blvd F',c_key='F04'},
{segment='QB West Tip',station='Седьмая авеню (линия Куинс-бульвара, Ай-эн-ди)',north_back=true,eng='Seventh Avenue',opened='19 августа 1933',r_key='7 Av B D E',c_key='D14'},
{segment='QB West Tip',station='50-я улица (линия Куинс-бульвара, Ай-эн-ди)',other_type='o',acc='s',sep='yes',eng='50th Street',opened='10 сентября 1932',r_key='50 St C E',c_key='A25'},
{segment='Eighth 50',station='50-я улица (линия Восьмой авеню, Ай-эн-ди)',type='o',acc='s',sep='yes',eng='50th Street',opened='10 сентября 1932',r_key='50 St C E',c_key='A25'},
{segment='Eighth South',station='42-я улица — Автовокзал Портового управления (линия Восьмой авеню, Ай-эн-ди)',type='x',acc='yes',eng='42nd Street–Port Authority Bus Terminal',opened='10 сентября 1932',r_key='Times Sq-42 St N Q R W S 1 2 3 7/42 St A C E',r_ast=true,conn='[[автовокзал Портового управления]]<sup>[[[:en:Port Authority Bus Terminal|en]]]</sup>',c_key='A27'},
{segment='Eighth South',station='34-я улица — Пенсильванский вокзал (линия Восьмой авеню, Ай-эн-ди)',type='x',acc='yes',eng='34th Street–Penn Station',opened='10 сентября 1932',r_key='34 St-Penn Station A C E',conn='[[Пенсильванский вокзал]]',c_key='A28'},
{segment='Eighth South',station='23-я улица (линия Восьмой авеню, Ай-эн-ди)',type='o',eng='23rd Street',opened='10 сентября 1932',r_key='23 St C E',c_key='A30'},
{segment='Eighth South',station='14-я улица (линия Восьмой авеню, Ай-эн-ди)',type='x',acc='yes',eng='14th Street',opened='10 сентября 1932',r_key='14 St A C E/8 Av L',r_ast=true,c_key='A31'},
{segment='Eighth South',station='Уэст Четвёртая улица — Вашингтон-сквер (линия Восьмой авеню, Ай-эн-ди)',type='x',acc='yes',eng='West Fourth Street–Washington Square',opened='10 сентября 1932',r_key='West 4 St-Washington Sq A B C D E F M',conn='[[Девятая улица (PATH)]]<sup>[[[:en:9th Street station (PATH)|en]]]</sup>',c_key='A32'},
{segment='Spring Canal',station='Спринг-стрит (линия Восьмой авеню, Ай-эн-ди)',type='o',eng='Spring Street',opened='10 сентября 1932',r_key='Spring St C E',c_key='A33'},
{segment='Spring Canal',station='Канал-стрит (линия Восьмой авеню, Ай-эн-ди)',type='x',subtype='suppress',eng='Canal Street',opened='10 сентября 1932',r_key='Canal St A C E',c_key='A34'},
{segment='WTC',station='Всемирный торговый центр (линия Восьмой авеню, Ай-эн-ди)',acc='yes',subtype='bumper',eng='World Trade Center',opened='10 сентября 1932',r_key='Chambers St A C/WTC E/Park Pl 2 3/Cortlandt R W',r_ast=true,conn='[[Всемирный торговый центр (PATH)]]<sup>[[[:en:World Trade Center station (PATH)|en]]]</sup>',c_key='E01'},
{segment='Second',station='96-я улица (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='96th Street',opened='1 января 2017',r_key='96 St Q',c_key='Q05'},
{segment='Second',station='86-я улица (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='86th Street',opened='1 января 2017',r_key='86 St Q',c_key='Q04'},
{segment='Second',station='72-я улица (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='72nd Street',opened='1 января 2017',r_key='72 St Q',c_key='Q03'},
{segment='63 BMT',station='Лексингтон-авеню — 63-я улица (линия 63-й улицы, Би-эм-ти)',acc='yes',eng='Lexington Avenue–63rd Street',opened='29 октября 1989',r_key='Lexington Av-63 St F Q',c_key='B08'},
{segment='7 Sixth',station='Седьмая авеню (линия Шестой авеню, Ай-эн-ди)',eng='Seventh Avenue',opened='19 августа 1933',r_key='7 Av B D E',c_key='D14'},
{segment='63 IND',station='21-я улица — Куинсбридж (линия 63-й улицы, Ай-эн-ди)',acc='yes',eng='21st Street–Queensbridge',opened='29 октября 1989',r_key='21 St-Queensbridge F',c_key='B04'},
{segment='63 IND',station='Остров Рузвельт (линия 63-й улицы, Ай-эн-ди)',acc='yes',eng='Roosevelt Island',opened='29 октября 1989',above='Куинс<hr>Тоннель 63-й улицы<hr>Манхэттен',below='Тоннель 63-й улицы (продолжение)',r_key='Roosevelt Island F',conn='[[Канатная дорога острова Рузвельт]]',c_key='B06'},
{segment='63 IND Lex',station='Лексингтон-авеню — 63-я улица (линия 63-й улицы, Ай-эн-ди)',acc='yes',eng='Lexington Avenue–63rd Street',opened='29 октября 1989',r_key='Lexington Av-63 St F Q',c_key='B08'},
{segment='57',station='57-я улица (линия Шестой авеню, Ай-эн-ди)',eng='57th Street',opened='1 июля 1968',r_key='57 St F',c_key='B10'},
{segment='Bway North',station='Лексингтон-авеню — 59-я улица (линия Бродвея, Би-эм-ти)',eng='Lexington Avenue/59th Street',opened='1 сентября 1919',above='Куинс<hr>Тоннель 60-й улицы<hr>Манхэттен',r_key='Lexington Av N R W/59 St 4 5 6',r_ast=true,conn='[[Канатная дорога острова Рузвельт]]',c_key='R11'},
{segment='Bway North',station='Пятая авеню — 59-я улица (линия Бродвея, Би-эм-ти)',eng='Fifth Avenue/59th Street',opened='1 сентября 1919',r_key='5 Av-59 St N R W',c_key='R13'},
{segment='Bway 57',station='57-я улица — Седьмая авеню (линия Бродвея, Би-эм-ти)',type='x',acc='yes',eng='57th Street–Seventh Avenue',opened='10 июля 1919',r_key='57 St-7 Av N Q R W',c_key='R14'},
{segment='Sixth',station='47-я — 50-я улицы — Рокфеллер-центр (линия Шестой авеню, Ай-эн-ди)',type='x',acc='yes',eng='47th–50th Streets–Rockefeller Center',opened='15 декабря 1940',r_key='47-50 Sts-Rockefeller Center B D F M',c_key='D15'},
{segment='Sixth',station='42-я улица — Брайант-парк (линия Шестой авеню, Ай-эн-ди)',type='x',eng='42nd Street–Bryant Park',opened='15 декабря 1940',r_key='42 St-Bryant Pk B D F M/5 Av 7',r_ast=true,c_key='D16'},
{segment='Sixth',station='34-я улица — Геральд-сквер (линия Шестой авеню, Ай-эн-ди)',type='x',acc='yes',eng='34th Street–Herald Square',opened='15 декабря 1940',r_key='34 St-Herald Sq B D F M N Q R W',r_ast=true,conn='[[33-я улица (PATH)]]<sup>[[[:en:33rd Street station (PATH)|en]]]</sup>',c_key='D17'},
{segment='Sixth',station='23-я улица (линия Шестой авеню, Ай-эн-ди)',type='o',subtype='under',sep='yes',eng='23rd Street',opened='15 декабря 1940',r_key='23 St F M',conn='[[23-я улица (PATH)]]<sup>[[[:en:23rd Street station (PATH)|en]]]</sup>',c_key='D18'},
{segment='Sixth',station='14-я улица (линия Шестой авеню, Ай-эн-ди)',type='o',subtype='under',eng='14th Street',opened='15 декабря 1940',r_key='14 St F M 1 2 3/6 Av L',r_ast=true,conn='[[14-я улица (PATH)]]<sup>[[[:en:14th Street station (PATH)|en]]]</sup>',c_key='D19'},
{segment='Sixth',station='Уэст Четвёртая улица — Вашингтон-сквер (линия Шестой авеню, Ай-эн-ди)',type='x',acc='yes',eng='West Fourth Street–Washington Square',opened='10 сентября 1932',r_key='West 4 St-Washington Sq A B C D E F M',conn='[[Девятая улица (PATH)]]<sup>[[[:en:9th Street station (PATH)|en]]]</sup>',c_key='D20'},
{segment='Broad Laf',station='Бродвей — Лафайетт-стрит (линия Шестой авеню, Ай-эн-ди)',type='x',acc='yes',eng='Broadway–Lafayette Street',opened='1 января 1936',r_key='Broadway-Lafayette St B D F M/Bleecker St 6',r_ast=true,c_key='D21'},
{segment='Grand',station='Гранд-стрит (линия Шестой авеню, Ай-эн-ди)',eng='Grand Street',opened='26 ноября 1967',r_key='Grand St B D',c_key='D22'},
{segment='Cross',station='Корт-сквер (линия Кросстаун, Ай-эн-ди)',acc='yes',eng='Court Square',opened='19 августа 1933',r_key='Court Sq E G M 7',r_ast=true,c_key='G22'},
{segment='Cross',station='21-я улица (линия Кросстаун, Ай-эн-ди)',eng='21st Street',below='Куинс<hr>Тоннель Гринпойнт<hr>Бруклин',opened='19 августа 1933',r_key='21 St G',c_key='G24'},
{segment='Cross',station='Гринпойнт-авеню (линия Кросстаун, Ай-эн-ди)',acc='yes',eng='Greenpoint Avenue',opened='19 августа 1933',r_key='Greenpoint Av G',c_key='G26'},
{segment='Cross',station='Нассо-авеню (линия Кросстаун, Ай-эн-ди)',eng='Nassau Avenue',opened='19 августа 1933',r_key='Nassau Av G',c_key='G28'},
{segment='Cross',station='Метрополитан-авеню (линия Кросстаун, Ай-эн-ди)',eng='Metropolitan Avenue',opened='1 июля 1937',r_key='Lorimer St L/Metropolitan Av G',r_ast=true,c_key='G29'},
{segment='Cross',station='Бродвей (линия Кросстаун, Ай-эн-ди)',eng='Broadway',opened='1 июля 1937',r_key='Broadway G',c_key='G30'},
{segment='Cross',station='Флашинг-авеню (линия Кросстаун, Ай-эн-ди)',sep='yes',eng='Flushing Avenue',opened='1 июля 1937',r_key='Flushing Av G',c_key='G31'},
{segment='Cross',station='Мертл-авеню — Уиллоби-авеню (линия Кросстаун, Ай-эн-ди)',eng='Myrtle–Willoughby Avenues',opened='1 июля 1937',r_key='Myrtle-Willoughby Avs G',c_key='G32'},
{segment='Cross',station='Бедфорд-авеню — Ностранд-авеню (линия Кросстаун, Ай-эн-ди)',eng='Bedford–Nostrand Avenues',opened='1 июля 1937',r_key='Bedford-Nostrand Avs G',c_key='G33'},
{segment='Cross',station='Клоссон-авеню (линия Кросстаун, Ай-эн-ди)',eng='Classon Avenue',opened='1 июля 1937',r_key='Classon Av G',c_key='G34'},
{segment='Cross',station='Клинтон-авеню — Вашингтон-авеню (линия Кросстаун, Ай-эн-ди)',eng='Clinton–Washington Avenues',opened='1 июля 1937',r_key='Clinton-Washington Avs G',c_key='G35'},
{segment='Cross',station='Фултон-стрит (линия Кросстаун, Ай-эн-ди)',eng='Fulton Street',opened='1 июля 1937',r_key='Fulton St G',c_key='G36'},
{segment='Cross',station='Хойт-стрит — Скермерхорн-стрит (линия Кросстаун, Ай-эн-ди)',north_back=true,eng='Hoyt–Schermerhorn Streets',opened='9 апреля 1936',r_key='Hoyt-Schermerhorn Sts A C G',c_key='A42'},
{segment='Eighth South Tip',station='Чеймберс-стрит (линия Восьмой авеню, Ай-эн-ди)',eng='Chambers Street',opened='10 сентября 1932',r_key='Chambers St A C/WTC E/Park Pl 2 3/Cortlandt R W',r_ast=true,conn='[[Всемирный торговый центр (PATH)]]<sup>[[[:en:World Trade Center station (PATH)|en]]]</sup>',c_key='A36'},
{segment='Eighth South Tip',station='Фултон-стрит (линия Восьмой авеню, Ай-эн-ди)',acc='yes',eng='Fulton Street',opened='1 февраля 1933',below='Манхэттен<hr>Тоннель Кранберри-стрит<hr>Бруклин',r_key='Fulton St A C J Z 2 3 4 5',r_ast=true,conn='[[Всемирный торговый центр (PATH)]]<sup>[[[:en:World Trade Center station (PATH)|en]]]</sup>',c_key='A38'},
{segment='Eighth South Tip',station='Хай-стрит (линия Восьмой авеню, Ай-эн-ди)',eng='High Street',opened='24 июня 1933',r_key='High St A C',c_key='A40'},
{segment='Jay F',station='Джей-стрит — Метротек (линия Фултон-стрит, Ай-эн-ди)',acc='yes',eng='Jay Street–MetroTech',opened='1 февраля 1933',r_key='Jay St-MetroTech A C F R',r_ast=true,c_key='A41',
info='С 1933 года станция имела пересадку на снесённую ныне станцию [[Бридж-стрит — Джей-стрит (линия Мертл-авеню, Би-эм-ти)|Бридж-стрит — Джей-стрит]]<sup>[[[:en:Bridge–Jay Streets station|en]]]</sup>.'},
{segment='Fulton',station='Хойт-стрит — Скермерхорн-стрит (линия Фултон-стрит, Ай-эн-ди)',type='x',eng='Hoyt–Schermerhorn Streets',opened='9 апреля 1936',r_key='Hoyt-Schermerhorn Sts A C G',c_key='A42'},
{segment='Fulton',station='Лафайетт-авеню (линия Фултон-стрит, Ай-эн-ди)',type='o',sep='yes',eng='Lafayette Avenue',opened='9 апреля 1936',r_key='Lafayette Av C',c_key='A43'},
{segment='Fulton',station='Клинтон-авеню — Вашингтон-авеню (линия Фултон-стрит, Ай-эн-ди)',type='o',sep='yes',eng='Clinton–Washington Avenues',opened='9 апреля 1936',r_key='Clinton-Washington Avs C',c_key='A44'},
{segment='Fulton',station='Франклин-авеню (линия Фултон-стрит, Ай-эн-ди)',type='o',acc='yes',eng='Franklin Avenue',opened='9 апреля 1936',r_key='Franklin Av C S',r_ast=true,c_key='A45'},
{segment='Fulton',station='Ностранд-авеню (линия Фултон-стрит, Ай-эн-ди)',type='x',eng='Nostrand Avenue',opened='9 апреля 1936',r_key='Nostrand Av A C',c_key='A46'},
{segment='Fulton',station='Кингстон-авеню — Труп-авеню (линия Фултон-стрит, Ай-эн-ди)',type='o',sep='yes',eng='Kingston–Throop Avenues',opened='9 апреля 1936',r_key='Kingston-Throop Avs C',c_key='A47'},
{segment='Fulton',station='Ютика-авеню (линия Фултон-стрит, Ай-эн-ди)',type='x',acc='yes',eng='Utica Avenue',opened='9 апреля 1936',r_key='Utica Av A C',c_key='A48'},
{segment='Fulton',station='Ральф-авеню (линия Фултон-стрит, Ай-эн-ди)',type='o',eng='Ralph Avenue',opened='9 апреля 1936',r_key='Ralph Av C',c_key='A49'},
{segment='Fulton',station='Рокавей-авеню (линия Фултон-стрит, Ай-эн-ди)',type='o',eng='Rockaway Avenue',opened='9 апреля 1936',r_key='Rockaway Av C',c_key='A50'},
{segment='Fulton',station='Бродвей-Джанкшен (линия Фултон-стрит, Ай-эн-ди)',type='x',eng='Broadway Junction',opened='30 декабря 1946',r_key='Broadway Junction A C J L Z',r_ast=true,c_key='A51'},
{segment='Fulton',station='Либерти-авеню (линия Фултон-стрит, Ай-эн-ди)',type='o',eng='Liberty Avenue',opened='28 ноября 1948',r_key='Liberty Av C',c_key='A52'},
{segment='Fulton',station='Ван-Сиклен-авеню (линия Фултон-стрит, Ай-эн-ди)',type='o',eng='Van Siclen Avenue',opened='28 ноября 1948',r_key='Van Siclen Av C',c_key='A53'},
{segment='Fulton',station='Шеперд-авеню (линия Фултон-стрит, Ай-эн-ди)',type='o',eng='Shepherd Avenue',opened='28 ноября 1948',r_key='Shepherd Av C',c_key='A54'},
{segment='Euclid',station='Юклид-авеню (линия Фултон-стрит, Ай-эн-ди)',type='x',acc='yes',eng='Euclid Avenue',opened='28 ноября 1948',r_key='Euclid Av A C',c_key='A55'},
{segment='Culver North Tip',station='Вторая авеню (линия Шестой авеню, Ай-эн-ди)',eng='Second Avenue',opened='1 января 1936',r_key='2 Av F',c_key='F14'},
{segment='Culver North Tip',station='Деланси-стрит (линия Шестой авеню, Ай-эн-ди)',eng='Delancey Street',opened='1 января 1936',r_key='Delancey St F/Essex St J M Z',r_ast=true,c_key='F15'},
{segment='Culver North Tip',station='Ист-Бродвей (линия Шестой авеню, Ай-эн-ди)',eng='East Broadway',opened='1 января 1936',below='Манхэттен<hr>Тоннель Ратджерс-стрит<hr>Бруклин',r_key='East Broadway F',c_key='F16'},
{segment='Culver North Tip',station='Йорк-стрит (линия Шестой авеню, Ай-эн-ди)',eng='York Street',opened='9 апреля 1936',r_key='York St F',c_key='F18'},
{segment='Jay',station='Джей-стрит — Метротек (линия Калвер, Ай-эн-ди)',acc='yes',eng='Jay Street–MetroTech',opened='1 февраля 1933',r_key='Jay St-MetroTech A C F R',r_ast=true,c_key='A41',
info='С 1933 года станция имела пересадку на снесённую ныне станцию [[Бридж-стрит — Джей-стрит (линия Мертл-авеню, Би-эм-ти)|Бридж-стрит — Джей-стрит]]<sup>[[[:en:Bridge–Jay Streets station|en]]]</sup>.'},
{segment='Culver North',station='Берген-стрит (линия Калвер, Ай-эн-ди)',type='o',sep='yes',eng='Bergen Street',opened='20 марта 1933',r_key='Bergen St F G',c_key='F20'},
{segment='Culver North',station='Карролл-стрит (линия Калвер, Ай-эн-ди)',type='o',eng='Carroll Street',opened='7 октября 1933',r_key='Carroll St F G',c_key='F21'},
{segment='Culver North',station='Смит-стрит — Девятая улица (линия Калвер, Ай-эн-ди)',type='o',eng='Smith–Ninth Streets',opened='7 октября 1933',r_key='Smith-9 Sts F G',c_key='F22'},
{segment='Culver North',station='Четвёртая авеню (линия Калвер, Ай-эн-ди)',type='o',eng='Fourth Avenue',opened='7 октября 1933',r_key='4 Av F G/9 St R',r_ast=true,c_key='F23'},
{segment='Culver North',station='Седьмая авеню (линия Калвер, Ай-эн-ди)',acc='yes',type='x',eng='Seventh Avenue',opened='7 октября 1933',r_key='7 Av F G',c_key='F24'},
{segment='Culver North',station='15-я улица — Проспект-парк (линия Калвер, Ай-эн-ди)',type='o',subtype='split',eng='15th Street–Prospect Park',opened='7 октября 1933',r_key='15 St-Prospect Park F G',c_key='F25'},
{segment='Culver North',station='Форт-Гамильтон-Паркуэй (линия Калвер, Ай-эн-ди)',type='o',subtype='under',eng='Fort Hamilton Parkway',opened='7 октября 1933',r_key='Fort Hamilton Pkwy F G',c_key='F26'},
{segment='Culver North',station='Черч-авеню (линия Калвер, Ай-эн-ди)',type='x',acc='yes',eng='Church Avenue',opened='7 октября 1933',
below_stub='+w',below_stub_text='Примыкал ныне снесённый челнок Калвера (см. ниже)',r_key='Church Av F G',c_key='F27'},
{segment='Culver Middle',station='Дитмас-авеню (линия Калвер, Ай-эн-ди)',type='o',eng='Ditmas Avenue',opened='16 июля 1919',r_key='Ditmas Av F',c_key='F29'},
{segment='Culver Middle',station='18-я авеню (линия Калвер, Ай-эн-ди)',type='x',eng='18th Avenue',opened='16 марта 1919',r_key='18 Av F',c_key='F30'},
{segment='Culver',station='Авеню Ай (линия Калвер, Ай-эн-ди)',type='o',eng='Avenue I',opened='16 марта 1919',r_key='Avenue I F',c_key='F31'},
{segment='Culver',station='Бей-Паркуэй (линия Калвер, Ай-эн-ди)',type='o',eng='Bay Parkway',opened='16 марта 1919',r_key='Bay Pkwy F',c_key='F32'},
{segment='Culver',station='Авеню Эн (линия Калвер, Ай-эн-ди)',type='o',eng='Avenue N',opened='16 марта 1919',r_key='Avenue N F',c_key='F33'},
{segment='Culver',station='Авеню Пи (линия Калвер, Ай-эн-ди)',type='o',eng='Avenue P',opened='16 марта 1919',r_key='Avenue P F',c_key='F34'},
{segment='Culver 1',station='Кингс-Хайвей (линия Калвер, Ай-эн-ди)',type='x',eng='Kings Highway',opened='19 марта 1919',r_key='Kings Hwy F',c_key='F35'},
{segment='Culver 2',station='Авеню Ю (линия Калвер, Ай-эн-ди)',type='o',eng='Avenue U',opened='10 мая 1919',r_key='Avenue U F',c_key='F36'},
{segment='Culver 2',station='Авеню Экс (линия Калвер, Ай-эн-ди)',type='o',eng='Avenue X',opened='10 мая 1919',r_key='Avenue X F',c_key='F38'},
{segment='Culver 2',station='Нептьюн-авеню (линия Калвер, Ай-эн-ди)',type='x',eng='Neptune Avenue',opened='1 мая 1920',r_key='Neptune Av F',c_key='F39'},
{segment='Culver 2',station='Уэст Восьмая улица — Нью-Йоркский аквариум (линия Калвер, Ай-эн-ди)',type='x',eng='West Eighth Street–New York Aquarium',opened='19 мая 1919',r_key='West 8 St-New York Aquarium F Q',c_key='D42'},
{segment='Culver 2',station='Кони-Айленд — Стилуэлл-авеню (линия Калвер, Ай-эн-ди)',type='x',acc='yes',north_back=true,eng='Coney Island–Stillwell Avenue',opened='19 мая 1919',r_key='Coney Island-Stillwell Av D F N Q',c_key='D43'},
{segment='Rock North',station='Акуидакт-Рейстрак (линия Рокавей, Ай-эн-ди)',acc='yes',note='↑',eng='Aqueduct Racetrack',opened='28 июня 1956',orig='1880',r_key='Aqueduct Racetrack A',c_key='H01'},
{segment='Rock North',station='Акуидакт — Норт-Кондуит-авеню (линия Рокавей, Ай-эн-ди)',eng='Aqueduct–North Conduit Avenue',opened='28 июня 1956',orig='1883',r_key='Aqueduct-North Conduit Av A',c_key='H02'},
{segment='Rock North',station='Хауард-Бич — Аэропорт имени Джона Кеннеди (линия Рокавей, Ай-эн-ди)',acc='yes',eng='Howard Beach–JFK Airport',opened='28 июня 1956',orig='1913',r_key='Howard Beach-JFK Airport A',conn='[[AirTrain JFK]]<sup>[[[:en:AirTrain JFK|en]]]</sup>',c_key='H03'},
{segment='BChan',station='Брод-Чаннел (линия Рокавей, Ай-эн-ди)',eng='Broad Channel',opened='28 июня 1956',orig='1880',r_key='Broad Channel A S',c_key='H04'},
{segment='Rock West',station='Бич 90-я улица (линия Рокавей, Ай-эн-ди)',eng='Beach 90th Street',opened='28 июня 1956',orig='1880',r_key='Beach 90 St A S',c_key='H12'},
{segment='Rock West',station='Бич 98-я улица (линия Рокавей, Ай-эн-ди)',eng='Beach 98th Street',opened='28 июня 1956',orig='1903',r_key='Beach 98 St A S',c_key='H13'},
{segment='Rock West',station='Бич 105-я улица (линия Рокавей, Ай-эн-ди)',eng='Beach 105th Street',opened='28 июня 1956',orig='1880',r_key='Beach 105 St A S',c_key='H14'},
{segment='Rock West',station='Рокавей-парк — Бич 116-я улица (линия Рокавей, Ай-эн-ди)',acc='yes',subtype='bumper',eng='Rockaway Park–Beach 116th Street',opened='28 июня 1956',orig='1882',r_key='Rockaway Park-Beach 116 St A S',c_key='H15'},
{segment='Fulton East',station='Грант-авеню (линия Фултон-стрит, Ай-эн-ди)',eng='Grant Avenue',old='-',opened='29 апреля 1956',
below_stub='+w',below_stub_text='Примыкала [[линия Фултон-стрит, Би-эм-ти]]',r_key='Grant Av A',c_key='A57'},
{segment='Fulton East',station='80-я улица (линия Фултон-стрит, Ай-эн-ди)',oldtype='o',eng='80th Street',
old='Хадсон-стрит — 80-я улица',oldeng='Hudson Street–80th Street',above='Бруклин<hr>Куинс',opened='25 сентября 1915',r_key='80 St A',c_key='A59'},
{segment='Fulton East',station='88-я улица (линия Фултон-стрит, Ай-эн-ди)',eng='88th Street',old='Бойд-авеню — 88-я улица',oldeng='Boyd Avenue–88th Street',opened='25 сентября 1915',r_key='88 St A',c_key='A60'},
{segment='Rock Blvd',station='Рокавей-бульвар (линия Фултон-стрит, Ай-эн-ди)',eng='Rockaway Boulevard',opened='25 сентября 1915',r_key='Rockaway Blvd A',c_key='A61'},
{segment='Fulton East Tip',station='104-я улица (линия Фултон-стрит, Ай-эн-ди)',type='o',eng='104th Street',old='Оксфорд-авеню — 104-я улица',oldeng='Oxford Avenue–104th Street',opened='25 сентября 1915',r_key='104 St A',c_key='A63'},
{segment='Fulton East Tip',station='111-я улица (линия Фултон-стрит, Ай-эн-ди)',type='o',eng='111th Street',old='Гринвуд-авеню — 111-я улица',oldeng='Greenwood Avenue–111th Street',opened='25 сентября 1915',r_key='111 St A',c_key='A64'},
{segment='Fulton East Tip',station='Озон-парк — Леффертс-бульвар (линия Фултон-стрит, Ай-эн-ди)',acc='yes',type='x',subtype='bumper',eng='Ozone Park–Lefferts Boulevard',old='Леффертс-авеню — 119-я улица',oldeng='Lefferts Avenue–119th Street',opened='25 сентября 1915',r_key='Ozone Park-Lefferts Blvd A',c_key='A65'},
{segment='Rock East',station='Бич 67-я улица (линия Рокавей, Ай-эн-ди)',acc='yes',eng='Beach 67th Street',opened='28 июня 1956',orig='1888',r_key='Beach 67 St-Arverne By The Sea A',c_key='H06'},
{segment='Rock East',station='Бич 60-я улица (линия Рокавей, Ай-эн-ди)',eng='Beach 60th Street',opened='28 июня 1956',orig='1892',r_key='Beach 60 St A',c_key='H07'},
{segment='Rock East',station='Бич 44-я улица (линия Рокавей, Ай-эн-ди)',eng='Beach 44th Street',opened='28 июня 1956',orig='1922',r_key='Beach 44 St A',c_key='H08'},
{segment='Rock East',station='Бич 36-я улица (линия Рокавей, Ай-эн-ди)',eng='Beach 36th Street',opened='28 июня 1956',orig='1885',r_key='Beach 36 St A',c_key='H09'},
{segment='Rock East',station='Бич 25-я улица (линия Рокавей, Ай-эн-ди)',eng='Beach 25th Street',opened='28 июня 1956',orig='1928',r_key='Beach 25 St A',c_key='H10'},
{segment='Rock East',station='Фар-Рокавей — Мотт-авеню (линия Рокавей, Ай-эн-ди)',acc='yes',subtype='bumper',eng='Far Rockaway–Mott Avenue',opened='16 января 1958',orig='1869',r_key='Far Rockaway-Mott Av A',conn='[[Фар-Рокавей (LIRR)]]<sup>[[[:en:Far Rockaway station (LIRR)|en]]]</sup>',c_key='H11'},
{segment='SB',station='Восьмая авеню (линия Си-Бич, Би-эм-ти)',type='o',acc='yes',eng='Eighth Avenue',opened='22 июня 1915',r_key='8 Av N',c_key='N02'},
{segment='SB',station='Форт-Гамильтон-Паркуэй (линия Си-Бич, Би-эм-ти)',type='o',eng='Fort Hamilton Parkway',opened='22 июня 1915',r_key='Fort Hamilton Pkwy N',c_key='N03'},
{segment='SB',station='Нью-Ютрект-авеню (линия Си-Бич, Би-эм-ти)',type='o',acc='yes',eng='New Utrecht Avenue',opened='22 июня 1915',r_key='New Utrecht Av N/62 St D',r_ast=true,c_key='N04'},
{segment='SB',station='18-я авеню (линия Си-Бич, Би-эм-ти)',type='o',eng='18th Avenue',opened='22 июня 1915',r_key='18 Av N',c_key='N05'},
{segment='SB',station='20-я авеню (линия Си-Бич, Би-эм-ти)',type='o',eng='20th Avenue',opened='22 июня 1915',r_key='20 Av N',c_key='N06'},
{segment='SB',station='Бей-Паркуэй (линия Си-Бич, Би-эм-ти)',type='o',eng='Bay Parkway',opened='22 июня 1915',r_key='Bay Pkwy N',c_key='N07'},
{segment='SB',station='Кингс-Хайвей (линия Си-Бич, Би-эм-ти)',type='o',eng='Kings Highway',opened='22 июня 1915',r_key='Kings Hwy N',c_key='N08'},
{segment='SB',station='Авеню Ю (линия Си-Бич, Би-эм-ти)',type='o',eng='Avenue U',opened='22 июня 1915',r_key='Avenue U N',c_key='N09'},
{segment='SB',station='86-я улица (линия Си-Бич, Би-эм-ти)',type='o',eng='86th Street',opened='23 августа 1915',r_key='86 St N',c_key='N10'},
{segment='SB South',station='Кони-Айленд — Стилуэлл-авеню (линия Си-Бич, Би-эм-ти)',type='x',acc='yes',eng='Coney Island–Stillwell Avenue',opened='19 мая 1919',r_key='Coney Island-Stillwell Av D F N Q',c_key='D43'},
{segment='Arch IND',station='Джамейка-Сентер — Парсонс — Арчер (линия Арчер-авеню, Ай-эн-ди)',acc='yes',eng='Jamaica Center–Parsons/Archer',opened='11 декабря 1988',r_key='Jamaica Center-Parsons-Archer E J Z',c_key='G05'},
{segment='Arch IND',station='Сатфин-бульвар — Арчер-авеню — Аэропорт имени Джона Кеннеди (линия Арчер-авеню, Ай-эн-ди)',acc='yes',eng='Sutphin Boulevard–Archer Avenue–JFK Airport',opened='11 декабря 1988',r_key='Sutphin Blvd-Archer Av-JFK Airport E J Z',conn='[[AirTrain JFK]]<sup>[[[:en:AirTrain JFK|en]]]</sup>, [[Джамейка (LIRR)]]<sup>[[[:en:Jamaica station|en]]]</sup>',br='Сатфин-бульвар — Арчер-авеню —<br>Аэропорт имени Джона Кеннеди',c_key='G06'},
{segment='Arch IND VW',station='Джамейка — Ван-Уайк (линия Арчер-авеню, Ай-эн-ди)',acc='yes',eng='Jamaica–Van Wyck',opened='11 декабря 1988',r_key='Jamaica-Van Wyck E',c_key='G07'},
{segment='QB East',station='Брайарвуд (линия Куинс-бульвара, Ай-эн-ди)',type='o',sep='yes',eng='Briarwood',opened='24 апреля 1937',r_key='Briarwood-Van Wyck Blvd E F',c_key='F05'},
{segment='QB East',station='Кью-Гарденс — Юнион-Тернпайк (линия Куинс-бульвара, Ай-эн-ди)',type='x',acc='yes',eng='Kew Gardens–Union Turnpike',opened='31 декабря 1936',r_key='Kew Gardens-Union Turnpike E F',c_key='F06'},
{segment='QB East',station='75-я авеню (линия Куинс-бульвара, Ай-эн-ди)',type='o',sep='yes',eng='75th Avenue',opened='31 декабря 1936',
below_stub='+w',below_stub_text='Примыкала [[Линия Всемирной выставки, Ай-эн-ди|линия Всемирной выставки]]',r_key='75 Av E F',c_key='F07'},
{segment='QB',station='Форест-Хилс — 71-я авеню (линия Куинс-бульвара, Ай-эн-ди)',type='x',acc='yes',eng='Forest Hills–71st Avenue',opened='31 декабря 1936',r_key='Forest Hills-71 Av E F M R',c_key='G08'},
{segment='QB',station='67-я авеню (линия Куинс-бульвара, Ай-эн-ди)',type='o',eng='67th Avenue',opened='31 декабря 1936',r_key='67 Av M R',c_key='G09'},
{segment='QB',station='63-я драйв — Риго-парк (линия Куинс-бульвара, Ай-эн-ди)',type='o',eng='63rd Drive–Rego Park',opened='31 декабря 1936',r_key='63 Dr-Rego Park M R',c_key='G10'},
{segment='QB',station='Вудхейвен-бульвар (линия Куинс-бульвара, Ай-эн-ди)',type='o',eng='Woodhaven Boulevard',opened='31 декабря 1936',r_key='Woodhaven Blvd M R',c_key='G11'},
{segment='QB',station='Гранд-авеню — Ньютаун (линия Куинс-бульвара, Ай-эн-ди)',type='o',eng='Grand Avenue–Newtown',opened='31 декабря 1936',r_key='Grand Av-Newtown M R',c_key='G12'},
{segment='QB',station='Элмхерст-авеню (линия Куинс-бульвара, Ай-эн-ди)',type='o',eng='Elmhurst Avenue',opened='31 декабря 1936',r_key='Elmhurst Av M R',c_key='G13'},
{segment='QB',station='Джексон-Хайтс — Рузвельт-авеню (линия Куинс-бульвара, Ай-эн-ди)',type='x',acc='yes',eng='Jackson Heights–Roosevelt Avenue',opened='19 августа 1933',r_key='74-Broadway 7/Jackson Hts-Roosevelt Av E F M R',r_ast=true,c_key='G14'},
{segment='QB',station='65-я улица (линия Куинс-бульвара, Ай-эн-ди)',type='o',eng='65th Street',opened='19 августа 1933',r_key='65 St M R',c_key='G15'},
{segment='QB',station='Нортерн-бульвар (линия Куинс-бульвара, Ай-эн-ди)',type='o',subtype='under',sep='yes',eng='Northern Boulevard',opened='19 августа 1933',r_key='Northern Blvd M R',c_key='G16'},
{segment='QB',station='46-я улица (линия Куинс-бульвара, Ай-эн-ди)',type='o',subtype='split',sep='yes',eng='46th Street',opened='19 августа 1933',r_key='46 St M R',c_key='G18'},
{segment='QB',station='Стайнуэй-стрит (линия Куинс-бульвара, Ай-эн-ди)',type='o',subtype='split',eng='Steinway Street',opened='19 августа 1933',r_key='Steinway St M R',c_key='G19'},
{segment='QB',station='36-я улица (линия Куинс-бульвара, Ай-эн-ди)',type='o',sep='yes',eng='36th Street',opened='19 августа 1933',r_key='36 St M R',c_key='G20'},
{segment='QP',station='Куинс-Плаза (линия Куинс-бульвара, Ай-эн-ди)',type='x',subtype='suppress',acc='yes',eng='Queens Plaza',opened='19 августа 1933',r_key='Queens Plaza E M R',c_key='G21'},
{segment='Arch BMT',station='Джамейка-Сентер — Парсонс — Арчер (линия Арчер-авеню, Би-эм-ти)',acc='yes',eng='Jamaica Center–Parsons/Archer',opened='11 декабря 1988',r_key='Jamaica Center-Parsons-Archer E J Z',c_key='G05'},
{segment='Arch BMT',station='Сатфин-бульвар — Арчер-авеню — Аэропорт имени Джона Кеннеди (линия Арчер-авеню, Би-эм-ти)',acc='yes',eng='Sutphin Boulevard–Archer Avenue–JFK Airport',opened='11 декабря 1988',r_key='Sutphin Blvd-Archer Av-JFK Airport E J Z',conn='[[AirTrain JFK]]<sup>[[[:en:AirTrain JFK|en]]]</sup>, [[Джамейка (LIRR)]]<sup>[[[:en:Jamaica station|en]]]</sup>',br='Сатфин-бульвар — Арчер-авеню —<br>Аэропорт имени Джона Кеннеди',c_key='G06'},
{segment='Jam East',station='121-я улица (линия Джамейка, Би-эм-ти)',type='Z',eng='121st Street',old='-',opened='3 июля 1918',r_key='121 St J Z',c_key='J12'},
{segment='Jam East',station='111-я улица (линия Джамейка, Би-эм-ти)',type='J',eng='111th Street',old='-',opened='11 июня 1917',r_key='111 St J',c_key='J13'},
{segment='Jam East',station='104-я улица (линия Джамейка, Би-эм-ти)',type='Z',eng='104th Street',old='-',opened='11 июня 1917',r_key='104 St J Z',c_key='J14'},
{segment='Jam East',station='Вудхейвен-бульвар (линия Джамейка, Би-эм-ти)',type='x',subtype='suppress',eng='Woodhaven Boulevard',old='-',opened='11 июня 1917',r_key='Woodhaven Blvd J Z',c_key='J15'},
{segment='Jam East',station='85-я улица — Форест-Паркуэй (линия Джамейка, Би-эм-ти)',type='J',eng='85th Street–Forest Parkway',old='-',opened='11 июня 1917',r_key='85 St-Forest Pkwy J',c_key='J16'},
{segment='Jam East',station='75-я улица — Элдертс-Лейн (линия Джамейка, Би-эм-ти)',type='Z',eng='75th Street–Elderts Lane',old='-',below='Куинс<hr>Бруклин',opened='11 июня 1917',r_key='75 St-Elderts Ln J Z',c_key='J17'},
{segment='Jam East',station='Сайпресс-Хилс (линия Джамейка, Би-эм-ти)',type='J',eng='Cypress Hills',opened='30 мая 1893',r_key='Cypress Hills J',c_key='J19'},
{segment='Jam East',station='Кресент-стрит (линия Джамейка, Би-эм-ти)',type='x',subtype='suppress',eng='Crescent Street',opened='30 мая 1893',r_key='Crescent St J Z',c_key='J20'},
{segment='Jam East',station='Норвуд-авеню (линия Джамейка, Би-эм-ти)',type='Z',eng='Norwood Avenue',opened='30 мая 1893',r_key='Norwood Av J Z',c_key='J21'},
{segment='Jam East',station='Кливленд-стрит (линия Джамейка, Би-эм-ти)',type='J',eng='Cleveland Street',opened='30 мая 1893',r_key='Cleveland St J',c_key='J22'},
{segment='Jam East',station='Ван-Сиклен-авеню (линия Джамейка, Би-эм-ти)',type='Z',eng='Van Siclen Avenue',opened='3 декабря 1885',r_key='Van Siclen Av J Z',c_key='J23'},
{segment='Jam East',station='Алабама-авеню (линия Джамейка, Би-эм-ти)',type='x',subtype='suppress',eng='Alabama Avenue',opened='5 сентября 1885',r_key='Alabama Av J',c_key='J24'},
{segment='Jam BJ',station='Бродвей-Джанкшен (линия Джамейка, Би-эм-ти)',type='x',subtype='suppress',north_back=true,eng='Broadway Junction',old='Истерн-Паркуэй',oldeng='Eastern Parkway',opened='14 июня 1885',r_key='Broadway Junction A C J L Z',r_ast=true,c_key='J27',
transfer='была пересадка на станцию [[Бродвей-Джанкшен (линия Канарси, Би-эм-ти)|Бродвей-Джанкшен]]<br>(действующая и сегодня) и на снесённую ныне<br>станцию [[Манхэттен-Джанкшен (линия Фултон-стрит, Би-эм-ти)|Манхэттен-Джанкшен]]<sup>[[[:en:Manhattan Junction (BMT Fulton Street Line)|en]]]</sup>',
info='Станция имела пересадку на снесённую ныне станцию [[Манхэттен-Джанкшен (линия Фултон-стрит, Би-эм-ти)|Манхэттен-Джанкшен]]<sup>[[[:en:Manhattan Junction (BMT Fulton Street Line)|en]]]</sup>.'},
{segment='Jam',station='Чонси-стрит (линия Джамейка, Би-эм-ти)',type='Z',oldtype='o',eng='Chauncey Street',opened='18 июля 1885',r_key='Chauncey St J Z',c_key='J28'},
{segment='Jam',station='Холси-стрит (линия Джамейка, Би-эм-ти)',type='J',oldtype='o',eng='Halsey Street',opened='19 августа 1885',r_key='Halsey St J',c_key='J29'},
{segment='Jam',station='Гейтс-авеню (линия Джамейка, Би-эм-ти)',type='Z',oldtype='o',eng='Gates Avenue',opened='13 мая 1885',
below_stub='-e',below_stub_text='Ответвлялась [[линия Лексингтон-авеню, Би-эм-ти]]',r_key='Gates Av J Z',c_key='J30'},
{segment='Jam',station='Косцюшко-стрит (линия Джамейка, Би-эм-ти)',type='J',oldtype='o',eng='Kosciuszko Street',old='-',opened='22 июня 1888',r_key='Kosciuszko St J',c_key='J31'},
{segment='QB West',station='Корт-сквер — 23-я улица (линия Куинс-бульвара, Ай-эн-ди)',acc='s',eng='Court Square–23rd Street',opened='28 августа 1939',below='Куинс<hr>Тоннель 53-й улицы<hr>Манхэттен',r_key='Court Sq E G M 7',r_ast=true,c_key='F09'},
{segment='QB West',station='Лексингтон-авеню — 53-я улица (линия Куинс-бульвара, Ай-эн-ди)',acc='yes',eng='Lexington Avenue–53rd Street',opened='19 августа 1933',r_key='Lexington Av-53 St E M/51 St 6',r_ast=true,c_key='F11'},
{segment='QB West',station='Пятая авеню — 53-я улица (линия Куинс-бульвара, Ай-эн-ди)',eng='Fifth Avenue/53rd Street',opened='19 августа 1933',r_key='5 Av-53 St E M',c_key='F12'},
{segment='Bway 49',station='49-я улица (линия Бродвея, Би-эм-ти)',type='o',acc='n',sep='yes',eng='49th Street',opened='10 июля 1919',r_key='49 St N R W',c_key='R15'},
{segment='Bway',station='Таймс-сквер — 42-я улица (линия Бродвея, Би-эм-ти)',type='x',acc='yes',eng='Times Square–42nd Street',opened='5 января 1918',r_key='Times Sq-42 St N Q R W S 1 2 3 7/42 St A C E',r_ast=true,conn='[[автовокзал Портового управления]]<sup>[[[:en:Port Authority Bus Terminal|en]]]</sup>',c_key='R16'},
{segment='Bway',station='34-я улица — Геральд-сквер (линия Бродвея, Би-эм-ти)',type='x',acc='yes',eng='34th Street–Herald Square',opened='5 января 1918',r_key='34 St-Herald Sq B D F M N Q R W',r_ast=true,conn='[[33-я улица (PATH)]]<sup>[[[:en:33rd Street station (PATH)|en]]]</sup>',c_key='R17'},
{segment='Bway',station='28-я улица (линия Бродвея, Би-эм-ти)',type='o',sep='yes',eng='28th Street',opened='5 января 1918',r_key='28 St R W',c_key='R18'},
{segment='Bway',station='23-я улица (линия Бродвея, Би-эм-ти)',type='o',sep='yes',eng='23rd Street',opened='5 января 1918',r_key='23 St R W',c_key='R19'},
{segment='Bway',station='14-я улица — Юнион-сквер (линия Бродвея, Би-эм-ти)',type='x',acc='yes',eng='14th Street–Union Square',opened='4 сентября 1917',r_key='14 St-Union Sq L N Q R W 4 5 6',r_ast=true,c_key='R20'},
{segment='Bway',station='Восьмая улица — Нью-Йоркский университет (линия Бродвея, Би-эм-ти)',type='o',sep='yes',eng='Eighth Street–New York University',opened='4 сентября 1917',r_key='8 St-New York University R W',c_key='R21'},
{segment='Bway',station='Принс-стрит (линия Бродвея, Би-эм-ти)',type='o',sep='yes',eng='Prince Street',opened='4 сентября 1917',r_key='Prince St R W',c_key='R22'},
{segment='Myrtle',station='Мидл-Виллидж — Метрополитан-авеню (линия Мертл-авеню, Би-эм-ти)',acc='yes',subtype='bumper',eng='Middle Village–Metropolitan Avenue',opened='9 августа 1915',r_key='Middle Village-Metropolitan Av M',c_key='M01'},
{segment='Myrtle',station='Фреш-Понд-роуд (линия Мертл-авеню, Би-эм-ти)',eng='Fresh Pond Road',opened='9 августа 1915',r_key='Fresh Pond Rd M',c_key='M04'},
{segment='Myrtle',station='Форест-авеню (линия Мертл-авеню, Би-эм-ти)',eng='Forest Avenue',opened='9 августа 1915',r_key='Forest Av M',c_key='M05'},
{segment='Myrtle',station='Сенека-авеню (линия Мертл-авеню, Би-эм-ти)',eng='Seneca Avenue',below='Куинс<hr>Бруклин',opened='9 августа 1915',r_key='Seneca Av M',c_key='M06'},
{segment='Myrtle',station='Мертл-авеню — Уайкофф-авеню (линия Мертл-авеню, Би-эм-ти)',acc='yes',eng='Myrtle–Wyckoff Avenues',opened='19 декабря 1889',r_key='Myrtle-Wyckoff Avs L M',r_ast=true,c_key='M08'},
{segment='Myrtle',station='Никкербоккер-авеню (линия Мертл-авеню, Би-эм-ти)',eng='Knickerbocker Avenue',opened='19 декабря 1889',r_key='Knickerbocker Av M',c_key='M09'},
{segment='Myrtle',station='Сентрал-авеню (линия Мертл-авеню, Би-эм-ти)',eng='Central Avenue',opened='19 декабря 1889',r_key='Central Av M',c_key='M10'},
{segment='Myrtle Av',station='Мертл-авеню (линия Джамейка, Би-эм-ти)',type='x',subtype='bidi',eng='Myrtle Avenue',opened='25 июня 1888',r_key='Myrtle Av J M Z',c_key='M11',
info='Верхний уровень станции, закрытый ныне, был станцией «Бродвей» на продолжении [[Линия Мертл-авеню, Би-эм-ти|линии Мертл-авеню]] на юг.'},
{segment='Jam West',station='Флашинг-авеню (линия Джамейка, Би-эм-ти)',type='o',acc='yes',eng='Flushing Avenue',opened='25 июня 1888',r_key='Flushing Av J M',c_key='M12'},
{segment='Jam West',station='Лоример-стрит (линия Джамейка, Би-эм-ти)',type='o',eng='Lorimer Street',opened='25 июня 1888',r_key='Lorimer St J M',c_key='M13'},
{segment='Jam West',station='Хьюс-стрит (линия Джамейка, Би-эм-ти)',type='o',eng='Hewes Street',opened='25 июня 1888',r_key='Hewes St J M',c_key='M14'},
{segment='Jam West',station='Марси-авеню (линия Джамейка, Би-эм-ти)',type='x',subtype='suppress',acc='yes',sep='yes',eng='Marcy Avenue',opened='25 июня 1888',r_key='Marcy Av J M Z',c_key='M16'},
{segment='Essex',station='Эссекс-стрит (линия Нассо-стрит, Би-эм-ти)',north_back=true,eng='Essex Street',opened='16 сентября 1908',above='Бруклин<hr>[[Вильямсбургский мост]]<hr>Манхэттен',r_key='Delancey St F/Essex St J M Z',r_ast=true,c_key='M18'},
{segment='Nassau',station='Бауэри (линия Нассо-стрит, Би-эм-ти)',eng='Bowery',opened='4 августа 1913',r_key='Bowery J Z',c_key='M19'},
{segment='Nassau',station='Канал-стрит (линия Нассо-стрит, Би-эм-ти)',eng='Canal Street',opened='4 августа 1913',r_key='Canal St J N Q R W Z 6',r_ast=true,c_key='M20'},
{segment='Nassau',station='Чеймберс-стрит (линия Нассо-стрит, Би-эм-ти)',acc='yes',eng='Chambers Street',opened='4 августа 1913',
above_stub='+e',above_stub_text='Присоединялись пути от [[Манхэттенский мост|Манхэттенского моста]]',r_key='Brooklyn Bridge-City Hall 4 5 6/Chambers St J Z',r_ast=true,c_key='M21'},
{segment='Nassau',station='Фултон-стрит (линия Нассо-стрит, Би-эм-ти)',acc='yes',eng='Fulton Street',opened='30 мая 1931',r_key='Fulton St A C J Z 2 3 4 5',r_ast=true,conn='[[Всемирный торговый центр (PATH)]]<sup>[[[:en:World Trade Center station (PATH)|en]]]</sup>',c_key='M22'},
{segment='Nassau',station='Брод-стрит (линия Нассо-стрит, Би-эм-ти)',eng='Broad Street',opened='30 мая 1931',r_key='Broad St J Z',c_key='M23'},
{segment='Canal Bridge',station='Канал-стрит (линия Бродвея, Би-эм-ти, через мост)',eng='Canal Street',opened='4 сентября 1917',r_key='Canal St J N Q R W Z 6',r_ast=true,c_key='Q01'},
{segment='Bway South',station='Канал-стрит (линия Бродвея, Би-эм-ти, через тоннель)',eng='Canal Street',opened='5 января 1918',r_key='Canal St J N Q R W Z 6',r_ast=true,c_key='R23'},
{segment='Bway South',station='Сити-холл (линия Бродвея, Би-эм-ти)',eng='City Hall',opened='5 января 1918',r_key='City Hall R W',c_key='R24'},
{segment='Bway South',station='Кортландт-стрит (линия Бродвея, Би-эм-ти)',acc='yes',sep='yes',eng='Cortlandt Street',opened='5 января 1918',r_key='Chambers St A C/WTC E/Park Pl 2 3/Cortlandt R W',conn='[[Всемирный торговый центр (PATH)]]<sup>[[[:en:World Trade Center station (PATH)|en]]]</sup>',r_ast=true,c_key='R25'},
{segment='Bway South',station='Ректор-стрит (линия Бродвея, Би-эм-ти)',sep='yes',eng='Rector Street',opened='5 января 1918',r_key='Rector St R W',c_key='R26'},
{segment='Whall',station='Уайтхолл-стрит — Саут-Ферри (линия Бродвея, Би-эм-ти)',type='x',subtype='tt',eng='Whitehall Street–South Ferry',opened='20 сентября 1918',r_key='South Ferry 1/Whitehall St R W',r_ast=true,conn='[[Уайтхолл (паромный терминал)|терминал Уайтхолл]]<sup>[[[:en:Staten Island Ferry Whitehall Terminal|en]]]</sup> ([[Статен-Айленд Ферри]])',c_key='R27'},
{segment='Fourth North Tip',station='Корт-стрит (линия Четвёртой авеню, Би-эм-ти)',eng='Court Street',opened='11 марта 1920',above='Манхэттен<hr>Тоннель Монтегю-стрит<hr>Бруклин',r_key='Court St R/Borough Hall 2 3 4 5',r_ast=true,c_key='R28'},
{segment='Fourth North Tip',station='Джей-стрит — Метротек (линия Четвёртой авеню, Би-эм-ти)',acc='yes',eng='Jay Street–MetroTech',opened='11 марта 1920',r_key='Jay St-MetroTech A C F R',r_ast=true,c_key='R29'},
{segment='Brigh DK',station='Декалб-авеню (линия Брайтон, Би-эм-ти)',other_type='o',acc='yes',eng='DeKalb Avenue',opened='19 июня 1915',r_key='DeKalb Av B Q R',c_key='R30'},
{segment='Brigh North',station='Атлантик-авеню — Барклайс-центр (линия Брайтон, Би-эм-ти)',acc='yes',eng='Atlantic Avenue–Barclays Center',opened='1 августа 1920',r_key='Atlantic Av-Barclays Ctr B D N Q R 2 3 4 5',r_ast=true,conn='[[Атлантик (вокзал)|вокзал Атлантик]]<sup>[[[:en:Atlantic Terminal|en]]]</sup>',c_key='D24',
info='Станция имела пересадку на снесённую ныне станцию [[Атлантик-авеню (линия Пятой авеню, Би-эм-ти)|Атлантик-авеню]]<sup>[[[:en:Atlantic Avenue (BMT Fifth Avenue Line)|en]]]</sup>.'},
{segment='Brigh North',station='Седьмая авеню (линия Брайтон, Би-эм-ти)',eng='Seventh Avenue',opened='1 августа 1920',r_key='7 Av B Q',c_key='D25'},
{segment='Fourth DK',station='Декалб-авеню (линия Четвёртой авеню, Би-эм-ти)',type='o',acc='yes',eng='DeKalb Avenue',opened='19 июня 1915',r_key='DeKalb Av B Q R',c_key='R30'},
{segment='Fourth North',station='Атлантик-авеню — Барклайс-центр (линия Четвёртой авеню, Би-эм-ти)',type='x',acc='yes',eng='Atlantic Avenue–Barclays Center',opened='13 сентября 1915',r_key='Atlantic Av-Barclays Ctr B D N Q R 2 3 4 5',r_ast=true,conn='[[Атлантик (вокзал)|вокзал Атлантик]]<sup>[[[:en:Atlantic Terminal|en]]]</sup>',c_key='R31',
info='Станция имела пересадку на снесённую ныне станцию [[Атлантик-авеню (линия Пятой авеню, Би-эм-ти)|Атлантик-авеню]]<sup>[[[:en:Atlantic Avenue (BMT Fifth Avenue Line)|en]]]</sup>.'},
{segment='Fourth North',station='Юнион-стрит (линия Четвёртой авеню, Би-эм-ти)',type='o',sep='yes',eng='Union Street',opened='13 сентября 1915',r_key='Union St R',c_key='R32'},
{segment='Fourth North',station='Девятая улица (линия Четвёртой авеню, Би-эм-ти)',type='o',eng='Ninth Street',opened='13 сентября 1915',r_key='4 Av F G/9 St R',r_ast=true,c_key='R33'},
{segment='Fourth North',station='Проспект-авеню (линия Четвёртой авеню, Би-эм-ти)',type='o',sep='yes',eng='Prospect Avenue',opened='13 сентября 1915',r_key='Prospect Av R',c_key='R34'},
{segment='Fourth North',station='25-я улица (линия Четвёртой авеню, Би-эм-ти)',type='o',sep='yes',eng='25th Street',opened='13 сентября 1915',r_key='25 St R',c_key='R35'},
{segment='Fourth North',station='36-я улица (линия Четвёртой авеню, Би-эм-ти)',type='x',eng='36th Street',opened='13 сентября 1915',r_key='36 St D N R',c_key='R36'},
{segment='Fourth',station='45-я улица (линия Четвёртой авеню, Би-эм-ти)',type='o',eng='45th Street',opened='13 сентября 1915',r_key='45 St R',c_key='R39'},
{segment='Fourth',station='53-я улица (линия Четвёртой авеню, Би-эм-ти)',type='o',eng='53rd Street',opened='13 сентября 1915',r_key='53 St R',c_key='R40'},
{segment='Fourth',station='59-я улица (линия Четвёртой авеню, Би-эм-ти)',type='x',acc='yes',eng='59th Street',opened='13 сентября 1915',r_key='59 St N R',c_key='R41'},
{segment='Fourth South',station='Бей-Ридж-авеню (линия Четвёртой авеню, Би-эм-ти)',eng='Bay Ridge Avenue',opened='13 сентября 1915',r_key='Bay Ridge Av R',c_key='R42'},
{segment='Fourth South',station='77-я улица (линия Четвёртой авеню, Би-эм-ти)',eng='77th Street',opened='14 апреля 1916',r_key='77 St R',c_key='R43'},
{segment='Fourth South',station='86-я улица (линия Четвёртой авеню, Би-эм-ти)',acc='yes',eng='86th Street',opened='14 апреля 1916',r_key='86 St R',c_key='R44'},
{segment='Fourth South',station='Бей-Ридж — 95-я улица (линия Четвёртой авеню, Би-эм-ти)',subtype='bumper',eng='Bay Ridge–95th Street',opened='27 октября 1925',r_key='Bay Ridge-95 St R',c_key='R45'},
{segment='Franklin',station='Франклин-авеню (линия Франклин-авеню, Би-эм-ти)',acc='yes',eng='Franklin Avenue',opened='15 августа 1896',oldlink='Франклин-авеню (линия Фултон-стрит, Би-эм-ти)',
below_stub='-e',below_stub_text='Ответвлялась [[линия Фултон-стрит, Би-эм-ти]]',below_key_noreincarn='Dean',r_key='Franklin Av C S',r_ast=true,c_key='S01',
transfer='станция имела перпендикулярные платформы<br>для эстакадной линии Фултон-стрит<br>и для [[линия Брайтон, Би-эм-ти|линии Брайтон]]<br>(ныне эта её часть относится к [[линия Франклин-авеню, Би-эм-ти|линии Франклин-авеню]])',
info='Станция имела перпендикулярные платформы для [[Линия Фултон-стрит, Би-эм-ти|эстакадной линии Фултон-стрит]] и для [[линия Брайтон, Би-эм-ти|линии Брайтон]] (ныне эта её часть относится к [[линия Франклин-авеню, Би-эм-ти|линии Франклин-авеню]]).'},
{segment='Franklin',station='Парк-Плейс (линия Франклин-авеню, Би-эм-ти)',acc='yes',eng='Park Place',old='-',opened='19 июня 1899',r_key='Park Pl S',c_key='S03'},
{segment='Franklin',station='Ботанический сад (линия Франклин-авеню, Би-эм-ти)',eng='Botanic Garden',old='-',opened='19 июня 1899',r_key='Franklin Av 2 3 4 5/Botanic Garden S',r_ast=true,c_key='S04',
info='Станция была перемещена севернее в 1928 году.'},
{segment='Franklin',station='Проспект-парк (линия Франклин-авеню, Би-эм-ти)',acc='yes',eng='Prospect Park',old='-',opened='2 июля 1878',r_key='Prospect Park B Q S',c_key='D26'},
{segment='PP',station='Проспект-парк (линия Брайтон, Би-эм-ти)',acc='yes',eng='Prospect Park',opened='2 июля 1878',r_key='Prospect Park B Q S',c_key='D26'},
{segment='Brigh',station='Парксайд-авеню (линия Брайтон, Би-эм-ти)',type='o',eng='Parkside Avenue',opened='4 апреля 1905',r_key='Parkside Av Q',c_key='D27'},
{segment='Brigh',station='Черч-авеню (линия Брайтон, Би-эм-ти)',type='x',eng='Church Avenue',opened='2 июля 1878',r_key='Church Av B Q',c_key='D28'},
{segment='Brigh',station='Беверлей-роуд (линия Брайтон, Би-эм-ти)',type='o',eng='Beverley Road',opened='1900',r_key='Beverley Rd Q',c_key='D29'},
{segment='Brigh',station='Кортелью-роуд (линия Брайтон, Би-эм-ти)',type='o',eng='Cortelyou Road',opened='23 августа 1907',r_key='Cortelyou Rd Q',c_key='D30'},
{segment='Brigh',station='Ньюкерк-Плаза (линия Брайтон, Би-эм-ти)',type='x',eng='Newkirk Plaza',opened='23 августа 1907',r_key='Newkirk Plaza B Q',c_key='D31'},
{segment='Brigh',station='Авеню Эйч (линия Брайтон, Би-эм-ти)',type='o',acc='yes',eng='Avenue H',opened='23 августа 1907',r_key='Avenue H Q',c_key='D32'},
{segment='Brigh',station='Авеню Джей (линия Брайтон, Би-эм-ти)',type='o',eng='Avenue J',opened='23 августа 1907',r_key='Avenue J Q',c_key='D33'},
{segment='Brigh',station='Авеню Эм (линия Брайтон, Би-эм-ти)',type='o',eng='Avenue M',opened='23 августа 1907',r_key='Avenue M Q',c_key='D34'},
{segment='Brigh',station='Кингс-Хайвей (линия Брайтон, Би-эм-ти)',type='x',acc='yes',eng='Kings Highway',opened='23 августа 1907',r_key='Kings Hwy B Q',c_key='D35'},
{segment='Brigh',station='Авеню Ю (линия Брайтон, Би-эм-ти)',type='o',eng='Avenue U',opened='23 августа 1907',r_key='Avenue U Q',c_key='D37'},
{segment='Brigh',station='Нек-роуд (линия Брайтон, Би-эм-ти)',type='o',eng='Neck Road',opened='23 августа 1907',r_key='Neck Rd Q',c_key='D38'},
{segment='Brigh',station='Шипсхед-Бей (линия Брайтон, Би-эм-ти)',type='x',eng='Sheepshead Bay',opened='23 августа 1907',r_key='Sheepshead Bay B Q',c_key='D39'},
{segment='Brigh',station='Брайтон-Бич (линия Брайтон, Би-эм-ти)',type='x',eng='Brighton Beach',opened='2 июля 1878',r_key='Brighton Beach B Q',c_key='D40'},
{segment='Brigh South',station='Ошен-Паркуэй (линия Брайтон, Би-эм-ти)',eng='Ocean Parkway',opened='22 апреля 1917',r_key='Ocean Pkwy Q',c_key='D41'},
{segment='Brigh South',station='Уэст Восьмая улица — Нью-Йоркский аквариум (линия Брайтон, Би-эм-ти)',eng='West Eighth Street–New York Aquarium',opened='19 мая 1919',r_key='West 8 St-New York Aquarium F Q',c_key='D42'},
{segment='Brigh South',station='Кони-Айленд — Стилуэлл-авеню (линия Брайтон, Би-эм-ти)',acc='yes',north_back=true,eng='Coney Island–Stillwell Avenue',opened='19 мая 1919',r_key='Coney Island-Stillwell Av D F N Q',c_key='D43'},
{segment='WE',station='Девятая авеню (линия Уэст-Энд, Би-эм-ти)',type='x',eng='Ninth Avenue',opened='24 июня 1916',
above_stub='+e',above_stub_text='Примыкала [[линия Пятой авеню, Би-эм-ти]]',below_stub='-e',below_stub_text='Ответвлялась [[линия Калвер, Би-эм-ти]]',oldlink='Девятая авеню (линия Калвер, Би-эм-ти)',r_key='9 Av D',c_key='B12',
transfer='верхний уровень станции обслуживал<br>существующую ныне [[Линия Уэст-Энд, Би-эм-ти|линию Уэст-Энд]],<br>а закрытый ныне нижний — линию Калвер',
info='Нижний уровень станции, закрытый ныне, обслуживал [[Линия Калвер, Би-эм-ти|линию Калвер]].'},
{segment='WE',station='Форт-Гамильтон-Паркуэй (линия Уэст-Энд, Би-эм-ти)',type='o',eng='Fort Hamilton Parkway',old='-',opened='24 июня 1916',r_key='Fort Hamilton Pkwy D',c_key='B13'},
{segment='WE',station='50-я улица (линия Уэст-Энд, Би-эм-ти)',type='o',eng='50th Street',old='-',opened='24 июня 1916',r_key='50 St D',c_key='B14'},
{segment='WE',station='55-я улица (линия Уэст-Энд, Би-эм-ти)',type='o',eng='55th Street',old='-',opened='24 июня 1916',r_key='55 St D',c_key='B15'},
{segment='WE',station='62-я улица (линия Уэст-Энд, Би-эм-ти)',type='x',acc='yes',eng='62nd Street',old='-',opened='24 июня 1916',r_key='New Utrecht Av N/62 St D',r_ast=true,c_key='B16'},
{segment='WE',station='71-я улица (линия Уэст-Энд, Би-эм-ти)',type='o',eng='71st Street',old='-',opened='24 июня 1916',r_key='71 St D',c_key='B17'},
{segment='WE',station='79-я улица (линия Уэст-Энд, Би-эм-ти)',type='o',eng='79th Street',old='-',opened='24 июня 1916',r_key='79 St D',c_key='B18'},
{segment='WE',station='18-я авеню (линия Уэст-Энд, Би-эм-ти)',type='o',eng='18th Avenue',old='-',opened='24 июня 1916',r_key='18 Av D',c_key='B19'},
{segment='WE',station='20-я авеню (линия Уэст-Энд, Би-эм-ти)',type='o',eng='20th Avenue',old='-',opened='29 июля 1916',r_key='20 Av D',c_key='B20'},
{segment='WE',station='Бей-Паркуэй (линия Уэст-Энд, Би-эм-ти)',type='x',acc='yes',eng='Bay Parkway',old='-',opened='29 июля 1916',r_key='Bay Pkwy D',c_key='B21'},
{segment='WE',station='25-я авеню (линия Уэст-Энд, Би-эм-ти)',type='o',eng='25th Avenue',old='-',opened='29 июля 1916',r_key='25 Av D',c_key='B22'},
{segment='WE',station='Бей 50-я улица (линия Уэст-Энд, Би-эм-ти)',type='o',eng='Bay 50th Street',old='-',opened='21 декабря 1917',r_key='Bay 50 St D',c_key='B23'},
{segment='WE',station='Кони-Айленд — Стилуэлл-авеню (линия Уэст-Энд, Би-эм-ти)',type='x',acc='yes',eng='Coney Island–Stillwell Avenue',old='-',opened='19 мая 1919',r_key='Coney Island-Stillwell Av D F N Q',c_key='D43'},
{segment='14',station='Восьмая авеню (линия Канарси, Би-эм-ти)',acc='yes',subtype='bumper',eng='Eighth Avenue',opened='30 мая 1931',r_key='14 St A C E/8 Av L',r_ast=true,c_key='L01'},
{segment='14',station='Шестая авеню (линия Канарси, Би-эм-ти)',eng='Sixth Avenue',opened='21 сентября 1924',r_key='14 St F M 1 2 3/6 Av L',r_ast=true,conn='[[14-я улица (PATH)]]<sup>[[[:en:14th Street station (PATH)|en]]]</sup>',c_key='L02'},
{segment='14',station='Юнион-сквер (линия Канарси, Би-эм-ти)',acc='yes',eng='Union Square',opened='21 сентября 1924',r_key='14 St-Union Sq L N Q R W 4 5 6',r_ast=true,c_key='L03'},
{segment='14',station='Третья авеню (линия Канарси, Би-эм-ти)',sep='yes',eng='Third Avenue',opened='21 сентября 1924',r_key='3 Av L',c_key='L05'},
{segment='14',station='Первая авеню (линия Канарси, Би-эм-ти)',sep='yes',acc='yes',eng='First Avenue',opened='21 сентября 1924',below='Манхэттен<hr>Тоннель 14-й улицы<hr>Бруклин',r_key='1 Av L',c_key='L06'},
{segment='Canar',station='Бедфорд-авеню (линия Канарси, Би-эм-ти)',acc='yes',eng='Bedford Avenue',opened='21 сентября 1924',r_key='Bedford Av L',c_key='L08'},
{segment='Canar',station='Лоример-стрит (линия Канарси, Би-эм-ти)',eng='Lorimer Street',opened='21 сентября 1924',r_key='Lorimer St L/Metropolitan Av G',r_ast=true,c_key='L10'},
{segment='Canar',station='Грейам-авеню (линия Канарси, Би-эм-ти)',sep='yes',eng='Graham Avenue',opened='21 сентября 1924',r_key='Graham Av L',c_key='L11'},
{segment='Canar',station='Гранд-стрит (линия Канарси, Би-эм-ти)',sep='yes',acc='yes',eng='Grand Street',opened='21 сентября 1924',r_key='Grand St L',c_key='L12'},
{segment='Canar',station='Монтроз-авеню (линия Канарси, Би-эм-ти)',eng='Montrose Avenue',opened='21 сентября 1924',r_key='Montrose Av L',c_key='L13'},
{segment='Canar',station='Морган-авеню (линия Канарси, Би-эм-ти)',eng='Morgan Avenue',opened='14 декабря 1928',r_key='Morgan Av L',c_key='L14'},
{segment='Canar',station='Джефферсон-стрит (линия Канарси, Би-эм-ти)',eng='Jefferson Street',opened='14 декабря 1928',r_key='Jefferson St L',c_key='L15'},
{segment='Canar',station='Декалб-авеню (линия Канарси, Би-эм-ти)',eng='DeKalb Avenue',opened='14 декабря 1928',r_key='DeKalb Av L',c_key='L16'},
{segment='Canar',station='Мертл-авеню — Уайкофф-авеню (линия Канарси, Би-эм-ти)',acc='yes',eng='Myrtle–Wyckoff Avenues',opened='14 декабря 1928',r_key='Myrtle-Wyckoff Avs L M',r_ast=true,c_key='L17'},
{segment='Canar',station='Холси-стрит (линия Канарси, Би-эм-ти)',sep='yes',eng='Halsey Street',opened='14 декабря 1928',r_key='Halsey St L',c_key='L19'},
{segment='Canar',station='Уилсон-авеню (линия Канарси, Би-эм-ти)',acc='n',eng='Wilson Avenue',opened='14 декабря 1928',r_key='Wilson Av L',c_key='L20'},
{segment='Canar',station='Бушуик-авеню — Абердин-стрит (линия Канарси, Би-эм-ти)',eng='Bushwick Avenue–Aberdeen Street',opened='14 декабря 1928',r_key='Bushwick Av-Aberdeen St L',c_key='L21'},
{segment='Canar BJ',station='Бродвей-Джанкшен (линия Канарси, Би-эм-ти)',eng='Broadway Junction',opened='14 декабря 1928',
r_key='Broadway Junction A C J L Z',r_ast=true,c_key='L22',
info='Станция имела пересадку на снесённую ныне станцию [[Манхэттен-Джанкшен (линия Фултон-стрит, Би-эм-ти)|Манхэттен-Джанкшен]]<sup>[[[:en:Manhattan Junction (BMT Fulton Street Line)|en]]]</sup>.'},
{segment='Canar South',station='Атлантик-авеню (линия Канарси, Би-эм-ти)',eng='Atlantic Avenue',opened='4 июля 1889',
above_stub='+w',above_stub_text='Примыкала [[линия Фултон-стрит, Би-эм-ти]]',below_stub='-e',below_stub_text='Ответвлялась [[линия Фултон-стрит, Би-эм-ти]]',oldlink='Атлантик-авеню (линия Фултон-стрит, Би-эм-ти)',r_key='Atlantic Av L',
conn='[[Ист-Нью-Йорк (LIRR)]]<sup>[[[:en:East New York station|en]]]</sup>',c_key='L24',
transfer='станция имела три островных платформы<br>и обслуживала поезда эстакадной линии Фултон-стрит<br>и существующей ныне [[линия Канарси, Би-эм-ти|линии Канарси]]',
info='Станция имела три островных платформы и обслуживала также [[Линия Фултон-стрит, Би-эм-ти|эстакадную линию Фултон-стрит]].'},
{segment='Canar South',station='Саттер-авеню (линия Канарси, Би-эм-ти)',eng='Sutter Avenue',old='-',opened='28 декабря 1906',r_key='Sutter Av L',c_key='L25'},
{segment='Canar South',station='Ливония-авеню (линия Канарси, Би-эм-ти)',acc='yes',eng='Livonia Avenue',old='-',opened='28 декабря 1906',r_key='Livonia Av L',c_key='L26'},
{segment='Canar South',station='Нью-Лотс-авеню (линия Канарси, Би-эм-ти)',eng='New Lots Avenue',old='-',opened='28 декабря 1906',r_key='New Lots Av L',c_key='L27'},
{segment='Canar South',station='Ист 105-я улица (линия Канарси, Би-эм-ти)',eng='East 105th Street',old='-',opened='28 декабря 1906',r_key='East 105 St L',c_key='L28'},
{segment='Canar South',station='Канарси — Рокавей-Паркуэй (линия Канарси, Би-эм-ти)',acc='yes',subtype='bumper',eng='Canarsie–Rockaway Parkway',old='-',opened='28 декабря 1906',r_key='Canarsie-Rockaway Pkwy L',c_key='L29'},
{segment='Bway7 North Tip',station='Ван-Кортландт-парк — 242-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='x',subtype='bumper',eng='Van Cortlandt Park–242nd Street',opened='1 августа 1908',r_key='Van Cortlandt Park-242 St 1',c_key='101'},
{segment='Bway7 North Tip',station='238-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='238th Street',opened='1 августа 1908',r_key='238 St 1',c_key='103'},
{segment='Bway7 North Tip',station='231-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',acc='yes',sep='yes',eng='231st Street',opened='7 января 1907',r_key='231 St 1',c_key='104'},
{segment='Bway7 North Tip',station='Марбл-Хилл — 225-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='Marble Hill–225th Street',opened='7 января 1907',above='Бронкс<hr>Манхэттен',below='[[Бродвейский мост (Манхэттен)|Бродвейский мост]]',r_key='Marble Hill-225 St 1',conn='[[Марбл-Хилл (Metro-North)]]<sup>[[[:en:Marble Hill station|en]]]</sup>',c_key='106'},
{segment='Bway7 North Tip',station='215-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='215th Street',opened='16 марта 1906',r_key='215 St 1',c_key='107'},
{segment='Bway7 North Tip',station='207-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='207th Street',opened='16 марта 1906',r_key='207 St 1',c_key='108'},
{segment='Bway7 North',station='Дайкман-стрит (линия Бродвея и Седьмой авеню, Ай-ар-ти)',acc='yes',eng='Dyckman Street',opened='16 марта 1906',r_key='Dyckman St 1',c_key='109'},
{segment='Bway7 North',station='191-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',eng='191st Street',opened='14 января 1911',r_key='191 St 1',c_key='110'},
{segment='Bway7 North',station='181-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',eng='181st Street',opened='16 марта 1906',r_key='181 St 1',c_key='111'},
{segment='Bway7 North',station='168-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',eng='168th Street',opened='16 марта 1906',r_key='168 St A C 1',r_ast=true,c_key='112'},
{segment='Bway7 North',station='157-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',sep='yes',eng='157th Street',opened='12 ноября 1904',r_key='157 St 1',c_key='113'},
{segment='Bway7 Middle',station='145-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='145th Street',opened='27 октября 1904',r_key='145 St 1',c_key='114'},
{segment='Bway7 Middle',station='137-я улица — Сити-колледж (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='137th Street–City College',old='137-я улица',oldeng='137th Street',opened='27 октября 1904',r_key='137 St-City College 1',c_key='115'},
{segment='Bway7 Middle',station='125-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',eng='125th Street',old='Манхэттен-стрит',oldeng='Manhattan Street',opened='27 октября 1904',r_key='125 St 1',c_key='116',
transfer='единственная на линии эстакадная<br>станция на мосту, пересекающем долину'},
{segment='Bway7 Middle',station='116-я улица — Колумбийский университет (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',eng='116th Street–Columbia University',old='116-я улица',oldeng='116th Street',opened='27 октября 1904',r_key='116 St-Columbia University 1',c_key='117'},
{segment='Bway7 Middle',station='Катидрал-Паркуэй — 110-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='Cathedral Parkway–110th Street',old='110-я улица',oldeng='110th Street',opened='27 октября 1904',r_key='Cathedral Pkwy-110 St 1',c_key='118'},
{segment='Bway7 Middle',station='103-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',eng='103rd Street',opened='27 октября 1904',r_key='103 St 1',c_key='119'},
{segment='Jerome 2',station='Вудлон (линия Джером-авеню, Ай-ар-ти)',type='x',subtype='bumper',eng='Woodlawn',opened='15 апреля 1918',r_key='Woodlawn 4',c_key='401'},
{segment='Jerome 2',station='Мошолу-Паркуэй (линия Джером-авеню, Ай-ар-ти)',type='o',eng='Mosholu Parkway',opened='15 апреля 1918',r_key='Mosholu Pkwy 4',c_key='402'},
{segment='Jerome 2',station='Бедфорд-парк-бульвар — Леман-колледж (линия Джером-авеню, Ай-ар-ти)',type='o',eng='Bedford Park Boulevard–Lehman College',opened='15 апреля 1918',r_key='Bedford Park Blvd-Lehman College 4',c_key='405'},
{segment='Jerome 2',station='Кингсбридж-роуд (линия Джером-авеню, Ай-ар-ти)',type='o',eng='Kingsbridge Road',opened='2 июня 1917',r_key='Kingsbridge Rd 4',c_key='406'},
{segment='Jerome 2',station='Фордем-роуд (линия Джером-авеню, Ай-ар-ти)',type='o',acc='yes',eng='Fordham Road',opened='2 июня 1917',r_key='Fordham Rd 4',c_key='407'},
{segment='Jerome 2',station='183-я улица (линия Джером-авеню, Ай-ар-ти)',type='o',eng='183rd Street',opened='2 июня 1917',r_key='183 St 4',c_key='408'},
{segment='Jerome 1',station='Бернсайд-авеню (линия Джером-авеню, Ай-ар-ти)',type='x',subtype='bidi',eng='Burnside Avenue',opened='2 июня 1917',r_key='Burnside Av 4',c_key='409'},
{segment='Jerome 1',station='176-я улица (линия Джером-авеню, Ай-ар-ти)',type='o',eng='176th Street',opened='2 июня 1917',r_key='176 St 4',c_key='410'},
{segment='Jerome 1',station='Маунт-Иден-авеню (линия Джером-авеню, Ай-ар-ти)',type='o',eng='Mount Eden Avenue',opened='2 июня 1917',r_key='Mt Eden Av 4',c_key='411'},
{segment='Jerome 1',station='170-я улица (линия Джером-авеню, Ай-ар-ти)',type='o',acc='yes',eng='170th Street',opened='2 июня 1917',r_key='170 St 4',c_key='412'},
{segment='Jerome',station='167-я улица (линия Джером-авеню, Ай-ар-ти)',type='o',eng='167th Street',opened='2 июня 1917',
below_stub='-w',below_stub_text='Ответвлялась [[линия Девятой авеню, Ай-ар-ти]]',r_key='167 St 4',c_key='413'},
{segment='Jerome',station='161-я улица — Стадион Янки (линия Джером-авеню, Ай-ар-ти)',type='o',acc='yes',eng='161st Street–Yankee Stadium',opened='2 июня 1917',r_key='161 St-Yankee Stadium B D 4',r_ast=true,conn='[[Янкис — Ист 153-я улица (Metro-North)]]<sup>[[[:en:Yankees–East 153rd Street station|en]]]</sup>',c_key='414'},
{segment='149',station='149-я улица — Гранд-Конкорс (линия Джером-авеню, Ай-ар-ти)',type='x',subtype='bidi',eng='149th Street–Grand Concourse',opened='2 июня 1917',r_key='149 St-Grand Concourse 2 4 5',r_ast=true,c_key='415'},
{segment='Bway7a',station='96-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='x',acc='yes',eng='96th Street',opened='27 октября 1904',below_key='91',r_key='96 St 1 2 3',c_key='120'},
{segment='Bway7a',station='86-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='86th Street',opened='27 октября 1904',r_key='86 St 1',c_key='121'},
{segment='Bway7a',station='79-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='79th Street',opened='27 октября 1904',r_key='79 St 1',c_key='122'},
{segment='Bway7a',station='72-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='x',acc='yes',eng='72nd Street',opened='27 октября 1904',r_key='72 St 1 2 3',c_key='123'},
{segment='Bway7a',station='66-я улица — Линкольн-центр (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',acc='yes',eng='66th Street–Lincoln Center',old='66-я улица',oldeng='66th Street',opened='27 октября 1904',r_key='66 St-Lincoln Center 1',c_key='124'},
{segment='Bway7a',station='59-я улица — Колумбус-Серкл (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',acc='yes',eng='59th Street–Columbus Circle',opened='27 октября 1904',r_key='59 St-Columbus Circle A B C D 1',r_ast=true,c_key='125'},
{segment='Bway7a',station='50-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='50th Street',opened='27 октября 1904',r_key='50 St 1',c_key='126'},
{segment='Bway7a',station='Таймс-сквер — 42-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='x',acc='yes',eng='Times Square–42nd Street',old='-',opened='3 июня 1917',r_key='Times Sq-42 St N Q R W S 1 2 3 7/42 St A C E',r_ast=true,conn='[[автовокзал Портового управления]]<sup>[[[:en:Port Authority Bus Terminal|en]]]</sup>',c_key='127'},
{segment='Bway7b',station='34-я улица — Пенсильванский вокзал (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='x',acc='yes',eng='34th Street–Penn Station',opened='3 июня 1917',r_key='34 St-Penn Station 1 2 3',conn='[[Пенсильванский вокзал]]',c_key='128'},
{segment='Bway7b',station='28-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='28th Street',opened='1 июля 1918',r_key='28 St 1',c_key='129'},
{segment='Bway7b',station='23-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='23rd Street',opened='1 июля 1918',r_key='23 St 1',c_key='130'},
{segment='Bway7b',station='18-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='18th Street',opened='1 июля 1918',r_key='18 St 1',c_key='131'},
{segment='Bway7b',station='14-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='x',eng='14th Street',opened='1 июля 1918',r_key='14 St F M 1 2 3/6 Av L',r_ast=true,conn='[[14-я улица (PATH)]]<sup>[[[:en:14th Street station (PATH)|en]]]</sup>',c_key='132'},
{segment='Bway7b',station='Кристофер-стрит — Шеридан-сквер (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='Christopher Street–Sheridan Square',opened='1 июля 1918',r_key='Christopher St-Sheridan Sq 1',conn='[[Кристофер-стрит (PATH)]]<sup>[[[:en:Christopher Street station (PATH)|en]]]</sup>',c_key='133'},
{segment='Bway7b',station='Хаустон-стрит (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='Houston Street',opened='1 июля 1918',r_key='Houston St 1',c_key='134'},
{segment='Bway7b',station='Канал-стрит (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='Canal Street',opened='1 июля 1918',r_key='Canal St 1',c_key='135'},
{segment='Bway7b',station='Франклин-стрит (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='o',sep='yes',eng='Franklin Street',opened='1 июля 1918',r_key='Franklin St 1',c_key='136'},
{segment='Bway7b',station='Чеймберс-стрит (линия Бродвея и Седьмой авеню, Ай-ар-ти)',type='x',acc='yes',eng='Chambers Street',opened='1 июля 1918',r_key='Chambers St 1 2 3',c_key='137'},
{segment='42',station='Таймс-сквер (челнок 42-й улицы, Ай-ар-ти)',north_back=true,oldtype='o',acc='yes',eng='Times Square',opened='27 октября 1904',r_key='Times Sq-42 St N Q R W S 1 2 3 7/42 St A C E',r_ast=true,conn='[[автовокзал Портового управления]]<sup>[[[:en:Port Authority Bus Terminal|en]]]</sup>',c_key='902'},
{segment='42',station='Центральный вокзал (челнок 42-й улицы, Ай-ар-ти)',north_back=true,acc='yes',eng='Grand Central',old='Центральный вокзал — 42-я улица',oldeng='Grand Central–42nd Street',opened='27 октября 1904',r_key='Grand Central-42 St S 4 5 6 7',r_ast=true,conn='[[Центральный вокзал Нью-Йорка]]',c_key='901'},
{segment='Lenox North',station='Гарлем — 148-я улица (линия Ленокс-авеню, Ай-ар-ти)',subtype='bumper',eng='Harlem–148th Street',opened='13 мая 1968',r_key='Harlem-148 St 3',c_key='301'},
{segment='Lenox North',station='145-я улица (линия Ленокс-авеню, Ай-ар-ти)',sep='yes',eng='145th Street',opened='23 ноября 1904',r_key='145 St 3',c_key='302'},
{segment='Lenox South',station='135-я улица (линия Ленокс-авеню, Ай-ар-ти)',acc='yes',sep='yes',eng='135th Street',opened='23 ноября 1904',r_key='135 St 2 3',c_key='224'},
{segment='Lenox South',station='125-я улица (линия Ленокс-авеню, Ай-ар-ти)',sep='yes',eng='125th Street',opened='23 ноября 1904',r_key='125 St 2 3',c_key='225'},
{segment='Lenox South',station='116-я улица (линия Ленокс-авеню, Ай-ар-ти)',sep='yes',eng='116th Street',opened='23 ноября 1904',r_key='116 St 2 3',c_key='226'},
{segment='Lenox South',station='Сентрал-парк-Норт — 110-я улица (линия Ленокс-авеню, Ай-ар-ти)',eng='Central Park North–110th Street',opened='23 ноября 1904',r_key='Central Park North-110 St 2 3',c_key='227'},
{segment='Bway7 South',station='Парк-Плейс (линия Бродвея и Седьмой авеню, Ай-ар-ти)',eng='Park Place',opened='1 августа 1918',r_key='Chambers St A C/WTC E/Park Pl 2 3/Cortlandt R W',r_ast=true,conn='[[Всемирный торговый центр (PATH)]]<sup>[[[:en:World Trade Center station (PATH)|en]]]</sup>',c_key='228'},
{segment='Bway7 South',station='Фултон-стрит (линия Бродвея и Седьмой авеню, Ай-ар-ти)',acc='yes',eng='Fulton Street',opened='1 августа 1918',r_key='Fulton St A C J Z 2 3 4 5',r_ast=true,conn='[[Всемирный торговый центр (PATH)]]<sup>[[[:en:World Trade Center station (PATH)|en]]]</sup>',c_key='229'},
{segment='Bway7 South',station='Уолл-стрит (линия Бродвея и Седьмой авеню, Ай-ар-ти)',eng='Wall Street',opened='1 августа 1918',below='Манхэттен<hr>Тоннель Кларк-стрит<hr>Бруклин',r_key='Wall St 2 3',c_key='230'},
{segment='Bway7 South',station='Кларк-стрит (линия Бродвея и Седьмой авеню, Ай-ар-ти)',eng='Clark Street',opened='15 апреля 1919',r_key='Clark St 2 3',c_key='231'},
{segment='Bway7 South',station='Боро-холл (линия Бродвея и Седьмой авеню, Ай-ар-ти)',acc='yes',eng='Borough Hall',opened='15 апреля 1919',r_key='Court St R/Borough Hall 2 3 4 5',r_ast=true,c_key='232'},
{segment='Hoyt',station='Хойт-стрит (линия Истерн-Паркуэй, Ай-ар-ти)',type='o',acc='s',sep='yes',eng='Hoyt Street',opened='1 мая 1908',r_key='Hoyt St 2 3',c_key='233'},
{segment='Hoyt',station='Невинс-стрит (линия Истерн-Паркуэй, Ай-ар-ти)',type='x',eng='Nevins Street',opened='1 мая 1908',r_key='Nevins St 2 3 4 5',c_key='234'},
{segment='EP',station='Атлантик-авеню — Барклайс-центр (линия Истерн-Паркуэй, Ай-ар-ти)',type='x',acc='yes',eng='Atlantic Avenue–Barclays Center',opened='1 мая 1908',r_key='Atlantic Av-Barclays Ctr B D N Q R 2 3 4 5',r_ast=true,conn='[[Атлантик (вокзал)|вокзал Атлантик]]<sup>[[[:en:Atlantic Terminal|en]]]</sup>',c_key='235'},
{segment='EP',station='Берген-стрит (линия Истерн-Паркуэй, Ай-ар-ти)',type='o',sep='yes',eng='Bergen Street',opened='23 августа 1920',r_key='Bergen St 2 3',c_key='236'},
{segment='EP',station='Гранд-Арми-Плаза (линия Истерн-Паркуэй, Ай-ар-ти)',type='o',subtype='under',eng='Grand Army Plaza',opened='23 августа 1920',r_key='Grand Army Plaza 2 3',c_key='237'},
{segment='EP',station='Истерн-Паркуэй — Бруклинский музей (линия Истерн-Паркуэй, Ай-ар-ти)',type='o',acc='yes',subtype='under',eng='Eastern Parkway–Brooklyn Museum',opened='23 августа 1920',r_key='Eastern Pkwy-Brooklyn Museum 2 3',c_key='238'},
{segment='EP',station='Франклин-авеню — Медгар-Эверс-колледж (линия Истерн-Паркуэй, Ай-ар-ти)',type='x',eng='Franklin Avenue-Medgar Evers College',opened='23 августа 1920',r_key='Franklin Av 2 3 4 5/Botanic Garden S',r_ast=true,c_key='239'},
{segment='Bway7 South Tip',station='ВТЦ Кортландт (линия Бродвея и Седьмой авеню, Ай-ар-ти)',acc='yes',eng='WTC Cortlandt',old='Кортландт-стрит',opened='1 июля 1918',r_key='WTC Cortlandt 1',conn='[[Всемирный торговый центр (PATH)]]<sup>[[[:en:World Trade Center station (PATH)|en]]]</sup>',c_key='138'},
{segment='Bway7 South Tip',station='Ректор-стрит (линия Бродвея и Седьмой авеню, Ай-ар-ти)',sep='yes',eng='Rector Street',opened='1 июля 1918',r_key='Rector St 1',c_key='139'},
{segment='Bway7 South Tip',station='Саут-Ферри (линия Бродвея и Седьмой авеню, Ай-ар-ти)',subtype='bumper',acc='yes',eng='South Ferry',opened='16 марта 2009',r_key='South Ferry 1/Whitehall St R W',r_ast=true,conn='[[Уайтхолл (паромный терминал)|терминал Уайтхолл]]<sup>[[[:en:Staten Island Ferry Whitehall Terminal|en]]]</sup> ([[Статен-Айленд Ферри]])',c_key='142'},
{segment='Nostrand',station='Президент-стрит — Медгар-Эверс-колледж (линия Ностранд-авеню, Ай-ар-ти)',eng='President Street-Medgar Evers College',opened='23 августа 1920',r_key='President St 2 5',c_key='241'},
{segment='Nostrand',station='Стерлинг-стрит (линия Ностранд-авеню, Ай-ар-ти)',eng='Sterling Street',opened='23 августа 1920',r_key='Sterling St 2 5',c_key='242'},
{segment='Nostrand',station='Уинтроп-стрит (линия Ностранд-авеню, Ай-ар-ти)',sep='yes',eng='Winthrop Street',opened='23 августа 1920',r_key='Winthrop St 2 5',c_key='243'},
{segment='Nostrand',station='Черч-авеню (линия Ностранд-авеню, Ай-ар-ти)',acc='yes',sep='yes',eng='Church Avenue',opened='23 августа 1920',r_key='Church Av 2 5',c_key='244'},
{segment='Nostrand',station='Беверли-роуд (линия Ностранд-авеню, Ай-ар-ти)',sep='yes',eng='Beverly Road',opened='23 августа 1920',r_key='Beverly Rd 2 5',c_key='245'},
{segment='Nostrand',station='Ньюкерк-авеню — Литл-Хейти (линия Ностранд-авеню, Ай-ар-ти)',sep='yes',eng='Newkirk Avenue–Little Haiti',opened='23 августа 1920',r_key='Newkirk Av 2 5',c_key='246'},
{segment='Nostrand',station='Флатбуш-авеню — Бруклинский колледж (линия Ностранд-авеню, Ай-ар-ти)',acc='yes',subtype='bumper',eng='Flatbush Avenue–Brooklyn College',opened='23 августа 1920',r_key='Flatbush Av-Brooklyn College 2 5',c_key='247'},
{segment='EP East',station='Ностранд-авеню (линия Истерн-Паркуэй, Ай-ар-ти)',type='o',eng='Nostrand Avenue',opened='23 августа 1920',r_key='Nostrand Av 3',c_key='248'},
{segment='EP East',station='Кингстон-авеню (линия Истерн-Паркуэй, Ай-ар-ти)',type='o',eng='Kingston Avenue',opened='23 августа 1920',r_key='Kingston Av 3',c_key='249'},
{segment='EP East',station='Краун-Хайтс — Ютика-авеню (линия Истерн-Паркуэй, Ай-ар-ти)',type='x',acc='yes',eng='Crown Heights–Utica Avenue',opened='23 августа 1920',r_key='Crown Heights-Utica Av 3 4',c_key='250'},
{segment='NL',station='Саттер-авеню — Ратленд-роуд (линия Нью-Лотс, Ай-ар-ти)',eng='Sutter Avenue–Rutland Road',opened='24 декабря 1920',r_key='Sutter Av-Rutland Rd 3',c_key='251'},
{segment='NL',station='Саратога-авеню (линия Нью-Лотс, Ай-ар-ти)',eng='Saratoga Avenue',opened='24 декабря 1920',r_key='Saratoga Av 3',c_key='252'},
{segment='NL',station='Рокавей-авеню (линия Нью-Лотс, Ай-ар-ти)',eng='Rockaway Avenue',opened='24 декабря 1920',r_key='Rockaway Av 3',c_key='253'},
{segment='NL',station='Джуниус-стрит (линия Нью-Лотс, Ай-ар-ти)',eng='Junius Street',opened='24 декабря 1920',r_key='Junius St 3',c_key='254'},
{segment='NL',station='Пенсилвейния-авеню (линия Нью-Лотс, Ай-ар-ти)',eng='Pennsylvania Avenue',opened='24 декабря 1920',r_key='Pennsylvania Av 3',c_key='255'},
{segment='NL',station='Ван-Сиклен-авеню (линия Нью-Лотс, Ай-ар-ти)',eng='Van Siclen Avenue',opened='16 октября 1922',r_key='Van Siclen Av 3',c_key='256'},
{segment='NL',station='Нью-Лотс-авеню (линия Нью-Лотс, Ай-ар-ти)',eng='New Lots Avenue',opened='16 октября 1922',r_key='New Lots Av 3',c_key='257'},
{segment='WPR North Tip',station='Уэйкфилд — 241-я улица (линия Уайт-Плейнс-роуд, Ай-ар-ти)',subtype='bumper',eng='Wakefield–241st Street',opened='31 декабря 1920',r_key='Wakefield-241 St 2',conn='[[Уэйкфилд (Metro-North)]]<sup>[[[:en:Wakefield station (Metro-North)|en]]]</sup>',c_key='201'},
{segment='WPR North',station='Ниреид-авеню (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',eng='Nereid Avenue',old='-',opened='31 марта 1917',r_key='Nereid Av 2 5',c_key='204'},
{segment='WPR North',station='233-я улица (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',acc='yes',eng='233rd Street',old='-',opened='31 марта 1917',r_key='233 St 2 5',conn='[[Вудлон (Metro-North)]]<sup>[[[:en:Woodlawn station (Metro-North)|en]]]</sup>',c_key='205'},
{segment='WPR North',station='225-я улица (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',eng='225th Street',old='-',opened='31 марта 1917',r_key='225 St 2 5',c_key='206'},
{segment='WPR North',station='219-я улица (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',eng='219th Street',old='-',opened='3 марта 1917',r_key='219 St 2 5',c_key='207'},
{segment='WPR North',station='Ган-Хилл-роуд (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='x',subtype='bidi',acc='yes',eng='Gun Hill Road',opened='3 марта 1917',
below_stub='-w',below_stub_text='Ответвлялась [[линия Третьей авеню, Ай-ар-ти]]',
oldlink='Ган-Хилл-роуд (линия Третьей авеню, Ай-ар-ти)',r_key='Gun Hill Rd 2 5',conn='[[Уильямс-Бридж (Metro-North)]]<sup>[[[:en:Williams Bridge station|en]]]</sup>',c_key='208',
transfer='верхний уровень станции обслуживал<br>существующую ныне [[Линия Уайт-Плейнс-роуд, Ай-ар-ти|линию Уайт-Плейнс-роуд]],<br>а снесённый ныне нижний — линию Третьей авеню',
info='Нижний уровень станции, снесённый ныне, обслуживал [[Линия Третьей авеню, Ай-ар-ти|линию Третьей авеню]].'},
{segment='WPR North',station='Берк-авеню (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',eng='Burke Avenue',old='-',opened='3 марта 1917',r_key='Burke Av 2 5',c_key='209'},
{segment='WPR North',station='Аллертон-авеню (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',eng='Allerton Avenue',old='-',opened='3 марта 1917',r_key='Allerton Av 2 5',c_key='210'},
{segment='WPR North',station='Пелем-Паркуэй (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',acc='yes',eng='Pelham Parkway',old='-',opened='3 марта 1917',r_key='Pelham Pkwy 2 5',c_key='211'},
{segment='WPR North',station='Бронкс-парк-Ист (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',eng='Bronx Park East',old='-',opened='3 марта 1917',r_key='Bronx Park East 2 5',c_key='212'},
{segment='Dyre',station='Истчестер — Дайр-авеню (линия Дайр-авеню, Ай-ар-ти)',subtype='bumper',eng='Eastchester–Dyre Avenue',opened='15 мая 1941',orig='29 мая 1912',r_key='Eastchester-Dyre Av 5',c_key='501'},
{segment='Dyre',station='Бейчестер-авеню (линия Дайр-авеню, Ай-ар-ти)',eng='Baychester Avenue',opened='15 мая 1941',orig='29 мая 1912',r_key='Baychester Av 5',c_key='502'},
{segment='Dyre',station='Ган-Хилл-роуд (линия Дайр-авеню, Ай-ар-ти)',acc='yes',eng='Gun Hill Road',opened='15 мая 1941',orig='29 мая 1912',r_key='Gun Hill Rd 5',c_key='503'},
{segment='Dyre',station='Пелем-Паркуэй (линия Дайр-авеню, Ай-ар-ти)',eng='Pelham Parkway',opened='15 мая 1941',orig='29 мая 1912',r_key='Pelham Pkwy 5',c_key='504'},
{segment='Dyre',station='Моррис-парк (линия Дайр-авеню, Ай-ар-ти)',eng='Morris Park',opened='15 мая 1941',orig='29 мая 1912',r_key='Morris Park 5',c_key='505'},
{segment='E180',station='Ист 180-я улица (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='x',subtype='bidi',acc='yes',eng='East 180th Street',opened='3 марта 1917',r_key='East 180 St 2 5',c_key='213'},
{segment='WPR South',station='Уэст-Фармс-сквер — Ист-Тремонт-авеню (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',eng='West Farms Square–East Tremont Avenue',opened='26 ноября 1904',r_key='West Farms Sq-East Tremont Av 2 5',c_key='214'},
{segment='WPR South',station='174-я улица (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',sep='yes',eng='174th Street',opened='26 ноября 1904',r_key='174 St 2 5',c_key='215'},
{segment='WPR South',station='Фримен-стрит (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',sep='yes',eng='Freeman Street',opened='26 ноября 1904',r_key='Freeman St 2 5',c_key='216'},
{segment='WPR South',station='Симпсон-стрит (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',acc='yes',sep='yes',eng='Simpson Street',opened='26 ноября 1904',r_key='Simpson St 2 5',c_key='217'},
{segment='WPR South',station='Интервейл-авеню (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',eng='Intervale Avenue',opened='26 ноября 1904',r_key='Intervale Av 2 5',c_key='218'},
{segment='WPR South',station='Проспект-авеню (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',sep='yes',eng='Prospect Avenue',opened='26 ноября 1904',r_key='Prospect Av 2 5',c_key='219'},
{segment='WPR South',station='Джексон-авеню (линия Уайт-Плейнс-роуд, Ай-ар-ти)',type='o',sep='yes',eng='Jackson Avenue',opened='26 ноября 1904',
below_stub='-e',below_stub_text='Было ответвление к [[линия Третьей авеню, Ай-ар-ти|линии Третьей авеню, Ай-ар-ти]]',r_key='Jackson Av 2 5',c_key='220'},
{segment='WPR South Tip',station='Третья авеню — 149-я улица (линия Уайт-Плейнс-роуд, Ай-ар-ти)',acc='yes',sep='yes',eng='Third Avenue–149th Street',opened='10 июля 1905',r_key='3 Av-149 St 2 5',c_key='221',
info='Станция имела пересадку на снесённую ныне станцию [[149-я улица (линия Третьей авеню, Ай-ар-ти)|149-я улица]]<sup>[[[:en:149th Street station (IRT Third Avenue Line)|en]]]</sup>.'},
{segment='WPR South Tip',station='149-я улица — Гранд-Конкорс (линия Уайт-Плейнс-роуд, Ай-ар-ти)',eng='149th Street–Grand Concourse',opened='10 июля 1905',r_key='149 St-Grand Concourse 2 4 5',r_ast=true,c_key='222'},
{segment='138',station='138-я улица — Гранд-Конкорс (линия Джером-авеню, Ай-ар-ти)',type='o',eng='138th Street–Grand Concourse',opened='17 июля 1918',r_key='138 St-Grand Concourse 4 5',c_key='416'},
{segment='Pelham North',station='Пелем-Бей-парк (линия Пелем, Ай-ар-ти)',type='x',subtype='bumper',acc='yes',eng='Pelham Bay Park',opened='24 октября 1920',r_key='Pelham Bay Park 6',c_key='601'},
{segment='Pelham North',station='Бьюр-авеню (линия Пелем, Ай-ар-ти)',type='o',eng='Buhre Avenue',opened='24 октября 1920',r_key='Buhre Av 6',c_key='602'},
{segment='Pelham North',station='Мидлтаун-роуд (линия Пелем, Ай-ар-ти)',type='o',eng='Middletown Road',opened='24 октября 1920',r_key='Middletown Rd 6',c_key='603'},
{segment='Pelham North',station='Уэстчестер-сквер — Ист-Тремонт-авеню (линия Пелем, Ай-ар-ти)',type='o',eng='Westchester Square–East Tremont Avenue',opened='24 октября 1920',r_key='Westchester Sq-East Tremont Av 6',c_key='604'},
{segment='Pelham North',station='Зерига-авеню (линия Пелем, Ай-ар-ти)',type='o',eng='Zerega Avenue',opened='24 октября 1920',r_key='Zerega Av 6',c_key='606'},
{segment='Pelham North',station='Касл-Хилл-авеню (линия Пелем, Ай-ар-ти)',type='o',eng='Castle Hill Avenue',opened='24 октября 1920',r_key='Castle Hill Av 6',c_key='607'},
{segment='Pelham',station='Паркчестер (линия Пелем, Ай-ар-ти)',type='x',subtype='bidi',eng='Parkchester',opened='30 мая 1920',r_key='Parkchester 6',c_key='608'},
{segment='Pelham',station='Сент-Лоренс-авеню (линия Пелем, Ай-ар-ти)',type='o',eng='St. Lawrence Avenue',opened='30 мая 1920',r_key='St Lawrence Av 6',c_key='609'},
{segment='Pelham',station='Моррисон-авеню — Саундвью (линия Пелем, Ай-ар-ти)',type='o',eng='Morrison Avenue–Soundview',opened='30 мая 1920',r_key='Morrison Av-Soundview 6',c_key='610'},
{segment='Pelham',station='Элдер-авеню (линия Пелем, Ай-ар-ти)',type='o',eng='Elder Avenue',opened='30 мая 1920',r_key='Elder Av 6',c_key='611'},
{segment='Pelham',station='Уитлок-авеню (линия Пелем, Ай-ар-ти)',type='o',eng='Whitlock Avenue',opened='30 мая 1920',r_key='Whitlock Av 6',c_key='612'},
{segment='Pelham',station='Хантс-Пойнт-авеню (линия Пелем, Ай-ар-ти)',type='x',subtype='bidi',acc='yes',eng='Hunts Point Avenue',opened='17 января 1919',r_key='Hunts Point Av 6',c_key='613'},
{segment='Pelham',station='Лонгвуд-авеню (линия Пелем, Ай-ар-ти)',type='o',sep='yes',eng='Longwood Avenue',opened='17 января 1919',r_key='Longwood Av 6',c_key='614'},
{segment='Pelham',station='Ист 149-я улица (линия Пелем, Ай-ар-ти)',type='o',acc='yes',sep='yes',eng='East 149th Street',opened='17 января 1919',r_key='East 149 St 6',c_key='615'},
{segment='Pelham',station='Ист 143-я улица — Сент-Мэрис-стрит (линия Пелем, Ай-ар-ти)',type='o',sep='yes',eng='East 143rd Street–St. Mary’s Street',opened='17 января 1919',r_key='East 143 St-St Mary\'s St 6',c_key='616'},
{segment='Pelham',station='Сайпресс-авеню (линия Пелем, Ай-ар-ти)',type='o',sep='yes',eng='Cypress Avenue',opened='17 января 1919',r_key='Cypress Av 6',c_key='617'},
{segment='Pelham',station='Брук-авеню (линия Пелем, Ай-ар-ти)',type='o',sep='yes',eng='Brook Avenue',opened='17 января 1919',r_key='Brook Av 6',c_key='618'},
{segment='Pelham',station='Третья авеню — 138-я улица (линия Пелем, Ай-ар-ти)',type='x',subtype='bidi',eng='Third Avenue–138th Street',opened='17 января 1919',r_key='3 Av-138 St 6',c_key='619'},
{segment='Lex North',station='125-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='x',acc='yes',eng='125th Street',opened='17 сентября 1918',above='Бронкс<hr>Тоннель Лексингтон-авеню<hr>Манхэттен',r_key='125 St 4 5 6',conn='[[Харлем — 125-я улица (Metro-North)]]<sup>[[[:en:Harlem–125th Street station|en]]]</sup>',c_key='621'},
{segment='Lex North',station='116-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='o',subtype='under',sep='yes',eng='116th Street',opened='17 сентября 1918',r_key='116 St 6',c_key='622'},
{segment='Lex North',station='110-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='o',sep='yes',eng='110th Street',opened='17 сентября 1918',r_key='110 St 6',c_key='623'},
{segment='Lex North',station='103-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='o',eng='103rd Street',opened='17 сентября 1918',r_key='103 St 6',c_key='624'},
{segment='Lex North',station='96-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='o',subtype='under',eng='96th Street',opened='17 сентября 1918',r_key='96 St 6',c_key='625'},
{segment='Lex North',station='86-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='x',sep='yes',eng='86th Street',opened='17 сентября 1918',r_key='86 St 4 5 6',c_key='626'},
{segment='Lex North',station='77-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='o',subtype='under',sep='yes',eng='77th Street',opened='17 сентября 1918',r_key='77 St 6',c_key='627'},
{segment='Lex North',station='68-я улица — Хантер-колледж (линия Лексингтон-авеню, Ай-ар-ти)',type='o',subtype='under',eng='68th Street–Hunter College',opened='17 сентября 1918',r_key='68 St-Hunter College 6',c_key='628'},
{segment='Lex North',station='59-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='x',eng='59th Street',opened='17 июля 1918',r_key='Lexington Av N R W/59 St 4 5 6',r_ast=true,conn='[[Канатная дорога острова Рузвельт]]',c_key='629'},
{segment='Lex North',station='51-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='o',subtype='under',acc='yes',eng='51st Street',opened='17 июля 1918',r_key='Lexington Av-53 St E M/51 St 6',r_ast=true,c_key='630'},
{segment='Lex North',station='Центральный вокзал — 42-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='x',acc='yes',eng='Grand Central–42nd Street',opened='17 июля 1918',r_key='Grand Central-42 St S 4 5 6 7',r_ast=true,conn='[[Центральный вокзал Нью-Йорка]]',c_key='631'},
{segment='Lex',station='33-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='o',sep='yes',eng='33rd Street',opened='27 октября 1904',r_key='33 St 6',c_key='632'},
{segment='Lex',station='28-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='o',acc='s',sep='yes',eng='28th Street',opened='27 октября 1904',r_key='28 St 6',c_key='633'},
{segment='Lex',station='23-я улица (линия Лексингтон-авеню, Ай-ар-ти)',type='o',acc='yes',sep='yes',eng='23rd Street',opened='27 октября 1904',below_key='18',r_key='23 St 6',c_key='634'},
{segment='Lex',station='14-я улица — Юнион-сквер (линия Лексингтон-авеню, Ай-ар-ти)',type='x',eng='14th Street–Union Square',opened='27 октября 1904',r_key='14 St-Union Sq L N Q R W 4 5 6',r_ast=true,c_key='635'},
{segment='Lex',station='Астор-Плейс (линия Лексингтон-авеню, Ай-ар-ти)',type='o',sep='yes',eng='Astor Place',opened='27 октября 1904',r_key='Astor Place 6',c_key='636'},
{segment='Lex',station='Бликер-стрит (линия Лексингтон-авеню, Ай-ар-ти)',type='o',acc='yes',eng='Bleecker Street',opened='27 октября 1904',r_key='Broadway-Lafayette St B D F M/Bleecker St 6',r_ast=true,c_key='637'},
{segment='Lex',station='Спринг-стрит (линия Лексингтон-авеню, Ай-ар-ти)',type='o',sep='yes',eng='Spring Street',opened='27 октября 1904',r_key='Spring St 6',c_key='638'},
{segment='Lex',station='Канал-стрит (линия Лексингтон-авеню, Ай-ар-ти)',type='o',acc='yes',eng='Canal Street',opened='27 октября 1904',below_key='Worth',r_key='Canal St J N Q R W Z 6',r_ast=true,c_key='639'},
{segment='Lex',station='Бруклинский мост — Сити-холл (линия Лексингтон-авеню, Ай-ар-ти)',type='x',acc='yes',eng='Brooklyn Bridge–City Hall',old='Бруклинский мост',oldeng='Brooklyn Bridge',opened='27 октября 1904',below_key='CH',r_key='Brooklyn Bridge-City Hall 4 5 6/Chambers St J Z',r_ast=true,c_key='640'},
{segment='Lex South',station='Фултон-стрит (линия Лексингтон-авеню, Ай-ар-ти)',acc='yes',eng='Fulton Street',opened='16 января 1905',r_key='Fulton St A C J Z 2 3 4 5',r_ast=true,conn='[[Всемирный торговый центр (PATH)]]<sup>[[[:en:World Trade Center station (PATH)|en]]]</sup>',c_key='418'},
{segment='Lex South',station='Уолл-стрит (линия Лексингтон-авеню, Ай-ар-ти)',eng='Wall Street',opened='12 июня 1905',r_key='Wall St 4 5',c_key='419'},
{segment='Lex South',station='Боулинг-Грин (линия Лексингтон-авеню, Ай-ар-ти)',acc='yes',eng='Bowling Green',opened='10 июля 1905',r_key='Bowling Green 4 5',c_key='420'},
{segment='BHall',station='Боро-холл (линия Истерн-Паркуэй, Ай-ар-ти)',acc='n',eng='Borough Hall',opened='1 мая 1908',above='Манхэттен<hr>Тоннель Джоралемон-стрит<hr>Бруклин',r_key='Court St R/Borough Hall 2 3 4 5',r_ast=true,c_key='423'},
{segment='Flush',station='Флашинг — Мейн-стрит (линия Флашинг, Ай-ар-ти)',type='x',subtype='suppress',acc='yes',eng='Flushing–Main Street',opened='2 января 1928',r_key='Flushing-Main St 7',conn='[[Флашинг — Мейн-стрит (LIRR)]]<sup>[[[:en:Flushing–Main Street station (LIRR)|en]]]</sup>',c_key='701'},
{segment='Flush',station='Метс — Уиллетс-Пойнт (линия Флашинг, Ай-ар-ти)',type='x',subtype='bidi',eng='Mets–Willets Point',opened='7 мая 1927',r_key='Mets-Willets Point 7',conn='[[Метс — Уиллетс-Пойнт (LIRR)]]<sup>[[[:en:Mets–Willets Point station (LIRR)|en]]]</sup>',c_key='702'},
{segment='Flush',station='111-я улица (линия Флашинг, Ай-ар-ти)',type='o',eng='111th Street',opened='13 октября 1925',r_key='111 St 7',c_key='705'},
{segment='Flush',station='103-я улица — Корона-Плаза (линия Флашинг, Ай-ар-ти)',type='o',eng='103rd Street–Corona Plaza',opened='21 апреля 1917',r_key='103 St-Corona Plaza 7',c_key='706'},
{segment='Flush',station='Джанкшен-бульвар (линия Флашинг, Ай-ар-ти)',type='x',subtype='bidi',acc='yes',eng='Junction Boulevard',opened='21 апреля 1917',r_key='Junction Blvd 7',c_key='707'},
{segment='Flush',station='90-я улица — Элмхерст-авеню (линия Флашинг, Ай-ар-ти)',type='o',eng='90th Street–Elmhurst Avenue',opened='21 апреля 1917',r_key='90 St-Elmhurst Av 7',c_key='708'},
{segment='Flush',station='82-я улица — Джексон-Хайтс (линия Флашинг, Ай-ар-ти)',type='o',eng='82nd Street–Jackson Heights',opened='21 апреля 1917',r_key='82 St-Jackson Hts 7',c_key='709'},
{segment='Flush',station='74-я улица — Бродвей (линия Флашинг, Ай-ар-ти)',type='o',acc='yes',eng='74th Street–Broadway',opened='21 апреля 1917',r_key='74-Broadway 7/Jackson Hts-Roosevelt Av E F M R',r_ast=true,c_key='710'},
{segment='Flush',station='69-я улица (линия Флашинг, Ай-ар-ти)',type='o',eng='69th Street',opened='21 апреля 1917',r_key='69 St 7',c_key='711'},
{segment='Flush',station='61-я улица — Вудсайд (линия Флашинг, Ай-ар-ти)',type='x',subtype='bidi',acc='yes',eng='61st Street–Woodside',opened='21 апреля 1917',r_key='Woodside-61 St 7',conn='[[Вудсайд (LIRR)]]<sup>[[[:en:Woodside station (LIRR)|en]]]</sup>',c_key='712'},
{segment='Flush',station='52-я улица (линия Флашинг, Ай-ар-ти)',type='o',eng='52nd Street',opened='21 апреля 1917',r_key='52 St 7',c_key='713'},
{segment='Flush',station='46-я улица — Блисс-стрит (линия Флашинг, Ай-ар-ти)',type='o',eng='46th Street–Bliss Street',opened='21 апреля 1917',r_key='46 St-Bliss St 7',c_key='714'},
{segment='Flush',station='40-я улица — Лауэри-стрит (линия Флашинг, Ай-ар-ти)',type='o',sep='yes',eng='40th Street–Lowery Street',opened='21 апреля 1917',r_key='40 St-Lowery St 7',c_key='715'},
{segment='Flush',station='33-я улица — Росон-стрит (линия Флашинг, Ай-ар-ти)',type='o',eng='33rd Street–Rawson Street',opened='21 апреля 1917',r_key='33 St-Rawson St 7',c_key='716'},
{segment='Flush West',station='Куинсборо-Плаза (линия Флашинг, Ай-ар-ти)',eng='Queensboro Plaza',opened='5 ноября 1916',
below_stub='-w',below_stub_text='Было ответвление к [[линия Второй авеню, Ай-ар-ти|линии Второй авеню, Ай-ар-ти]]',r_key='Queensboro Plaza N W 7',c_key='718'},
{segment='Flush West',station='Корт-сквер (линия Флашинг, Ай-ар-ти)',acc='yes',eng='Court Square',opened='5 ноября 1916',r_key='Court Sq E G M 7',r_ast=true,c_key='719'},
{segment='Flush West',station='Хантерс-Пойнт-авеню (линия Флашинг, Ай-ар-ти)',eng='Hunters Point Avenue',opened='5 ноября 1916',r_key='Hunters Point Av 7',conn='[[Хантерспойнт-авеню (LIRR)]]<sup>[[[:en:Hunterspoint Avenue station (LIRR)|en]]]</sup>',c_key='720'},
{segment='Flush West',station='Вернон-бульвар — Джексон-авеню (линия Флашинг, Ай-ар-ти)',sep='yes',eng='Vernon Boulevard–Jackson Avenue',opened='22 июня 1915',below='Куинс<hr>Тоннель Стейнвея<hr>Манхэттен',r_key='Vernon Blvd-Jackson Av 7',conn='[[Лонг-Айленд-Сити (LIRR)]]<sup>[[[:en:Long Island City station|en]]]</sup>',c_key='721'},
{segment='Flush West',station='Центральный вокзал (линия Флашинг, Ай-ар-ти)',acc='yes',eng='Grand Central',opened='22 июня 1915',r_key='Grand Central-42 St S 4 5 6 7',r_ast=true,conn='[[Центральный вокзал Нью-Йорка]]',c_key='723'},
{segment='Flush West',station='Пятая авеню (линия Флашинг, Ай-ар-ти)',eng='Fifth Avenue',opened='22 марта 1926',r_key='42 St-Bryant Pk B D F M/5 Av 7',r_ast=true,c_key='724'},
{segment='Flush West',station='Таймс-сквер (линия Флашинг, Ай-ар-ти)',acc='yes',eng='Times Square',opened='14 марта 1927',r_key='Times Sq-42 St N Q R W S 1 2 3 7/42 St A C E',r_ast=true,conn='[[автовокзал Портового управления]]<sup>[[[:en:Port Authority Bus Terminal|en]]]</sup>',c_key='725'},
{segment='Flush West',station='34-я улица — Хадсон-Ярдс (линия Флашинг, Ай-ар-ти)',acc='yes',subtype='bumper',eng='34th Street–Hudson Yards',opened='13 сентября 2015',r_key='34 St-Hudson Yards 7',c_key='726'},
}
local stations_future = {
{segment='Second 2',station='125-я улица (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='125th Street (IND Second Avenue Line)',opened='2 очередь',boro='M',
conn='[[Харлем — 125-я улица (Metro-North)]]<sup>[[[:en:Harlem–125th Street station|en]]]</sup>'},
{segment='Second 2',station='116-я улица (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='116th Street (IND Second Avenue Line)',opened='2 очередь',boro='M'},
{segment='Second 2',station='106-я улица (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='106th Street (IND Second Avenue Line)',opened='2 очередь',boro='M'},
{segment='Second 3',station='55-я улица (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='55th Street (IND Second Avenue Line)',opened='3 очередь',boro='M'},
{segment='Second 3',station='42-я улица (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='42nd Street (IND Second Avenue Line)',opened='3 очередь',boro='M',
conn='[[Центральный вокзал Нью-Йорка]]'},
{segment='Second 3',station='34-я улица (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='34th Street (IND Second Avenue Line)',opened='3 очередь',boro='M'},
{segment='Second 3',station='23-я улица (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='23rd Street (IND Second Avenue Line)',opened='3 очередь',boro='M'},
{segment='Second 3',station='14-я улица (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='14th Street (IND Second Avenue Line)',opened='3 очередь',boro='M'},
{segment='Second 3',station='Хаустон-стрит (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='Houston Street (IND Second Avenue Line)',opened='3 очередь',boro='M'},
{segment='Second 4',station='Гранд-стрит (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='Grand Street (IND Second Avenue Line)',opened='4 очередь',boro='M'},
{segment='Second 4',station='Чатем-сквер (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='Chatham Square (IND Second Avenue Line)',opened='4 очередь',boro='M'},
{segment='Second 4',station='Сипорт (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='Seaport (IND Second Avenue Line)',opened='4 очередь',boro='M'},
{segment='Second 4',station='Хановер-сквер (линия Второй авеню, Ай-эн-ди)',acc='yes',eng='Hanover Square (IND Second Avenue Line)',opened='4 очередь',boro='M'},
}
local stations_former = {
{segment='Myrtle 4',station='Мертл-авеню (линия Четвёртой авеню, Би-эм-ти)',en='Myrtle Avenue station (BMT Fourth Avenue Line)',eng='Myrtle Avenue',saved=true,opened='22 июня 1915',closed='16 июля 1956',struc='подземная',boro='B',type='o'},
{segment='91',station='91-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',en='91st Street station (IRT Broadway–Seventh Avenue Line)',eng='91st Street',saved=true,opened='27 октября 1904',closed='2 февраля 1959',type='o',struc='подземная',boro='M'},
{segment='SF Loop',station='Саут-Ферри (внешнее кольцо)',eng='South Ferry',saved=true,opened='10 июля 1905',closed='16 марта 2009',struc='подземная',boro='M'},
-- transfer='старая станция (внешнее кольцо),<br>работавшая до открытия новой<br>(пересадки на другую линию не было)'
{segment='SF Loop+',station='Саут-Ферри (Нью-Йоркское метро)',eng='South Ferry',saved=true,opened='10 июля 1905',closed='16 марта 2009',struc='подземная',boro='M',spur='sw'},
-- transfer='внутреннее и внешнее кольца'
{segment='Can Pier',station='Флатландс-авеню (линия Канарси, Би-эм-ти)',eng='Flatlands Avenue',opened='28 июля 1906',closed='1917',struc='наземная',boro='B'},
{segment='Can Pier',station='Авеню Эл (линия Канарси, Би-эм-ти)',eng='Avenue L',opened='28 июля 1906',closed='1917',struc='наземная',boro='B'},
{segment='Can Pier',station='Канарси-Пир (линия Канарси, Би-эм-ти)',eng='Canarsie Pier',opened='28 июля 1906',closed='1917',struc='наземная',boro='B'},
--{segment='Cul Shuttle',station='Девятая авеню (линия Калвер, Би-эм-ти)',en='Ninth Avenue station',eng='Ninth Avenue',opened='16 марта 1919',closed='11 мая 1975',struc='в выемке',boro='B',
-- transfer='станция была на нижнем<br>уровне станции [[Девятая авеню (линия Уэст-Энд, Би-эм-ти)|Девятая авеню]]'},
{segment='Cul Shuttle',station='Форт-Гамильтон-Паркуэй (линия Калвер, Би-эм-ти)',en='Fort Hamilton Parkway station (BMT Culver Line)',eng='Fort Hamilton Parkway',opened='16 марта 1919',closed='11 мая 1975',type='o',boro='B'},
{segment='Cul Shuttle',station='13-я авеню (линия Калвер, Би-эм-ти)',en='13th Avenue station (BMT Culver Line)',eng='13th Avenue',opened='16 марта 1919',closed='11 мая 1975',type='o',boro='B'},
{segment='Dean',station='Дин-стрит (линия Франклин-авеню, Би-эм-ти)',en='Dean Street station',eng='Dean Street',opened='15 августа 1896',closed='1995',boro='B'},
{segment='Museum',station='Корт-стрит (линия Фултон-стрит, Ай-эн-ди)',eng='Court Street',saved=true,opened='9 апреля 1936',closed='1946',struc='подземная',boro='B'},
{segment='Jam Ultra',station='168-я улица (линия Джамейка, Би-эм-ти)',en='168th Street station (BMT Jamaica Line)',eng='168th Street',opened='3 июля 1918',closed='10 сентября 1977',boro='Q'},
{segment='Jam Ultra',station='160-я улица (линия Джамейка, Би-эм-ти)',en='160th Street station',eng='160th Street',opened='3 июля 1918',closed='10 сентября 1977',boro='Q'},
{segment='Jam Ultra',station='Сатфин-бульвар (линия Джамейка, Би-эм-ти)',en='Sutphin Boulevard station (BMT Jamaica Line)',eng='Sutphin Boulevard',opened='3 июля 1918',closed='10 сентября 1977',boro='Q'},
{segment='Jam Ultra',station='Куинс-бульвар (линия Джамейка, Би-эм-ти)',en='Queens Boulevard station',eng='Queens Boulevard',opened='3 июля 1918',closed='15 апреля 1985',boro='Q'},
{segment='Jam Ultra',station='Метрополитан-авеню (линия Джамейка, Би-эм-ти)',en='Metropolitan Avenue station (BMT Jamaica Line)',eng='Metropolitan Avenue',opened='3 июля 1918',closed='15 апреля 1985',boro='Q'},
{segment='Jam Infra',station='Дригс-авеню (линия Джамейка, Би-эм-ти)',en='Driggs Avenue station',eng='Driggs Avenue',opened='25 июня 1888',closed='3 июля 1916',boro='B'},
{segment='Jam Infra',station='Бродвей-Ферри (линия Джамейка, Би-эм-ти)',en='Broadway Ferry station',eng='Broadway Ferry',opened='14 июля 1888',closed='3 июля 1916',boro='B'},
{segment='18',station='18-я улица (линия Лексингтон-авеню, Ай-ар-ти)',en='18th Street station (IRT Lexington Avenue Line)',eng='18th Street',saved=true,opened='27 октября 1904',closed='7 ноября 1948',type='o',struc='подземная',boro='M'},
{segment='Worth',station='Уэрт-стрит (линия Лексингтон-авеню, Ай-ар-ти)',en='Worth Street station',eng='Worth Street',saved=true,opened='27 октября 1904',closed='1 сентября 1962',type='o',struc='подземная',boro='M'},
{segment='CH',station='Сити-холл (линия Лексингтон-авеню, Ай-ар-ти)',en='City Hall station (IRT Lexington Avenue Line)',eng='City Hall',saved=true,opened='27 октября 1904',closed='31 декабря 1945',struc='подземная',boro='M',spur_noreincarn='sw'},
{segment='Myr South 1',station='Парк-Роу (линия Мертл-авеню, Би-эм-ти)',en='Park Row Terminal',eng='Park Row',opened='18 июня 1898',closed='5 марта 1944',boro='M',
below='Манхэттен<hr>[[Бруклинский мост]]<hr>Бруклин'},
{segment='Myr South 1',station='Сандс-стрит (линия Мертл-авеню, Би-эм-ти)',en='Sands Street station',eng='Sands Street',opened='1 сентября 1888',closed='5 марта 1944',boro='B'},
{segment='Myr South 2',station='Адамс-стрит (линия Мертл-авеню, Би-эм-ти)',en='Adams Street station',eng='Adams Street',opened='10 апреля 1888',closed='5 марта 1944',boro='B'},
{segment='Myr South 2',station='Бридж-стрит — Джей-стрит (линия Мертл-авеню, Би-эм-ти)',en='Bridge–Jay Streets station',eng='Bridge–Jay Streets',opened='10 апреля 1888',closed='4 октября 1969',boro='B',
transfer='с 1933 года была пересадка<br>на станцию [[Джей-стрит — Метротек (линии Ай-эн-ди)|Джей-стрит]]'},
{segment='Myr South 3',station='Нейви-стрит (линия Мертл-авеню, Би-эм-ти)',en='Navy Street station',eng='Navy Street',opened='10 апреля 1888',closed='4 октября 1969',boro='B'},
{segment='Myr South 3',station='Вандербилт-авеню (линия Мертл-авеню, Би-эм-ти)',en='Vanderbilt Avenue station (BMT Myrtle Avenue Line)',eng='Vanderbilt Avenue',opened='10 апреля 1888',closed='4 октября 1969',boro='B'},
{segment='Myr South 3',station='Вашингтон-авеню (линия Мертл-авеню, Би-эм-ти)',en='Washington Avenue station',eng='Washington Avenue',opened='4 декабря 1888',closed='4 октября 1969',boro='B'},
{segment='Myr South',station='Гранд-авеню (линия Мертл-авеню, Би-эм-ти)',en='Grand Avenue station (BMT Myrtle Avenue Line)',eng='Grand Avenue',opened='27 апреля 1889',closed='21 января 1953',boro='B'},
{segment='Myr South',station='Франклин-авеню (линия Мертл-авеню, Би-эм-ти)',en='Franklin Avenue station (BMT Myrtle Avenue Line)',eng='Franklin Avenue',opened='27 апреля 1889',closed='4 октября 1969',boro='B'},
{segment='Myr South',station='Ностранд-авеню (линия Мертл-авеню, Би-эм-ти)',en='Nostrand Avenue station (BMT Myrtle Avenue Line)',eng='Nostrand Avenue',opened='27 апреля 1889',closed='4 октября 1969',boro='B'},
{segment='Myr South',station='Томпкинс-авеню (линия Мертл-авеню, Би-эм-ти)',en='Tompkins Avenue station (BMT Myrtle Avenue Line)',eng='Tompkins Avenue',opened='27 апреля 1889',closed='4 октября 1969',boro='B'},
{segment='Myr South',station='Самнер-авеню (линия Мертл-авеню, Би-эм-ти)',en='Sumner Avenue station (BMT Myrtle Avenue Line)',eng='Sumner Avenue',opened='27 апреля 1889',closed='4 октября 1969',boro='B'},
{segment='Myr South',station='Бродвей (линия Мертл-авеню, Би-эм-ти)',eng='Broadway',opened='27 апреля 1889',closed='4 октября 1969',boro='B',
transfer='станция была на верхнем<br>уровне станции [[Мертл-авеню (линия Джамейка, Би-эм-ти)|Мертл-авеню]]'},
{segment='180',station='180-я улица — Бронкс-парк (линия Уайт-Плейнс-роуд, Ай-ар-ти)',en='180th Street–Bronx Park station',eng='180th Street–Bronx Park',opened='26 ноября 1904',closed='4 августа 1952',boro='Bx',spur='nw'},
{segment='Second 1',station='129-я улица (линия Второй авеню, Ай-ар-ти)',en='129th Street station',eng='129th Street',opened='30 декабря 1878',closed='11 июня 1940',boro='M',spur='nw',
transfer='станция обслуживала поезда<br>линий [[Линия Второй авеню, Ай-ар-ти|Второй]] и [[Линия Третьей авеню, Ай-ар-ти|Третьей]] авеню'},
{segment='Second 1',station='125-я улица (линия Второй авеню, Ай-ар-ти)',en='125th Street station (IRT Second Avenue Line)',eng='125th Street',opened='',closed='11 июня 1940',boro='M'},
{segment='Second 1',station='121-я улица (линия Второй авеню, Ай-ар-ти)',en='121st Street station (IRT Second Avenue Line)',eng='121st Street',opened='',closed='11 июня 1940',boro='M',type='o'},
{segment='Second 1',station='117-я улица (линия Второй авеню, Ай-ар-ти)',en='117th Street station',eng='117th Street',opened='',closed='11 июня 1940',boro='M',type='o'},
{segment='Second 1',station='111-я улица (линия Второй авеню, Ай-ар-ти)',en='111th Street station (IRT Second Avenue Line)',eng='111th Street',opened='',closed='11 июня 1940',boro='M',type='o'},
{segment='Second 1',station='105-я улица (линия Второй авеню, Ай-ар-ти)',en='105th Street station',eng='105th Street',opened='',closed='11 июня 1940',boro='M',type='o'},
{segment='Second 1',station='99-я улица (линия Второй авеню, Ай-ар-ти)',en='99th Street station (IRT Second Avenue Line)',eng='99th Street',opened='',closed='11 июня 1940',boro='M',type='o'},
{segment='Second 1',station='92-я улица (линия Второй авеню, Ай-ар-ти)',en='92nd Street station',eng='92nd Street',opened='',closed='11 июня 1940',boro='M',type='o'},
{segment='Second 1',station='86-я улица (линия Второй авеню, Ай-ар-ти)',en='86th Street station (IRT Second Avenue Line)',eng='86th Street',opened='',closed='11 июня 1940',boro='M'},
{segment='Second 1',station='80-я улица (линия Второй авеню, Ай-ар-ти)',en='80th Street station (IRT Second Avenue Line)',eng='80th Street',opened='',closed='11 июня 1940',boro='M',type='o'},
{segment='Second 1',station='72-я улица (линия Второй авеню, Ай-ар-ти)',en='72nd Street station (IRT Second Avenue Line)',eng='72nd Street',opened='',closed='11 июня 1940',boro='M',type='o'},
{segment='Second 1',station='65-я улица (линия Второй авеню, Ай-ар-ти)',en='65th Street station (IRT Second Avenue Line)',eng='65th Street',opened='1 марта 1880',closed='11 июня 1940',boro='M',type='o'},
{segment='Second 2',station='57-я улица (линия Второй авеню, Ай-ар-ти)',en='57th Street station (IRT Second Avenue Line)',eng='57th Street',opened='',closed='13 июня 1942',boro='M'},
{segment='Second 2',station='50-я улица (линия Второй авеню, Ай-ар-ти)',en='50th Street station (IRT Second Avenue Line)',eng='50th Street',opened='',closed='13 июня 1942',boro='M',type='o'},
{segment='Second 2',station='42-я улица (линия Второй авеню, Ай-ар-ти)',en='42nd Street station (IRT Second Avenue Line)',eng='42nd Street',opened='1 марта 1880',closed='13 июня 1942',boro='M'},
{segment='Second 2',station='34-я улица (линия Второй авеню, Ай-ар-ти)',en='34th Street station (IRT Second Avenue Line)',eng='34th Street',opened='',closed='13 июня 1942',boro='M',
transfer='станция обслуживала поезда<br>[[Линия Второй авеню, Ай-ар-ти|линии Второй авеню]] и [[Линия Третьей авеню, Ай-ар-ти|челнока 34 улицы]]',type='o'},
{segment='Second 2',station='23-я улица (линия Второй авеню, Ай-ар-ти)',en='23rd Street station (IRT Second Avenue Line)',eng='23rd Street',opened='1 марта 1880',closed='13 июня 1942',boro='M',type='o'},
{segment='Second 2',station='19-я улица (линия Второй авеню, Ай-ар-ти)',en='19th Street station (IRT Second Avenue Line)',eng='19th Street',opened='',closed='13 июня 1942',boro='M',type='o'},
{segment='Second 2',station='14-я улица (линия Второй авеню, Ай-ар-ти)',en='14th Street station (IRT Second Avenue Line)',eng='14th Street',opened='1 марта 1880',closed='13 июня 1942',boro='M'},
{segment='Second 2',station='Восьмая улица (линия Второй авеню, Ай-ар-ти)',en='Eighth Street station (IRT Second Avenue Line)',eng='Eighth Street',opened='1 марта 1880',closed='13 июня 1942',boro='M',type='o'},
{segment='Second 2',station='Первая улица (линия Второй авеню, Ай-ар-ти)',en='First Street station (IRT Second Avenue Line)',eng='First Street',opened='1 марта 1880',closed='13 июня 1942',boro='M',type='o'},
{segment='Second 2',station='Ривингтон-стрит (линия Второй авеню, Ай-ар-ти)',en='Rivington Street station',eng='Rivington Street',opened='1 марта 1880',closed='13 июня 1942',boro='M',type='o'},
{segment='Second 2',station='Гранд-стрит (линия Второй авеню, Ай-ар-ти)',en='Grand Street station (IRT Second Avenue Line)',eng='Grand Street',opened='1 марта 1880',closed='13 июня 1942',boro='M',type='o'},
{segment='Second 2',station='Канал-стрит (линия Второй авеню, Ай-ар-ти)',en='Canal Street station (IRT Second Avenue Line)',eng='Canal Street',opened='1 марта 1880',closed='13 июня 1942',boro='M',type='o'},
{segment='Second Chatham',station='Чатем-сквер (линия Второй авеню, Ай-ар-ти)',en='Chatham Square station',eng='Chatham Square',opened='1 марта 1880',closed='12 мая 1955',boro='M',
transfer='станция обслуживала поезда<br>линий [[Линия Второй авеню, Ай-ар-ти|Второй]] и [[Линия Третьей авеню, Ай-ар-ти|Третьей]] авеню'},
{segment='Second CH',station='Сити-холл (линия Второй авеню, Ай-ар-ти)',en='City Hall station (IRT Second Avenue Line)',eng='City Hall',opened='17 марта 1879',closed='31 декабря 1953',boro='M',
transfer='станция обслуживала поезда<br>линий [[Линия Второй авеню, Ай-ар-ти|Второй]] и [[Линия Третьей авеню, Ай-ар-ти|Третьей]] авеню'},
--{segment='Third GHR',station='Ган-Хилл-роуд (линия Третьей авеню, Ай-ар-ти)',eng='Gun Hill Road',opened='4 октября 1920',closed='29 апреля 1973',boro='Bx',
-- transfer='станция была на нижнем<br>уровне станции [[Ган-Хилл-роуд (линия Уайт-Плейнс-роуд, Ай-ар-ти)|Ган-Хилл-роуд]]'},
{segment='Third 1',station='210-я улица — Уильямсбридж (линия Третьей авеню, Ай-ар-ти)',en='210th Street–Williamsbridge station',eng='210th Street–Williamsbridge',opened='4 октября 1920',closed='29 апреля 1973',boro='Bx',type='o'},
{segment='Third 1',station='204-я улица (линия Третьей авеню, Ай-ар-ти)',en='204th Street station',eng='204th Street',opened='4 октября 1920',closed='29 апреля 1973',boro='Bx',type='o'},
{segment='Third 1',station='200-я улица (линия Третьей авеню, Ай-ар-ти)',en='200th Street station',eng='200th Street',opened='4 октября 1920',closed='29 апреля 1973',boro='Bx',type='o'},
{segment='Third 1',station='Бронкс-парк-терминал (линия Третьей авеню, Ай-ар-ти)',en='Bronx Park Terminal',eng='Bronx Park Terminal',opened='21 мая 1902',closed='14 ноября 1951',boro='Bx',spur='ne'},
{segment='Third 1',station='Фордем-роуд — 190-я улица (линия Третьей авеню, Ай-ар-ти)',en='Fordham Road–190th Street station',eng='Fordham Road–190th Street',opened='1 июля 1901',closed='29 апреля 1973',boro='Bx'},
{segment='Third 1',station='183-я улица (линия Третьей авеню, Ай-ар-ти)',en='183rd Street station (IRT Third Avenue Line)',eng='183rd Street',opened='1 июля 1901',closed='29 апреля 1973',boro='Bx',type='o'},
{segment='Third 1',station='180-я улица (линия Третьей авеню, Ай-ар-ти)',en='180th Street station (IRT Third Avenue Line)',eng='180th Street',opened='1 июля 1901',closed='29 апреля 1973',boro='Bx',type='o'},
{segment='Third 1',station='Тремонт-авеню — 177-я улица (линия Третьей авеню, Ай-ар-ти)',en='Tremont Avenue–177th Street station',eng='Tremont Avenue–177th Street',opened='20 июля 1891',closed='29 апреля 1973',boro='Bx'},
{segment='Third 1',station='174-я улица (линия Третьей авеню, Ай-ар-ти)',en='174th Street station (IRT Third Avenue Line)',eng='174th Street',opened='20 июля 1891',closed='29 апреля 1973',boro='Bx',type='o'},
{segment='Third 1',station='Клэрмонт-Паркуэй (линия Третьей авеню, Ай-ар-ти)',en='Claremont Parkway station',eng='Claremont Parkway',opened='19 сентября 1888',closed='29 апреля 1973',boro='Bx',type='o'},
{segment='Third 1',station='169-я улица (линия Третьей авеню, Ай-ар-ти)',en='169th Street station (IRT Third Avenue Line)',eng='169th Street',opened='2 сентября 1888',closed='29 апреля 1973',boro='Bx',type='o'},
{segment='Third 1',station='166-я улица (линия Третьей авеню, Ай-ар-ти)',en='166th Street station',eng='166th Street',opened='25 декабря 1887',closed='29 апреля 1973',boro='Bx',type='o'},
{segment='Third 1',station='161-я улица (линия Третьей авеню, Ай-ар-ти)',en='161st Street station (IRT Third Avenue Line)',eng='161st Street',opened='7 августа 1887',closed='29 апреля 1973',boro='Bx',type='o'},
{segment='Third 1',station='156-я улица (линия Третьей авеню, Ай-ар-ти)',en='156th Street station',eng='156th Street',opened='1 июля 1887',closed='29 апреля 1973',boro='Bx',type='o'},
{segment='Third 1',station='149-я улица (линия Третьей авеню, Ай-ар-ти)',en='149th Street station (IRT Third Avenue Line)',eng='149th Street',opened='16 июня 1887',closed='29 апреля 1973',boro='Bx',
transfer='была пересадка на станцию<br>[[Третья авеню — 149-я улица (линия Уайт-Плейнс-роуд, Ай-ар-ти)|Третья авеню — 149-я улица]]'},
{segment='Third 2',station='143-я улица (линия Третьей авеню, Ай-ар-ти)',en='143rd Street station',eng='143rd Street',opened='23 мая 1886',closed='12 мая 1955',boro='Bx'},
{segment='Third 2',station='138-я улица (линия Третьей авеню, Ай-ар-ти)',en='138th Street station (IRT Third Avenue Line)',eng='138th Street',opened='1 января 1887',closed='12 мая 1955',boro='Bx'},
{segment='Third 2',station='133-я улица (линия Третьей авеню, Ай-ар-ти)',en='133rd Street station',eng='133rd Street',opened='17 мая 1886',closed='12 мая 1955',boro='Bx'},
{segment='Third Willis',station='Уиллис-авеню (линия Третьей авеню, Ай-ар-ти)',en='Willis Avenue station',eng='Willis Avenue',opened='25 ноября 1886',closed='14 апреля 1924',boro='Bx',spur='ne'},
{segment='Third 129',station='129-я улица (линия Третьей авеню, Ай-ар-ти)',en='129th Street station',eng='129th Street',opened='30 декабря 1878',closed='12 мая 1955',boro='M',type='o',
transfer='станция обслуживала поезда<br>линий [[Линия Второй авеню, Ай-ар-ти|Второй]] и [[Линия Третьей авеню, Ай-ар-ти|Третьей]] авеню',above='Бронкс<hr>Манхэттен'},
{segment='Third 3',station='125-я улица (линия Третьей авеню, Ай-ар-ти)',en='125th Street station (IRT Third Avenue Line)',eng='125th Street',opened='30 декабря 1878',closed='12 мая 1955',boro='M'},
{segment='Third 3',station='116-я улица (линия Третьей авеню, Ай-ар-ти)',en='116th Street station (IRT Third Avenue Line)',eng='116th Street',opened='30 декабря 1878',closed='12 мая 1955',boro='M',type='o'},
{segment='Third 3',station='106-я улица (линия Третьей авеню, Ай-ар-ти)',en='106th Street station (IRT Third Avenue Line)',eng='106th Street',opened='30 декабря 1878',closed='12 мая 1955',boro='M'},
{segment='Third 3',station='99-я улица (линия Третьей авеню, Ай-ар-ти)',en='99th Street station (IRT Third Avenue Line)',eng='99th Street',opened='30 декабря 1878',closed='12 мая 1955',boro='M',type='o'},
{segment='Third 3',station='89-я улица (линия Третьей авеню, Ай-ар-ти)',en='89th Street station',eng='89th Street',opened='9 декабря 1878',closed='12 мая 1955',boro='M',type='o'},
{segment='Third 3',station='84-я улица (линия Третьей авеню, Ай-ар-ти)',en='84th Street station',eng='84th Street',opened='9 декабря 1878',closed='12 мая 1955',boro='M',type='o'},
{segment='Third 3',station='76-я улица (линия Третьей авеню, Ай-ар-ти)',en='76th Street station (IRT Third Avenue Line)',eng='76th Street',opened='9 декабря 1878',closed='12 мая 1955',boro='M',type='o'},
{segment='Third 3',station='67-я улица (линия Третьей авеню, Ай-ар-ти)',en='67th Street station',eng='67th Street',opened='16 сентября 1878',closed='12 мая 1955',boro='M',type='o'},
{segment='Third 3',station='59-я улица (линия Третьей авеню, Ай-ар-ти)',en='59th Street station (IRT Third Avenue Line)',eng='59th Street',opened='16 сентября 1878',closed='12 мая 1955',boro='M',type='o'},
{segment='Third 3',station='53-я улица (линия Третьей авеню, Ай-ар-ти)',en='53rd Street station (IRT Third Avenue Line)',eng='53rd Street',opened='16 сентября 1878',closed='12 мая 1955',boro='M',type='o'},
{segment='Third 3',station='47-я улица (линия Третьей авеню, Ай-ар-ти)',en='47th Street station (IRT Third Avenue Line)',eng='47th Street',opened='16 сентября 1878',closed='12 мая 1955',boro='M',type='o'},
{segment='Third 3',station='Центральный вокзал (линия Третьей авеню, Ай-ар-ти)',en='Grand Central station (IRT elevated)',eng='Grand Central',opened='26 августа 1878',closed='6 декабря 1923',boro='M',spur='nw'},
{segment='Third 3',station='42-я улица (линия Третьей авеню, Ай-ар-ти)',en='42nd Street station (IRT Third Avenue Line)',eng='42nd Street',opened='16 сентября 1878',closed='12 мая 1955',boro='M'},
{segment='Third 34',station='Паром 34-й улицы (линия Третьей авеню, Ай-ар-ти)',en='34th Street Ferry station',eng='34th Street Ferry',opened='1 июля 1880',closed='14 июля 1930',boro='M'},
{segment='Third 34',station='Вторая авеню (линия Третьей авеню, Ай-ар-ти)',en='34th Street station (IRT Second Avenue Line)',eng='Second Avenue',opened='',closed='14 июля 1930',boro='M',
transfer='станция обслуживала поезда<br>[[Линия Второй авеню, Ай-ар-ти|линии Второй авеню]] и [[Линия Третьей авеню, Ай-ар-ти|челнока 34 улицы]]'},
{segment='Third 4',station='34-я улица (линия Третьей авеню, Ай-ар-ти)',en='34th Street station (IRT Third Avenue Line)',eng='34th Street',opened='26 августа 1878',closed='12 мая 1955',boro='M',type='o',
transfer='<b>Заканчивался челнок 34 улицы</b>'},
{segment='Third 4',station='28-я улица (линия Третьей авеню, Ай-ар-ти)',en='28th Street station (IRT Third Avenue Line)',eng='28th Street',opened='',closed='12 мая 1955',boro='M',type='o'},
{segment='Third 4',station='23-я улица (линия Третьей авеню, Ай-ар-ти)',en='23rd Street station (IRT Third Avenue Line)',eng='23rd Street',opened='26 августа 1878',closed='12 мая 1955',boro='M'},
{segment='Third 4',station='18-я улица (линия Третьей авеню, Ай-ар-ти)',en='18th Street station (IRT Third Avenue Line)',eng='18th Street',opened='',closed='12 мая 1955',boro='M',type='o'},
{segment='Third 4',station='14-я улица (линия Третьей авеню, Ай-ар-ти)',en='14th Street station (IRT Third Avenue Line)',eng='14th Street',opened='26 августа 1878',closed='12 мая 1955',boro='M',type='o'},
{segment='Third 4',station='Девятая улица (линия Третьей авеню, Ай-ар-ти)',en='Ninth Street station (IRT Third Avenue Line)',eng='Ninth Street',opened='26 августа 1878',closed='12 мая 1955',boro='M'},
{segment='Third 4',station='Хаустон-стрит (линия Третьей авеню, Ай-ар-ти)',en='Houston Street station (IRT Third Avenue Line)',eng='Houston Street',opened='16 сентября 1878',closed='12 мая 1955',boro='M'},
{segment='Third 4',station='Гранд-стрит (линия Третьей авеню, Ай-ар-ти)',en='Grand Street station (IRT Third Avenue Line)',eng='Grand Street',opened='',closed='12 мая 1955',boro='M'},
{segment='Third 4',station='Канал-стрит (линия Третьей авеню, Ай-ар-ти)',en='Canal Street station (IRT Third Avenue Line)',eng='Canal Street',opened='',closed='12 мая 1955',boro='M'},
{segment='Third Chatham',station='Чатем-сквер (линия Третьей авеню, Ай-ар-ти)',en='Chatham Square station',eng='Chatham Square',opened='17 марта 1879',closed='31 декабря 1953',boro='M',
transfer='станция обслуживала поезда<br>линий [[Линия Второй авеню, Ай-ар-ти|Второй]] и [[Линия Третьей авеню, Ай-ар-ти|Третьей]] авеню'},
{segment='Third CH',station='Сити-холл (линия Третьей авеню, Ай-ар-ти)',en='City Hall station (IRT Second Avenue Line)',eng='City Hall',opened='17 марта 1879',closed='31 декабря 1953',boro='M',
transfer='станция обслуживала поезда<br>линий [[Линия Второй авеню, Ай-ар-ти|Второй]] и [[Линия Третьей авеню, Ай-ар-ти|Третьей]] авеню',spur='sw'},
{segment='Third 5',station='Франклин-сквер (линия Третьей авеню, Ай-ар-ти)',en='Franklin Square station (IRT Third Avenue Line)',eng='Franklin Square',opened='26 августа 1878',closed='22 декабря 1950',boro='M'},
{segment='Third 5',station='Фултон-стрит (линия Третьей авеню, Ай-ар-ти)',en='Fulton Street station (IRT Third Avenue Line)',eng='Fulton Street',opened='26 августа 1878',closed='22 декабря 1950',boro='M'},
{segment='Third 5',station='Хановер-сквер (линия Третьей авеню, Ай-ар-ти)',en='Hanover Square station',eng='Hanover Square',opened='26 августа 1878',closed='22 декабря 1950',boro='M'},
{segment='SF elevated',station='Саут-Ферри (линия Третьей авеню, Ай-ар-ти)',en='South Ferry station (IRT elevated)',eng='South Ferry',opened='26 августа 1878',closed='22 декабря 1950',boro='M',
transfer='станция обслуживала поезда<br>линий [[Линия Третьей авеню, Ай-ар-ти|Третьей]], [[Линия Шестой авеню, Ай-ар-ти|Шестой]] и [[Линия Девятой авеню, Ай-ар-ти|Девятой]] авеню'},
{segment='Sixth 1',station='53-я улица и Восьмая авеню (линия Шестой авеню, Ай-ар-ти)',en='53rd Street and Eighth Avenue station',eng='53rd Street and Eighth Avenue',opened='1881',closed='4 декабря 1938',boro='M',type='o'},
{segment='Sixth 1',station='Терминал 58-й улицы (линия Шестой авеню, Ай-ар-ти)',en='58th Street Terminal',eng='58th Street Terminal',opened='5 июня 1878',closed='16 июня 1924',boro='M',spur='ne'},
{segment='Sixth 1',station='50-я улица (линия Шестой авеню, Ай-ар-ти)',en='50th Street station (IRT Sixth Avenue Line)',eng='50th Street',opened='5 июня 1878',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='42-я улица (линия Шестой авеню, Ай-ар-ти)',en='42nd Street station (IRT Sixth Avenue Line)',eng='42nd Street',opened='5 июня 1878',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='38-я улица (линия Шестой авеню, Ай-ар-ти)',en='38th Street station (IRT Sixth Avenue Line)',eng='38th Street',opened='31 января 1914',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='33-я улица (линия Шестой авеню, Ай-ар-ти)',en='33rd Street station (IRT Sixth Avenue Line)',eng='33rd Street',opened='5 июня 1878',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='28-я улица (линия Шестой авеню, Ай-ар-ти)',en='28th Street station (IRT Sixth Avenue Line)',eng='28th Street',opened='1892',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='23-я улица (линия Шестой авеню, Ай-ар-ти)',en='23rd Street station (IRT Sixth Avenue Line)',eng='23rd Street',opened='5 июня 1878',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='18-я улица (линия Шестой авеню, Ай-ар-ти)',en='18th Street station (IRT Sixth Avenue Line)',eng='18th Street',opened='1892',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='14-я улица (линия Шестой авеню, Ай-ар-ти)',en='14th Street station (IRT Sixth Avenue Line)',eng='14th Street',opened='5 июня 1878',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='Восьмая улица (линия Шестой авеню, Ай-ар-ти)',en='Eighth Street station (IRT Sixth Avenue Line)',eng='Eighth Street',opened='5 июня 1878',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='Бликер-стрит (линия Шестой авеню, Ай-ар-ти)',en='Bleecker Street station (IRT Sixth Avenue Line)',eng='Bleecker Street',opened='5 июня 1878',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='Гранд-стрит (линия Шестой авеню, Ай-ар-ти)',en='Grand Street station (IRT Sixth Avenue Line)',eng='Grand Street',opened='5 июня 1878',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='Франклин-стрит (линия Шестой авеню, Ай-ар-ти)',en='Franklin Street station (IRT Sixth Avenue Line)',eng='Franklin Street',opened='5 июня 1878',closed='4 декабря 1938',boro='M',type='o'},
{segment='Sixth 1',station='Чеймберс-стрит (линия Шестой авеню, Ай-ар-ти)',en='Chambers Street station (IRT Sixth Avenue Line)',eng='Chambers Street',opened='5 июня 1878',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='Парк-Плейс (линия Шестой авеню, Ай-ар-ти)',en='Park Place station (IRT Sixth Avenue Line)',eng='Park Place',opened='5 июня 1878',closed='4 декабря 1938',boro='M'},
{segment='Sixth 1',station='Кортландт-стрит (линия Шестой авеню, Ай-ар-ти)',en='Cortlandt Street station (IRT Sixth Avenue Line)',eng='Cortlandt Street',opened='5 июня 1878',closed='4 декабря 1938',boro='M',type='o'},
{segment='Sixth 1',station='Ректор-стрит (линия Шестой авеню, Ай-ар-ти)',en='Rector Street station (IRT Sixth Avenue Line)',eng='Rector Street',opened='5 июня 1878',closed='4 декабря 1938',boro='M',type='o'},
{segment='BP',station='Баттери-Плейс (линия Шестой авеню, Ай-ар-ти)',en='Battery Place station',eng='Battery Place',opened='',closed='11 июня 1940',boro='M',
transfer='станция обслуживала поезда<br>линий [[Линия Шестой авеню, Ай-ар-ти|Шестой]] и [[Линия Девятой авеню, Ай-ар-ти|Девятой]] авеню'},
{segment='Ninth 1',station='Андерсон-авеню — Джером-авеню (линия Девятой авеню, Ай-ар-ти)',en='Anderson–Jerome Avenues station',eng='Anderson–Jerome Avenues',opened='1 июля 1918',closed='31 августа 1958',struc='эстакадная и подземная',boro='Bx',
transfer='частично сохранилась'},
{segment='Ninth 1',station='Седжвик-авеню (линия Девятой авеню, Ай-ар-ти)',en='Sedgwick Avenue station',eng='Sedgwick Avenue',opened='1 июля 1918',closed='31 августа 1958',struc='эстакадная и подземная',boro='Bx',
transfer='частично сохранилась'},
{segment='Ninth 1',station='155-я улица (линия Девятой авеню, Ай-ар-ти)',en='155th Street station (IRT Ninth Avenue Line)',eng='155th Street',opened='1879',closed='31 августа 1958',boro='M',above='Бронкс<hr>Манхэттен'},
{segment='Ninth 1',station='151-я улица (линия Девятой авеню, Ай-ар-ти)',en='151st Street station',eng='151st Street',opened='15 ноября 1917',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 1',station='145-я улица (линия Девятой авеню, Ай-ар-ти)',en='145th Street station (IRT Ninth Avenue Line)',eng='145th Street',opened='1 декабря 1879',closed='11 июня 1940',boro='M'},
{segment='Ninth 1',station='140-я улица (линия Девятой авеню, Ай-ар-ти)',en='140th Street station (IRT Ninth Avenue Line)',eng='140th Street',opened='27 сентября 1879',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 1',station='135-я улица (линия Девятой авеню, Ай-ар-ти)',en='135th Street station (IRT Ninth Avenue Line)',eng='135th Street',opened='27 сентября 1879',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 1',station='130-я улица (линия Девятой авеню, Ай-ар-ти)',en='130th Street station',eng='130th Street',opened='27 сентября 1879',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 1',station='125-я улица (линия Девятой авеню, Ай-ар-ти)',en='125th Street station (IRT Ninth Avenue Line)',eng='125th Street',opened='17 сентября 1879',closed='11 июня 1940',boro='M'},
{segment='Ninth 1',station='116-я улица (линия Девятой авеню, Ай-ар-ти)',en='116th Street station (IRT Ninth Avenue Line)',eng='116th Street',opened='17 сентября 1879',closed='11 июня 1940',boro='M'},
{segment='Ninth 1',station='110-я улица (линия Девятой авеню, Ай-ар-ти)',en='110th Street station (IRT Ninth Avenue Line)',eng='110th Street',opened='3 июня 1903',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 1',station='104-я улица (линия Девятой авеню, Ай-ар-ти)',en='104th Street station (IRT Ninth Avenue Line)',eng='104th Street',opened='21 июня 1879',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 1',station='99-я улица (линия Девятой авеню, Ай-ар-ти)',en='99th Street station (IRT Ninth Avenue Line)',eng='99th Street',opened='21 июня 1879',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 1',station='93-я улица (линия Девятой авеню, Ай-ар-ти)',en='93rd Street station',eng='93rd Street',opened='21 июня 1879',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 1',station='86-я улица (линия Девятой авеню, Ай-ар-ти)',en='86th Street station (IRT Ninth Avenue Line)',eng='86th Street',opened='21 июня 1879',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 1',station='81-я улица (линия Девятой авеню, Ай-ар-ти)',en='81st Street station (IRT Ninth Avenue Line)',eng='81st Street',opened='9 июня 1879',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 1',station='72-я улица (линия Девятой авеню, Ай-ар-ти)',en='72nd Street station (IRT Ninth Avenue Line)',eng='72nd Street',opened='9 июня 1879',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 1',station='66-я улица (линия Девятой авеню, Ай-ар-ти)',en='66th Street station (IRT Ninth Avenue Line)',eng='66th Street',opened='',closed='11 июня 1940',boro='M'},
{segment='Ninth 1',station='59-я улица (линия Девятой авеню, Ай-ар-ти)',en='59th Street station (IRT Ninth Avenue Line)',eng='59th Street',opened='9 июня 1879',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 2',station='50-я улица (линия Девятой авеню, Ай-ар-ти)',en='50th Street station (IRT Ninth Avenue Line)',eng='50th Street',opened='18 января 1876',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 2',station='42-я улица (линия Девятой авеню, Ай-ар-ти)',en='42nd Street station (IRT Ninth Avenue Line)',eng='42nd Street',opened='6 ноября 1875',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 2',station='34-я улица (линия Девятой авеню, Ай-ар-ти)',en='34th Street station (IRT Ninth Avenue Line)',eng='34th Street',opened='30 июля 1873',closed='11 июня 1940',boro='M'},
{segment='Ninth 2',station='30-я улица (линия Девятой авеню, Ай-ар-ти)',en='30th Street station (IRT Ninth Avenue Line)',eng='30th Street',opened='13 декабря 1873',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 2',station='23-я улица (линия Девятой авеню, Ай-ар-ти)',en='23rd Street station (IRT Ninth Avenue Line)',eng='23rd Street',opened='21 октября 1873',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 2',station='14-я улица (линия Девятой авеню, Ай-ар-ти)',en='14th Street station (IRT Ninth Avenue Line)',eng='14th Street',opened='',closed='11 июня 1940',boro='M'},
{segment='Ninth 2',station='Кристофер-стрит (линия Девятой авеню, Ай-ар-ти)',en='Christopher Street station (IRT Ninth Avenue Line)',eng='Christopher Street',opened='3 ноября 1873',closed='11 июня 1940',boro='M'},
{segment='Ninth 2',station='Хаустон-стрит (линия Девятой авеню, Ай-ар-ти)',en='Houston Street station (IRT Ninth Avenue Line)',eng='Houston Street',opened='3 ноября 1873',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 2',station='Дебросс-стрит (линия Девятой авеню, Ай-ар-ти)',en='Desbrosses Street station',eng='Desbrosses Street',opened='23 ноября 1873',closed='11 июня 1940',boro='M'},
{segment='Ninth 2',station='Франклин-стрит (линия Девятой авеню, Ай-ар-ти)',en='Franklin Street station (IRT Ninth Avenue Line)',eng='Franklin Street',opened='21 января 1873',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 2',station='Уоррен-стрит (линия Девятой авеню, Ай-ар-ти)',en='Warren Street station (IRT Ninth Avenue Line)',eng='Warren Street',opened='14 февраля 1870',closed='11 июня 1940',boro='M'},
{segment='Ninth 2',station='Баркли-стрит (линия Девятой авеню, Ай-ар-ти)',en='Barclay Street station',eng='Barclay Street',opened='14 февраля 1870',closed='11 июня 1940',boro='M',type='o'},
{segment='Ninth 2',station='Кортландт-стрит (линия Девятой авеню, Ай-ар-ти)',en='Cortlandt Street station (IRT Ninth Avenue Line)',eng='Cortlandt Street',opened='25 мая 1874',closed='11 июня 1940',boro='M'},
{segment='Ninth 2',station='Ректор-стрит (линия Девятой авеню, Ай-ар-ти)',en='Rector Street station (IRT Ninth Avenue Line)',eng='Rector Street',opened='25 мая 1874',closed='11 июня 1940',boro='M'}, --two additional tracks ended at a bumper just south of the station
{segment='Fifth 1',station='Фултон-стрит (линия Пятой авеню, Би-эм-ти)',en='Fulton Street station (BMT Fifth Avenue Line)',eng='Fulton Street',opened='27 июля 1889',closed='1 июня 1940',boro='B'},
{segment='Fifth 1',station='Атлантик-авеню (линия Пятой авеню, Би-эм-ти)',en='Atlantic Avenue (BMT Fifth Avenue Line)',eng='Atlantic Avenue',opened='5 ноября 1888',closed='1 июня 1940',boro='B',
transfer='была пересадка на станции «Атлантик-авеню»<br>линий [[Атлантик-авеню — Барклайс-центр (линия Брайтон, Би-эм-ти)|Брайтон]] и [[Атлантик-авеню — Барклайс-центр (линия Четвёртой авеню, Би-эм-ти)|Четвёртой авеню]]'},
{segment='Fifth 1',station='Сент-Маркс-авеню (линия Пятой авеню, Би-эм-ти)',en='Saint Marks Avenue station',eng='St. Marks Avenue',opened='22 июня 1889',closed='1 июня 1940',boro='B'},
{segment='Fifth 1',station='Юнион-стрит (линия Пятой авеню, Би-эм-ти)',en='Union Street station (BMT Fifth Avenue Line)',eng='Union Street',opened='22 июня 1889',closed='1 июня 1940',boro='B'},
{segment='Fifth 1',station='Третья улица (линия Пятой авеню, Би-эм-ти)',en='Third Street station (BMT Fifth Avenue Line)',eng='Third Street',opened='22 июня 1889',closed='1 июня 1940',boro='B'},
{segment='Fifth 1',station='Девятая улица (линия Пятой авеню, Би-эм-ти)',en='Ninth Street station (BMT Fifth Avenue Line)',eng='Ninth Street',opened='15 августа 1889',closed='1 июня 1940',boro='B'},
{segment='Fifth 1',station='16-я улица (линия Пятой авеню, Би-эм-ти)',en='16th Street station (BMT Fifth Avenue Line)',eng='16th Street',opened='15 августа 1889',closed='1 июня 1940',boro='B'},
{segment='Fifth 1',station='20-я улица (линия Пятой авеню, Би-эм-ти)',en='20th Street station (BMT Fifth Avenue Line)',eng='20th Street',opened='15 августа 1889',closed='1 июня 1940',boro='B'},
{segment='Fifth 1',station='25-я улица (линия Пятой авеню, Би-эм-ти)',en='25th Street station (BMT Fifth Avenue Line)',eng='25th Street',opened='15 августа 1889',closed='1 июня 1940',boro='B'},
{segment='Fifth 1',station='36-я улица (линия Пятой авеню, Би-эм-ти)',en='36th Street station (BMT Fifth Avenue Line)',eng='36th Street',opened='29 мая 1890',closed='1 июня 1940',boro='B'},
{segment='Fifth 2',station='40-я улица (линия Пятой авеню, Би-эм-ти)',en='40th Street station (BMT Fifth Avenue Line)',eng='40th Street',opened='1 октября 1893',closed='1 июня 1940',boro='B'},
{segment='Fifth 2',station='46-я улица (линия Пятой авеню, Би-эм-ти)',en='46th Street station (BMT Fifth Avenue Line)',eng='46th Street',opened='1 октября 1893',closed='1 июня 1940',boro='B'},
{segment='Fifth 2',station='52-я улица (линия Пятой авеню, Би-эм-ти)',en='52nd Street station (BMT Fifth Avenue Line)',eng='52nd Street',opened='1 октября 1893',closed='1 июня 1940',boro='B'},
{segment='Fifth 2',station='58-я улица (линия Пятой авеню, Би-эм-ти)',en='58th Street station (BMT Fifth Avenue Line)',eng='58th Street',opened='1 октября 1893',closed='1 июня 1940',boro='B'},
{segment='Fifth 2',station='65-я улица (линия Пятой авеню, Би-эм-ти)',en='65th Street Terminal station',eng='65th Street',opened='1 октября 1893',closed='1 июня 1940',boro='B'},
{segment='FF',station='Фултон-Ферри (линия Фултон-стрит, Би-эм-ти)',en='Fulton Ferry station',eng='Fulton Ferry',opened='24 апреля 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 0',station='Кларк-стрит (линия Фултон-стрит, Би-эм-ти)',station2='Тиллари-стрит (линия Фултон-стрит, Би-эм-ти)',en='Clark–Tillary Streets station',eng='Clark Street, Tillary Street',opened='24 апреля 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 0',station='Корт-стрит (линия Фултон-стрит, Би-эм-ти)',station2='Мертл-авеню (линия Фултон-стрит, Би-эм-ти)',en='Court Street–Myrtle Avenue station',eng='Court Street, Myrtle Avenue',opened='24 апреля 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 0',station='Борум-Плейс (линия Фултон-стрит, Би-эм-ти)',en='Boerum Place station',eng='Boerum Place',opened='24 апреля 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 0',station='Элм-Плейс — Даффилд-стрит (линия Фултон-стрит, Би-эм-ти)',en='Elm Place–Duffield Street station',eng='Elm Place–Duffield Street',opened='24 апреля 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 0',station='Флатбуш-авеню (линия Фултон-стрит, Би-эм-ти)',en='Flatbush Avenue station (BMT Fulton Street Line)',eng='Flatbush Avenue',opened='24 апреля 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 0',station='Лафайетт-авеню (линия Фултон-стрит, Би-эм-ти)',en='Lafayette Avenue station (BMT Fulton Street Line)',eng='Lafayette Avenue',opened='24 апреля 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 0',station='Камберленд-стрит (линия Фултон-стрит, Би-эм-ти)',en='Cumberland Avenue station (BMT Fulton Street Line)',eng='Cumberland Street',opened='24 апреля 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 0',station='Вандербилт-авеню (линия Фултон-стрит, Би-эм-ти)',en='Vanderbilt Avenue station (BMT Fulton Street Line)',eng='Vanderbilt Avenue',opened='24 апреля 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 0',station='Гранд-авеню (линия Фултон-стрит, Би-эм-ти)',en='Grand Avenue station (BMT Fulton Street Line)',eng='Grand Avenue',opened='24 апреля 1888',closed='1 июня 1940',boro='B'},
--{segment='Ful 0',station='Франклин-авеню (линия Фултон-стрит, Би-эм-ти)',en='Franklin Avenue (BMT Fulton Street Line) original station',eng='Franklin Avenue',opened='24 апреля 1888',closed='1 июня 1940',boro='B',
-- transfer='была пересадка на станцию<br>[[Франклин-авеню (линия Франклин-авеню, Би-эм-ти)|Франклин-авеню]]'},
{segment='Ful 1',station='Ностранд-авеню (линия Фултон-стрит, Би-эм-ти)',en='Nostrand Avenue station (BMT Fulton Street Line)',eng='Nostrand Avenue',opened='24 апреля 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 1',station='Бруклин-авеню (линия Фултон-стрит, Би-эм-ти)',station2='Томпкинс-авеню (линия Фултон-стрит, Би-эм-ти)',en='Brooklyn–Tompkins Avenues station',eng='Brooklyn Avenue, Tompkins Avenue',opened='30 мая 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 1',station='Олбани-авеню (линия Фултон-стрит, Би-эм-ти)',station2='Самнер-авеню (линия Фултон-стрит, Би-эм-ти)',en='Albany–Sumner Avenues station',eng='Albany Avenue, Sumner Avenue (westbound)',opened='30 мая 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 1',station='Трой-авеню (линия Фултон-стрит, Би-эм-ти)',en='Troy Avenue station',eng='Troy Avenue',opened='середина 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 1',station='Рид-авеню (линия Фултон-стрит, Би-эм-ти)',en='Reid Avenue station (BMT Fulton Street Line)',eng='Reid Avenue',opened='середина 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 1',station='Ральф-авеню (линия Фултон-стрит, Би-эм-ти)',en='Ralph Avenue station (BMT Fulton Street Line)',eng='Ralph Avenue',opened='1 октября 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 1',station='Саратога-авеню (линия Фултон-стрит, Би-эм-ти)',en='Saratoga Avenue station (BMT Fulton Street Line)',eng='Saratoga Avenue',opened='3 декабря 1888',closed='1 июня 1940',boro='B'},
{segment='Ful 1',station='Рокавей-авеню (линия Фултон-стрит, Би-эм-ти)',en='Rockaway Avenue station (BMT Fulton Street Line)',eng='Rockaway Avenue',opened='16 ноября 1888',closed='26 апреля 1956',boro='B'},
{segment='Ful 1',station='Манхэттен-Джанкшен (линия Фултон-стрит, Би-эм-ти)',en='Manhattan Junction (BMT Fulton Street Line)',eng='Manhattan Junction',opened='4 июля 1889',closed='26 апреля 1956',boro='B',
transfer='станция входила в пересадочный<br>узел [[Бродвей-Джанкшен (Нью-Йоркское метро)|Бродвей-Джанкшен]]'},
--{segment='Ful 2',station='Истерн-Паркуэй (линия Фултон-стрит, Би-эм-ти)',en='Eastern Parkway station',eng='Eastern Parkway',opened='18 ноября 1889',closed='17 ноября 1918',boro='B'},
{segment='Ful 2',station='Хинсдейл-стрит (линия Фултон-стрит, Би-эм-ти)',en='Hinsdale Street station',eng='Hinsdale Street',opened='17 ноября 1918',closed='26 апреля 1956',boro='B'},
{segment='Ful 2',station='Пенсильвейния-авеню (линия Фултон-стрит, Би-эм-ти)',en='Pennsylvania Avenue station (BMT Fulton Street Line)',eng='Pennsylvania Avenue',opened='18 ноября 1889',closed='26 апреля 1956',boro='B'},
{segment='Ful 2',station='Ван-Сиклен-авеню (линия Фултон-стрит, Би-эм-ти)',en='Van Siclen Avenue station (BMT Fulton Street Line)',eng='Van Siclen Avenue',opened='18 ноября 1889',closed='26 апреля 1956',boro='B'},
{segment='Ful 2',station='Линвуд-стрит (линия Фултон-стрит, Би-эм-ти)',en='Linwood Street station',eng='Linwood Street',opened='22 февраля 1892',closed='26 апреля 1956',boro='B'},
{segment='Ful 2',station='Монток-авеню (линия Фултон-стрит, Би-эм-ти)',en='Montauk Avenue station',eng='Montauk Avenue',opened='21 марта 1892',closed='26 апреля 1956',boro='B'},
{segment='Ful 2',station='Честнат-стрит (линия Фултон-стрит, Би-эм-ти)',en='Chestnut Street station (BMT Fulton Street Line)',eng='Chestnut Street',opened='16 июля 1894',closed='26 апреля 1956',boro='B'},
{segment='Ful 2',station='Кресент-стрит (линия Фултон-стрит, Би-эм-ти)',en='Crescent Street station (BMT Fulton Street Line)',eng='Crescent Street',opened='16 июля 1894',closed='26 апреля 1956',boro='B'},
{segment='Ful 2',station='Грант-авеню (линия Фултон-стрит, Би-эм-ти)',en='Grant Avenue station (BMT Fulton Street Line)',eng='Grant Avenue',opened='16 июля 1894',closed='26 апреля 1956',boro='B'},
{segment='Lex 1',station='Мертл-авеню (линия Лексингтон-авеню, Би-эм-ти)',en='Myrtle Avenue station (BMT Lexington Avenue Line)',eng='Myrtle Avenue',opened='после 1912',closed='13 октября 1950',boro='B'},
{segment='Lex 1',station='Декалб-авеню (линия Лексингтон-авеню, Би-эм-ти)',en='DeKalb Avenue station (BMT Lexington Avenue Line)',eng='DeKalb Avenue',opened='13 мая 1885',closed='13 октября 1950',boro='B'},
{segment='Lex 1',station='Грин-авеню (линия Лексингтон-авеню, Би-эм-ти)',en='Greene Avenue station',eng='Greene Avenue',opened='13 мая 1885',closed='13 октября 1950',boro='B'},
{segment='Lex 1',station='Франклин-авеню (линия Лексингтон-авеню, Би-эм-ти)',en='Franklin Avenue station (BMT Lexington Avenue Line)',eng='Franklin Avenue',opened='13 мая 1885',closed='13 октября 1950',boro='B'},
{segment='Lex 1',station='Ностранд-авеню (линия Лексингтон-авеню, Би-эм-ти)',en='Nostrand Avenue station (BMT Lexington Avenue Line)',eng='Nostrand Avenue',opened='13 мая 1885',closed='13 октября 1950',boro='B'},
{segment='Lex 1',station='Томпкинс-авеню (линия Лексингтон-авеню, Би-эм-ти)',en='Tompkins Avenue station (BMT Lexington Avenue Line)',eng='Tompkins Avenue',opened='13 мая 1885',closed='13 октября 1950',boro='B'},
{segment='Lex 1',station='Самнер-авеню (линия Лексингтон-авеню, Би-эм-ти)',en='Sumner Avenue station (BMT Lexington Avenue Line)',eng='Sumner Avenue',opened='13 мая 1885',closed='13 октября 1950',boro='B'},
{segment='Lex 1',station='Рид-авеню (линия Лексингтон-авеню, Би-эм-ти)',en='Reid Avenue station (BMT Lexington Avenue Line)',eng='Reid Avenue',opened='13 мая 1885',closed='13 октября 1950',boro='B'},
{segment='WF',station='Уорлдс-Фэр (линия Всемирной выставки, Ай-эн-ди)',en='World\'s Fair station',eng='World’s Fair',opened='30 апреля 1939',closed='28 октября 1940',struc='наземная',boro='Q'},
}
local twins = {
['Канал-стрит (линия Бродвея, Би-эм-ти)']={
eng='Canal Street',
comment1='на ветке через тоннель',
comment2='на ветке через мост',
station1='Канал-стрит (линия Бродвея, Би-эм-ти, через тоннель)',
station2='Канал-стрит (линия Бродвея, Би-эм-ти, через мост)'
},
['Чеймберс-стрит — Всемирный торговый центр (линия Восьмой авеню, Ай-эн-ди)']={
eng='Chambers Street–World Trade Center',
comment1='«Чеймберс-стрит»',
comment2='«ВТЦ»',
station1='Чеймберс-стрит (линия Восьмой авеню, Ай-эн-ди)',
station2='Всемирный торговый центр (линия Восьмой авеню, Ай-эн-ди)'
},
}
local routes_periods = {
{route='1',period='rh',segment='Bway7 North Tip'},
{route='1',period='rh',segment='Bway7 North'},
{route='1',period='rh',segment='Bway7 Middle'},
{route='1',period='rh',segment='Bway7a'},
{route='1',period='rh',segment='Bway7b'},
{route='1',period='rh',segment='Bway7 South Tip'},
{route='1',period='md',segment='Bway7 North Tip'},
{route='1',period='md',segment='Bway7 North'},
{route='1',period='md',segment='Bway7 Middle'},
{route='1',period='md',segment='Bway7a'},
{route='1',period='md',segment='Bway7b'},
{route='1',period='md',segment='Bway7 South Tip'},
{route='1',period='ev',segment='Bway7 North Tip'},
{route='1',period='ev',segment='Bway7 North'},
{route='1',period='ev',segment='Bway7 Middle'},
{route='1',period='ev',segment='Bway7a'},
{route='1',period='ev',segment='Bway7b'},
{route='1',period='ev',segment='Bway7 South Tip'},
{route='1',period='we',segment='Bway7 North Tip'},
{route='1',period='we',segment='Bway7 North'},
{route='1',period='we',segment='Bway7 Middle'},
{route='1',period='we',segment='Bway7a'},
{route='1',period='we',segment='Bway7b'},
{route='1',period='we',segment='Bway7 South Tip'},
{route='1',period='ln',segment='Bway7 North Tip'},
{route='1',period='ln',segment='Bway7 North'},
{route='1',period='ln',segment='Bway7 Middle'},
{route='1',period='ln',segment='Bway7a'},
{route='1',period='ln',segment='Bway7b'},
{route='1',period='ln',segment='Bway7 South Tip'},
{route='2',period='rh',segment='WPR North Tip',pattern='o '},
{route='2',period='rh',segment='WPR North'},
{route='2',period='rh',segment='E180'},
{route='2',period='rh',segment='WPR South'},
{route='2',period='rh',segment='WPR South Tip'},
{route='2',period='rh',segment='Lenox South'},
{route='2',period='rh',segment='Bway7a',how='x'},
{route='2',period='rh',segment='Bway7b',how='x'},
{route='2',period='rh',segment='Bway7 South'},
{route='2',period='rh',segment='Hoyt'},
{route='2',period='rh',segment='EP',shape='|\\'},
{route='2',period='rh',segment='Nostrand',pattern='o|'},
{route='2',period='rh',segment='EP East',dir='peak+',fork='south',pattern=' o'},
{route='2',period='rh',segment='NL',dir='peak+'},
{route='2',period='md',segment='WPR North Tip'},
{route='2',period='md',segment='WPR North'},
{route='2',period='md',segment='E180'},
{route='2',period='md',segment='WPR South'},
{route='2',period='md',segment='WPR South Tip'},
{route='2',period='md',segment='Lenox South'},
{route='2',period='md',segment='Bway7a',how='x'},
{route='2',period='md',segment='Bway7b',how='x'},
{route='2',period='md',segment='Bway7 South'},
{route='2',period='md',segment='Hoyt'},
{route='2',period='md',segment='EP'},
{route='2',period='md',segment='Nostrand'},
{route='2',period='ev',segment='WPR North Tip'},
{route='2',period='ev',segment='WPR North'},
{route='2',period='ev',segment='E180'},
{route='2',period='ev',segment='WPR South'},
{route='2',period='ev',segment='WPR South Tip'},
{route='2',period='ev',segment='Lenox South'},
{route='2',period='ev',segment='Bway7a',how='x'},
{route='2',period='ev',segment='Bway7b',how='x'},
{route='2',period='ev',segment='Bway7 South'},
{route='2',period='ev',segment='Hoyt'},
{route='2',period='ev',segment='EP'},
{route='2',period='ev',segment='Nostrand'},
{route='2',period='we',segment='WPR North Tip'},
{route='2',period='we',segment='WPR North'},
{route='2',period='we',segment='E180'},
{route='2',period='we',segment='WPR South'},
{route='2',period='we',segment='WPR South Tip'},
{route='2',period='we',segment='Lenox South'},
{route='2',period='we',segment='Bway7a',how='x'},
{route='2',period='we',segment='Bway7b',how='x'},
{route='2',period='we',segment='Bway7 South'},
{route='2',period='we',segment='Hoyt'},
{route='2',period='we',segment='EP'},
{route='2',period='we',segment='Nostrand'},
{route='2',period='ln',segment='WPR North Tip'},
{route='2',period='ln',segment='WPR North'},
{route='2',period='ln',segment='E180'},
{route='2',period='ln',segment='WPR South'},
{route='2',period='ln',segment='WPR South Tip'},
{route='2',period='ln',segment='Lenox South'},
{route='2',period='ln',segment='Bway7a'},
{route='2',period='ln',segment='Bway7b'},
{route='2',period='ln',segment='Bway7 South'},
{route='2',period='ln',segment='Hoyt'},
{route='2',period='ln',segment='EP'},
{route='2',period='ln',segment='Nostrand'},
{route='3',period='rh',segment='Lenox North'},
{route='3',period='rh',segment='Lenox South'},
{route='3',period='rh',segment='Bway7a',how='x'},
{route='3',period='rh',segment='Bway7b',how='x'},
{route='3',period='rh',segment='Bway7 South'},
{route='3',period='rh',segment='Hoyt'},
{route='3',period='rh',segment='EP'},
{route='3',period='rh',segment='EP East'},
{route='3',period='rh',segment='NL'},
{route='3',period='md',segment='Lenox North'},
{route='3',period='md',segment='Lenox South'},
{route='3',period='md',segment='Bway7a',how='x'},
{route='3',period='md',segment='Bway7b',how='x'},
{route='3',period='md',segment='Bway7 South'},
{route='3',period='md',segment='Hoyt'},
{route='3',period='md',segment='EP'},
{route='3',period='md',segment='EP East'},
{route='3',period='md',segment='NL'},
{route='3',period='ev',segment='Lenox North'},
{route='3',period='ev',segment='Lenox South'},
{route='3',period='ev',segment='Bway7a',how='x'},
{route='3',period='ev',segment='Bway7b',how='x'},
{route='3',period='ev',segment='Bway7 South'},
{route='3',period='ev',segment='Hoyt'},
{route='3',period='ev',segment='EP'},
{route='3',period='ev',segment='EP East'},
{route='3',period='ev',segment='NL'},
{route='3',period='we',segment='Lenox North'},
{route='3',period='we',segment='Lenox South'},
{route='3',period='we',segment='Bway7a',how='x'},
{route='3',period='we',segment='Bway7b',how='x'},
{route='3',period='we',segment='Bway7 South'},
{route='3',period='we',segment='Hoyt'},
{route='3',period='we',segment='EP'},
{route='3',period='we',segment='EP East'},
{route='3',period='we',segment='NL'},
{route='3',period='ln',segment='Lenox North'},
{route='3',period='ln',segment='Lenox South'},
{route='3',period='ln',segment='Bway7a',how='x'},
{route='4',period='rh',segment='Jerome 2'},
{route='4',period='rh',segment='Jerome 1'},
-- {route='4',period='rh',segment='Jerome 2',dir='2'},
-- {route='4',period='rh',segment='Jerome 1',dir='2'},
-- {route='4',period='rh',segment='Jerome 1',dir='1',how='x',except=true},
{route='4',period='rh',segment='Jerome'},
{route='4',period='rh',segment='149',how='x',dir='peak'},
{route='4',period='rh',segment='138',how='x',dir='peak'},
{route='4',period='rh',segment='Lex North',how='x'},
{route='4',period='rh',segment='Lex',how='x'},
{route='4',period='rh',segment='Lex South'},
{route='4',period='rh',segment='BHall'},
{route='4',period='rh',segment='Hoyt',how='x'},
{route='4',period='rh',segment='EP',how='x'},
{route='4',period='rh',segment='EP East',how='x'},
{route='4',period='rh',segment='NL',dir='peak+'},
{route='4',period='md',segment='Jerome 2'},
{route='4',period='md',segment='Jerome 1'},
{route='4',period='md',segment='Jerome'},
{route='4',period='md',segment='149'},
{route='4',period='md',segment='138'},
{route='4',period='md',segment='Lex North',how='x'},
{route='4',period='md',segment='Lex',how='x'},
{route='4',period='md',segment='Lex South'},
{route='4',period='md',segment='BHall'},
{route='4',period='md',segment='Hoyt',how='x'},
{route='4',period='md',segment='EP',how='x'},
{route='4',period='md',segment='EP East',how='x'},
{route='4',period='ev',segment='Jerome 2'},
{route='4',period='ev',segment='Jerome 1'},
{route='4',period='ev',segment='Jerome'},
{route='4',period='ev',segment='149'},
{route='4',period='ev',segment='138'},
{route='4',period='ev',segment='Lex North',how='x'},
{route='4',period='ev',segment='Lex',how='x'},
{route='4',period='ev',segment='Lex South'},
{route='4',period='ev',segment='BHall'},
{route='4',period='ev',segment='Hoyt',how='x'},
{route='4',period='ev',segment='EP',how='x'},
{route='4',period='ev',segment='EP East',how='x'},
{route='4',period='we',segment='Jerome 2'},
{route='4',period='we',segment='Jerome 1'},
{route='4',period='we',segment='Jerome'},
{route='4',period='we',segment='149'},
{route='4',period='we',segment='138'},
{route='4',period='we',segment='Lex North',how='x'},
{route='4',period='we',segment='Lex',how='x'},
{route='4',period='we',segment='Lex South'},
{route='4',period='we',segment='BHall'},
{route='4',period='we',segment='Hoyt',how='x'},
{route='4',period='we',segment='EP',how='x'},
{route='4',period='we',segment='EP East',how='x'},
{route='4',period='ln',segment='Jerome 2'},
{route='4',period='ln',segment='Jerome 1'},
{route='4',period='ln',segment='Jerome'},
{route='4',period='ln',segment='149'},
{route='4',period='ln',segment='138'},
{route='4',period='ln',segment='Lex North'},
{route='4',period='ln',segment='Lex'},
{route='4',period='ln',segment='Lex South'},
{route='4',period='ln',segment='BHall'},
{route='4',period='ln',segment='Hoyt',how='x'},
{route='4',period='ln',segment='EP'},
{route='4',period='ln',segment='EP East'},
{route='4',period='ln',segment='NL'},
{route='5',period='rh',segment='WPR North',dir='peakonly',fork='north',pattern='o '},
{route='5',period='rh',segment='Dyre',shape='|/',pattern='|o'},
{route='5',period='rh',segment='E180',how='x',dir='peak',pattern='o '},
{route='5',period='rh',segment='WPR South',how='x',dir='peak'},
{route='5',period='rh',segment='WPR South Tip'},
{route='5',period='rh',segment='138'},
{route='5',period='rh',segment='Lex North',how='x'},
{route='5',period='rh',segment='Lex',how='x'},
{route='5',period='rh',segment='Lex South'},
{route='5',period='rh',segment='BHall'},
{route='5',period='rh',segment='Hoyt',how='x'},
{route='5',period='rh',segment='EP',how='x',shape='|\\'},
{route='5',period='rh',segment='Nostrand',pattern='o|'},
{route='5',period='rh',segment='EP East',how='x',dir='peak+',fork='south',pattern=' o'},
{route='5',period='md',segment='Dyre'},
{route='5',period='md',segment='E180'},
{route='5',period='md',segment='WPR South'},
{route='5',period='md',segment='WPR South Tip'},
{route='5',period='md',segment='138'},
{route='5',period='md',segment='Lex North',how='x'},
{route='5',period='md',segment='Lex',how='x'},
{route='5',period='md',segment='Lex South'},
{route='5',period='md',segment='BHall'},
{route='5',period='md',segment='Hoyt',how='x'},
{route='5',period='md',segment='EP',how='x'},
{route='5',period='md',segment='Nostrand'},
{route='5',period='ev',segment='Dyre'},
{route='5',period='ev',segment='E180'},
{route='5',period='ev',segment='WPR South'},
{route='5',period='ev',segment='WPR South Tip'},
{route='5',period='ev',segment='138'},
{route='5',period='ev',segment='Lex North',how='x'},
{route='5',period='ev',segment='Lex',how='x'},
{route='5',period='ev',segment='Lex South'},
{route='5',period='we',segment='Dyre'},
{route='5',period='we',segment='E180'},
{route='5',period='we',segment='WPR South'},
{route='5',period='we',segment='WPR South Tip'},
{route='5',period='we',segment='138'},
{route='5',period='we',segment='Lex North',how='x'},
{route='5',period='we',segment='Lex',how='x'},
{route='5',period='we',segment='Lex South'},
{route='5',period='ln',segment='Dyre',shuttle=true},
{route='5',period='ln',segment='E180',how='x',tt=true,shuttle=true},
{route='6',period='rh',segment='Pelham North',dir='notpeakonly'},
{route='6',period='rh',segment='Pelham'},
{route='6',period='rh',segment='Lex North'},
{route='6',period='rh',segment='Lex'},
{route='6',period='md',segment='Pelham North',dir='notpeakonly'},
{route='6',period='md',segment='Pelham'},
{route='6',period='md',segment='Lex North'},
{route='6',period='md',segment='Lex'},
{route='6',period='ev',segment='Pelham North'},
{route='6',period='ev',segment='Pelham'},
{route='6',period='ev',segment='Lex North'},
{route='6',period='ev',segment='Lex'},
{route='6',period='we',segment='Pelham North'},
{route='6',period='we',segment='Pelham'},
{route='6',period='we',segment='Lex North'},
{route='6',period='we',segment='Lex'},
{route='6',period='ln',segment='Pelham North'},
{route='6',period='ln',segment='Pelham'},
{route='6',period='ln',segment='Lex North'},
{route='6',period='ln',segment='Lex'},
{route='<6>',period='rh',segment='Pelham North',dir='peakonly'},
{route='<6>',period='rh',segment='Pelham',how='x',dir='peakonly'},
{route='<6>',period='rh',segment='Lex North',dir='peakonly'},
{route='<6>',period='rh',segment='Lex',dir='peakonly'},
{route='<6>',period='md',segment='Pelham North',dir='peakonly'},
{route='<6>',period='md',segment='Pelham',how='x',dir='peakonly'},
{route='<6>',period='md',segment='Lex North',dir='peakonly'},
{route='<6>',period='md',segment='Lex',dir='peakonly'},
{route='7',period='rh',segment='Flush'},
{route='7',period='rh',segment='Flush West'},
{route='7',period='md',segment='Flush'},
{route='7',period='md',segment='Flush West'},
{route='7',period='ev',segment='Flush'},
{route='7',period='ev',segment='Flush West'},
{route='7',period='we',segment='Flush'},
{route='7',period='we',segment='Flush West'},
{route='7',period='ln',segment='Flush'},
{route='7',period='ln',segment='Flush West'},
{route='<7>',period='rh',segment='Flush',how='x',dir='peakonly'},
{route='<7>',period='rh',segment='Flush West',dir='peakonly'},
{route='A',period='rh',segment='Eighth North',pattern='o '},
{route='A',period='rh',segment='Eighth North Middle',how='x'},
{route='A',period='rh',segment='Eighth 145',how='x'},
{route='A',period='rh',segment='Eighth',how='x'},
{route='A',period='rh',segment='Eighth 50',how='x'},
{route='A',period='rh',segment='Eighth South',how='x'},
{route='A',period='rh',segment='Spring Canal',how='x'},
{route='A',period='rh',segment='Eighth South Tip'},
{route='A',period='rh',segment='Jay F'},
{route='A',period='rh',segment='Fulton',how='x'},
{route='A',period='rh',segment='Euclid',how='x'},
{route='A',period='rh',segment='Fulton East'},
{route='A',period='rh',segment='Rock Blvd',shape='|\\'},
{route='A',period='rh',segment='Fulton East Tip',pattern='|o'},
{route='A',period='rh',segment='Rock North',fork='south',pattern='o '},
{route='A',period='rh',segment='BChan',shape='|\\'},
{route='A',period='rh',segment='Rock East',pattern='|o'},
{route='A',period='rh',segment='Rock West',dir='peak+',fork='south',pattern='o '},
{route='A',period='md',segment='Eighth North'},
{route='A',period='md',segment='Eighth North Middle',how='x'},
{route='A',period='md',segment='Eighth 145',how='x'},
{route='A',period='md',segment='Eighth',how='x'},
{route='A',period='md',segment='Eighth 50',how='x'},
{route='A',period='md',segment='Eighth South',how='x'},
{route='A',period='md',segment='Spring Canal',how='x'},
{route='A',period='md',segment='Eighth South Tip'},
{route='A',period='md',segment='Jay F'},
{route='A',period='md',segment='Fulton',how='x'},
{route='A',period='md',segment='Euclid',how='x'},
{route='A',period='md',segment='Fulton East'},
{route='A',period='md',segment='Rock Blvd'},
{route='A',period='md',segment='Fulton East Tip'},
{route='A',period='md',segment='Rock North',fork='south'},
{route='A',period='md',segment='BChan'},
{route='A',period='md',segment='Rock East'},
{route='A',period='ev',segment='Eighth North'},
{route='A',period='ev',segment='Eighth North Middle',how='x'},
{route='A',period='ev',segment='Eighth 145',how='x'},
{route='A',period='ev',segment='Eighth',how='x'},
{route='A',period='ev',segment='Eighth 50',how='x'},
{route='A',period='ev',segment='Eighth South',how='x'},
{route='A',period='ev',segment='Spring Canal',how='x'},
{route='A',period='ev',segment='Eighth South Tip'},
{route='A',period='ev',segment='Jay F'},
{route='A',period='ev',segment='Fulton',how='x'},
{route='A',period='ev',segment='Euclid',how='x'},
{route='A',period='ev',segment='Fulton East'},
{route='A',period='ev',segment='Rock Blvd'},
{route='A',period='ev',segment='Fulton East Tip'},
{route='A',period='ev',segment='Rock North',fork='south'},
{route='A',period='ev',segment='BChan'},
{route='A',period='ev',segment='Rock East'},
{route='A',period='we',segment='Eighth North'},
{route='A',period='we',segment='Eighth North Middle',how='x'},
{route='A',period='we',segment='Eighth 145',how='x'},
{route='A',period='we',segment='Eighth',how='x'},
{route='A',period='we',segment='Eighth 50',how='x'},
{route='A',period='we',segment='Eighth South',how='x'},
{route='A',period='we',segment='Spring Canal',how='x'},
{route='A',period='we',segment='Eighth South Tip'},
{route='A',period='we',segment='Jay F'},
{route='A',period='we',segment='Fulton',how='x'},
{route='A',period='we',segment='Euclid',how='x'},
{route='A',period='we',segment='Fulton East'},
{route='A',period='we',segment='Rock Blvd'},
{route='A',period='we',segment='Fulton East Tip'},
{route='A',period='we',segment='Rock North',fork='south'},
{route='A',period='we',segment='BChan'},
{route='A',period='we',segment='Rock East'},
{route='A',period='ln',segment='Eighth North'},
{route='A',period='ln',segment='Eighth North Middle'},
{route='A',period='ln',segment='Eighth 145'},
{route='A',period='ln',segment='Eighth'},
{route='A',period='ln',segment='Eighth 50'},
{route='A',period='ln',segment='Eighth South'},
{route='A',period='ln',segment='Spring Canal'},
{route='A',period='ln',segment='Eighth South Tip'},
{route='A',period='ln',segment='Jay F'},
{route='A',period='ln',segment='Fulton'},
{route='A',period='ln',segment='Euclid'},
{route='A',period='ln',segment='Fulton East'},
{route='A',period='ln',segment='Rock Blvd'},
{route='A',period='ln',segment='Rock North'},
{route='A',period='ln',segment='BChan'},
{route='A',period='ln',segment='Rock East'},
{route='B',period='rh',segment='BPB',how='x',tt=true},
{route='B',period='rh',segment='Conc'},
{route='B',period='rh',segment='Conc 145'},
{route='B',period='rh',segment='Eighth'},
{route='B',period='rh',segment='7 Sixth'},
{route='B',period='rh',segment='Sixth',how='x'},
{route='B',period='rh',segment='Broad Laf',how='x'},
{route='B',period='rh',segment='Grand'},
{route='B',period='rh',segment='MB'}, -- сегмент MB обозначает Манхэттенский мост, станций на нём нет, он используется не в модуле, а на схемах линий
{route='B',period='rh',segment='Brigh DK'},
{route='B',period='rh',segment='Brigh North'},
{route='B',period='rh',segment='PP'},
{route='B',period='rh',segment='Brigh',how='x'},
{route='B',period='md',segment='Conc 145',how='x',tt=true},
{route='B',period='md',segment='Eighth'},
{route='B',period='md',segment='7 Sixth'},
{route='B',period='md',segment='Sixth',how='x'},
{route='B',period='md',segment='Broad Laf',how='x'},
{route='B',period='md',segment='Grand'},
{route='B',period='md',segment='MB'},
{route='B',period='md',segment='Brigh DK'},
{route='B',period='md',segment='Brigh North'},
{route='B',period='md',segment='PP'},
{route='B',period='md',segment='Brigh',how='x'},
{route='B',period='ev',segment='Conc 145',how='x',dir='1',tt=true},
{route='B',period='ev',segment='Eighth',dir='1'},
{route='B',period='ev',segment='7 Sixth',dir='1'},
{route='B',period='ev',segment='Sixth',how='x',dir='1'},
{route='B',period='ev',segment='Broad Laf',how='x',dir='1'},
{route='B',period='ev',segment='Grand',dir='1'},
{route='B',period='ev',segment='MB',dir='1'},
{route='B',period='ev',segment='Brigh DK',dir='1'},
{route='B',period='ev',segment='Brigh North',dir='1'},
{route='B',period='ev',segment='PP',dir='1'},
{route='B',period='ev',segment='Brigh',how='x',dir='1'},
{route='C',period='rh',segment='Eighth North Middle'},
{route='C',period='rh',segment='Eighth 145'},
{route='C',period='rh',segment='Eighth'},
{route='C',period='rh',segment='Eighth 50'},
{route='C',period='rh',segment='Eighth South'},
{route='C',period='rh',segment='Spring Canal'},
{route='C',period='rh',segment='Eighth South Tip'},
{route='C',period='rh',segment='Jay F'},
{route='C',period='rh',segment='Fulton'},
{route='C',period='rh',segment='Euclid'},
{route='C',period='md',segment='Eighth North Middle'},
{route='C',period='md',segment='Eighth 145'},
{route='C',period='md',segment='Eighth'},
{route='C',period='md',segment='Eighth 50'},
{route='C',period='md',segment='Eighth South'},
{route='C',period='md',segment='Spring Canal'},
{route='C',period='md',segment='Eighth South Tip'},
{route='C',period='md',segment='Jay F'},
{route='C',period='md',segment='Fulton'},
{route='C',period='md',segment='Euclid'},
{route='C',period='ev',segment='Eighth North Middle'},
{route='C',period='ev',segment='Eighth 145'},
{route='C',period='ev',segment='Eighth'},
{route='C',period='ev',segment='Eighth 50'},
{route='C',period='ev',segment='Eighth South'},
{route='C',period='ev',segment='Spring Canal'},
{route='C',period='ev',segment='Eighth South Tip'},
{route='C',period='ev',segment='Jay F'},
{route='C',period='ev',segment='Fulton'},
{route='C',period='ev',segment='Euclid'},
{route='C',period='we',segment='Eighth North Middle'},
{route='C',period='we',segment='Eighth 145'},
{route='C',period='we',segment='Eighth'},
{route='C',period='we',segment='Eighth 50'},
{route='C',period='we',segment='Eighth South'},
{route='C',period='we',segment='Spring Canal'},
{route='C',period='we',segment='Eighth South Tip'},
{route='C',period='we',segment='Jay F'},
{route='C',period='we',segment='Fulton'},
{route='C',period='we',segment='Euclid'},
{route='D',period='rh',segment='Conc North'},
{route='D',period='rh',segment='BPB'},
{route='D',period='rh',segment='Conc',how='x',dir='peak'},
{route='D',period='rh',segment='Conc 145',how='x',dir='peak'},
{route='D',period='rh',segment='Eighth',how='x'},
{route='D',period='rh',segment='7 Sixth'},
{route='D',period='rh',segment='Sixth',how='x'},
{route='D',period='rh',segment='Broad Laf',how='x'},
{route='D',period='rh',segment='Grand'},
{route='D',period='rh',segment='MB'},
{route='D',period='rh',segment='Fourth DK',how='x',fullsta=true}, --ночью D проходит Декалб-авеню по путям "чужой" линии
{route='D',period='rh',segment='Fourth North',how='x'},
{route='D',period='rh',segment='WE'},
{route='D',period='md',segment='Conc North'},
{route='D',period='md',segment='BPB'},
{route='D',period='md',segment='Conc'},
{route='D',period='md',segment='Conc 145'},
{route='D',period='md',segment='Eighth',how='x'},
{route='D',period='md',segment='7 Sixth'},
{route='D',period='md',segment='Sixth',how='x'},
{route='D',period='md',segment='Broad Laf',how='x'},
{route='D',period='md',segment='Grand'},
{route='D',period='md',segment='MB'},
{route='D',period='md',segment='Fourth DK',how='x'},
{route='D',period='md',segment='Fourth North',how='x'},
{route='D',period='md',segment='WE'},
{route='D',period='ev',segment='Conc North'},
{route='D',period='ev',segment='BPB'},
{route='D',period='ev',segment='Conc'},
{route='D',period='ev',segment='Conc 145'},
{route='D',period='ev',segment='Eighth',how='x'},
{route='D',period='ev',segment='7 Sixth'},
{route='D',period='ev',segment='Sixth',how='x'},
{route='D',period='ev',segment='Broad Laf',how='x'},
{route='D',period='ev',segment='Grand'},
{route='D',period='ev',segment='MB'},
{route='D',period='ev',segment='Fourth DK',how='x'},
{route='D',period='ev',segment='Fourth North',how='x'},
{route='D',period='ev',segment='WE'},
{route='D',period='we',segment='Conc North'},
{route='D',period='we',segment='BPB'},
{route='D',period='we',segment='Conc'},
{route='D',period='we',segment='Conc 145'},
{route='D',period='we',segment='Eighth',how='x'},
{route='D',period='we',segment='7 Sixth'},
{route='D',period='we',segment='Sixth',how='x'},
{route='D',period='we',segment='Broad Laf',how='x'},
{route='D',period='we',segment='Grand'},
{route='D',period='we',segment='MB'},
{route='D',period='we',segment='Fourth DK',how='x'},
{route='D',period='we',segment='Fourth North',how='x'},
{route='D',period='we',segment='WE'},
{route='D',period='ln',segment='Conc North'},
{route='D',period='ln',segment='BPB'},
{route='D',period='ln',segment='Conc'},
{route='D',period='ln',segment='Conc 145'},
{route='D',period='ln',segment='Eighth',how='x'},
{route='D',period='ln',segment='7 Sixth'},
{route='D',period='ln',segment='Sixth',how='x'},
{route='D',period='ln',segment='Broad Laf',how='x'},
{route='D',period='ln',segment='Grand'},
{route='D',period='ln',segment='MB'},
{route='D',period='ln',segment='Brigh DK',segment_subst='Fourth DK'},
{route='D',period='ln',segment='Fourth North'},
{route='D',period='ln',segment='WE'},
{route='E',period='rh',segment='179',how='x',dir='peak+',fork='north',pattern='o '},
{route='E',period='rh',segment='Arch IND',pattern='|o'},
{route='E',period='rh',segment='Arch IND VW',shape='|/'},
{route='E',period='rh',segment='QB East',how='x',pattern='o '},
{route='E',period='rh',segment='QB',how='x'},
{route='E',period='rh',segment='QP',how='x'},
{route='E',period='rh',segment='QB West'},
{route='E',period='rh',segment='QB West Tip'},
{route='E',period='rh',segment='Eighth South'},
{route='E',period='rh',segment='Spring Canal'},
{route='E',period='rh',segment='WTC'},
{route='E',period='md',segment='Arch IND'},
{route='E',period='md',segment='Arch IND VW'},
{route='E',period='md',segment='QB East',how='x'},
{route='E',period='md',segment='QB',how='x'},
{route='E',period='md',segment='QP',how='x'},
{route='E',period='md',segment='QB West'},
{route='E',period='md',segment='QB West Tip'},
{route='E',period='md',segment='Eighth South'},
{route='E',period='md',segment='Spring Canal'},
{route='E',period='md',segment='WTC'},
{route='E',period='ev',segment='Arch IND'},
{route='E',period='ev',segment='Arch IND VW'},
{route='E',period='ev',segment='QB East'},
{route='E',period='ev',segment='QB',how='x'},
{route='E',period='ev',segment='QP',how='x'},
{route='E',period='ev',segment='QB West'},
{route='E',period='ev',segment='QB West Tip'},
{route='E',period='ev',segment='Eighth South'},
{route='E',period='ev',segment='Spring Canal'},
{route='E',period='ev',segment='WTC'},
{route='E',period='we',segment='Arch IND'},
{route='E',period='we',segment='Arch IND VW'},
{route='E',period='we',segment='QB East'},
{route='E',period='we',segment='QB',how='x'},
{route='E',period='we',segment='QP',how='x'},
{route='E',period='we',segment='QB West'},
{route='E',period='we',segment='QB West Tip'},
{route='E',period='we',segment='Eighth South'},
{route='E',period='we',segment='Spring Canal'},
{route='E',period='we',segment='WTC'},
{route='E',period='ln',segment='Arch IND'},
{route='E',period='ln',segment='Arch IND VW'},
{route='E',period='ln',segment='QB East'},
{route='E',period='ln',segment='QB'},
{route='E',period='ln',segment='QP'},
{route='E',period='ln',segment='QB West'},
{route='E',period='ln',segment='QB West Tip'},
{route='E',period='ln',segment='Eighth South'},
{route='E',period='ln',segment='Spring Canal'},
{route='E',period='ln',segment='WTC'},
{route='F',period='rh',segment='179'},
{route='F',period='rh',segment='QB East'},
{route='F',period='rh',segment='QB',how='x'},
{route='F',period='rh',segment='63 IND'},
{route='F',period='rh',segment='63 IND Lex'},
{route='F',period='rh',segment='57'},
{route='F',period='rh',segment='Sixth'},
{route='F',period='rh',segment='Broad Laf'},
{route='F',period='rh',segment='Culver North Tip'},
{route='F',period='rh',segment='Jay'},
{route='F',period='rh',segment='Culver North'},
{route='F',period='rh',segment='Culver Middle'},
{route='F',period='rh',segment='Culver'},
{route='F',period='rh',segment='Culver 1'},
{route='F',period='rh',segment='Culver 2'},
-- {route='F',period='rh',segment='Culver 1',dir='1',how='x',except=true},
-- {route='F',period='rh',segment='Culver 1',dir='2'},
-- {route='F',period='rh',segment='Culver 2',dir='2'},
{route='F',period='md',segment='179'},
{route='F',period='md',segment='QB East'},
{route='F',period='md',segment='QB',how='x'},
{route='F',period='md',segment='63 IND'},
{route='F',period='md',segment='63 IND Lex'},
{route='F',period='md',segment='57'},
{route='F',period='md',segment='Sixth'},
{route='F',period='md',segment='Broad Laf'},
{route='F',period='md',segment='Culver North Tip'},
{route='F',period='md',segment='Jay'},
{route='F',period='md',segment='Culver North'},
{route='F',period='md',segment='Culver Middle'},
{route='F',period='md',segment='Culver'},
{route='F',period='md',segment='Culver 1'},
{route='F',period='md',segment='Culver 2'},
{route='F',period='ev',segment='179'},
{route='F',period='ev',segment='QB East'},
{route='F',period='ev',segment='QB',how='x'},
{route='F',period='ev',segment='63 IND'},
{route='F',period='ev',segment='63 IND Lex'},
{route='F',period='ev',segment='57'},
{route='F',period='ev',segment='Sixth'},
{route='F',period='ev',segment='Broad Laf'},
{route='F',period='ev',segment='Culver North Tip'},
{route='F',period='ev',segment='Jay'},
{route='F',period='ev',segment='Culver North'},
{route='F',period='ev',segment='Culver Middle'},
{route='F',period='ev',segment='Culver'},
{route='F',period='ev',segment='Culver 1'},
{route='F',period='ev',segment='Culver 2'},
{route='F',period='we',segment='179'},
{route='F',period='we',segment='QB East'},
{route='F',period='we',segment='QB',how='x'},
{route='F',period='we',segment='63 IND'},
{route='F',period='we',segment='63 IND Lex'},
{route='F',period='we',segment='57'},
{route='F',period='we',segment='Sixth'},
{route='F',period='we',segment='Broad Laf'},
{route='F',period='we',segment='Culver North Tip'},
{route='F',period='we',segment='Jay'},
{route='F',period='we',segment='Culver North'},
{route='F',period='we',segment='Culver Middle'},
{route='F',period='we',segment='Culver'},
{route='F',period='we',segment='Culver 1'},
{route='F',period='we',segment='Culver 2'},
{route='F',period='ln',segment='179'},
{route='F',period='ln',segment='QB East'},
{route='F',period='ln',segment='QB',how='x'},
{route='F',period='ln',segment='63 IND'},
{route='F',period='ln',segment='63 IND Lex'},
{route='F',period='ln',segment='57'},
{route='F',period='ln',segment='Sixth'},
{route='F',period='ln',segment='Broad Laf'},
{route='F',period='ln',segment='Culver North Tip'},
{route='F',period='ln',segment='Jay'},
{route='F',period='ln',segment='Culver North'},
{route='F',period='ln',segment='Culver Middle'},
{route='F',period='ln',segment='Culver'},
{route='F',period='ln',segment='Culver 1'},
{route='F',period='ln',segment='Culver 2'},
{route='<F>',period='rh',segment='179',dir='peakonly'},
{route='<F>',period='rh',segment='QB East',dir='peakonly'},
{route='<F>',period='rh',segment='QB',how='x',dir='peakonly'},
{route='<F>',period='rh',segment='63 IND',dir='peakonly'},
{route='<F>',period='rh',segment='63 IND Lex',dir='peakonly'},
{route='<F>',period='rh',segment='57',dir='peakonly'},
{route='<F>',period='rh',segment='Sixth',dir='peakonly'},
{route='<F>',period='rh',segment='Broad Laf',dir='peakonly'},
{route='<F>',period='rh',segment='Culver North Tip',dir='peakonly'},
{route='<F>',period='rh',segment='Jay',dir='peakonly'},
{route='<F>',period='rh',segment='Culver North',how='x',dir='peakonly'},
{route='<F>',period='rh',segment='Culver Middle',dir='peakonly'},
{route='<F>',period='rh',segment='Culver',dir='peakonly'},
{route='<F>',period='rh',segment='Culver 1',dir='peakonly'},
{route='<F>',period='rh',segment='Culver 2',dir='peakonly'},
{route='G',period='rh',segment='Cross'},
{route='G',period='rh',segment='Culver North'},
{route='G',period='md',segment='Cross'},
{route='G',period='md',segment='Culver North'},
{route='G',period='ev',segment='Cross'},
{route='G',period='ev',segment='Culver North'},
{route='G',period='we',segment='Cross'},
{route='G',period='we',segment='Culver North'},
{route='G',period='ln',segment='Cross'},
{route='G',period='ln',segment='Culver North'},
{route='J',period='rh',segment='Arch BMT'},
{route='J',period='rh',segment='Jam East',how='J',dir='peak'},
{route='J',period='rh',segment='Jam BJ',how='J',dir='peak'},
{route='J',period='rh',segment='Jam',how='J',dir='peak'},
{route='J',period='rh',segment='Myrtle Av',how='x',dir='peak'},
{route='J',period='rh',segment='Jam West',how='x',dir='peak'},
{route='J',period='rh',segment='Essex'},
{route='J',period='rh',segment='Nassau'},
{route='J',period='md',segment='Arch BMT'},
{route='J',period='md',segment='Jam East'},
{route='J',period='md',segment='Jam BJ'},
{route='J',period='md',segment='Jam'},
{route='J',period='md',segment='Myrtle Av',how='x',dir='peak'},
{route='J',period='md',segment='Jam West',how='x',dir='peak'},
{route='J',period='md',segment='Essex'},
{route='J',period='md',segment='Nassau'},
{route='J',period='ev',segment='Arch BMT'},
{route='J',period='ev',segment='Jam East'},
{route='J',period='ev',segment='Jam BJ'},
{route='J',period='ev',segment='Jam'},
{route='J',period='ev',segment='Myrtle Av'},
{route='J',period='ev',segment='Jam West'},
{route='J',period='ev',segment='Essex'},
{route='J',period='ev',segment='Nassau'},
{route='J',period='we',segment='Arch BMT'},
{route='J',period='we',segment='Jam East'},
{route='J',period='we',segment='Jam BJ'},
{route='J',period='we',segment='Jam'},
{route='J',period='we',segment='Myrtle Av'},
{route='J',period='we',segment='Jam West'},
{route='J',period='we',segment='Essex'},
{route='J',period='we',segment='Nassau'},
{route='J',period='ln',segment='Arch BMT'},
{route='J',period='ln',segment='Jam East'},
{route='J',period='ln',segment='Jam BJ'},
{route='J',period='ln',segment='Jam'},
{route='J',period='ln',segment='Myrtle Av'},
{route='J',period='ln',segment='Jam West'},
{route='J',period='ln',segment='Essex'},
{route='J',period='ln',segment='Nassau'},
{route='L',period='rh',segment='14'},
{route='L',period='rh',segment='Canar'},
{route='L',period='rh',segment='Canar BJ'},
{route='L',period='rh',segment='Canar South'},
{route='L',period='md',segment='14'},
{route='L',period='md',segment='Canar'},
{route='L',period='md',segment='Canar BJ'},
{route='L',period='md',segment='Canar South'},
{route='L',period='ev',segment='14'},
{route='L',period='ev',segment='Canar'},
{route='L',period='ev',segment='Canar BJ'},
{route='L',period='ev',segment='Canar South'},
{route='L',period='we',segment='14'},
{route='L',period='we',segment='Canar'},
{route='L',period='we',segment='Canar BJ'},
{route='L',period='we',segment='Canar South'},
{route='L',period='ln',segment='14'},
{route='L',period='ln',segment='Canar'},
{route='L',period='ln',segment='Canar BJ'},
{route='L',period='ln',segment='Canar South'},
{route='M',period='rh',segment='QB'},
{route='M',period='rh',segment='QP'},
{route='M',period='rh',segment='QB West'},
{route='M',period='rh',segment='Sixth'},
{route='M',period='rh',segment='Broad Laf',fork='north',joint=true},
{route='M',period='rh',segment='Myrtle'},
{route='M',period='rh',segment='Myrtle Av'},
{route='M',period='rh',segment='Jam West'},
{route='M',period='rh',segment='Essex',fork='uturn'},
{route='M',period='md',segment='QB'},
{route='M',period='md',segment='QP'},
{route='M',period='md',segment='QB West'},
{route='M',period='md',segment='Sixth'},
{route='M',period='md',segment='Broad Laf',fork='north'},
{route='M',period='md',segment='Myrtle'},
{route='M',period='md',segment='Myrtle Av'},
{route='M',period='md',segment='Jam West'},
{route='M',period='md',segment='Essex',fork='uturn'},
{route='M',period='ev',segment='QB'},
{route='M',period='ev',segment='QP'},
{route='M',period='ev',segment='QB West'},
{route='M',period='ev',segment='Sixth'},
{route='M',period='ev',segment='Broad Laf',fork='north'},
{route='M',period='ev',segment='Myrtle'},
{route='M',period='ev',segment='Myrtle Av'},
{route='M',period='ev',segment='Jam West'},
{route='M',period='ev',segment='Essex',fork='uturn'},
{route='M',period='we',segment='Myrtle'},
{route='M',period='we',segment='Myrtle Av'},
{route='M',period='we',segment='Jam West'},
{route='M',period='we',segment='Essex',fork='uturn'},
{route='M',period='ln',segment='Myrtle',shuttle=true},
{route='M',period='ln',segment='Myrtle Av',how='x',tt=true,shuttle=true},
{route='N',period='rh',segment='Second',dir='peak+',pattern='o '},
{route='N',period='rh',segment='63 BMT',dir='peak+',fork='north'},
{route='N',period='rh',segment='Ast',pattern='|o'},
{route='N',period='rh',segment='QBP'},
{route='N',period='rh',segment='Bway North',shape='|/'},
{route='N',period='rh',segment='Bway 57',pattern='o '},
{route='N',period='rh',segment='Bway 49'},
{route='N',period='rh',segment='Bway',how='x',shape='|\\'},
{route='N',period='rh',segment='Canal Bridge',pattern='|o'},
{route='N',period='rh',segment='MB',pattern='|o'},
{route='N',period='also',segment='Bway South',pattern='o|'}, --ночью N идёт через Нижний Манхэттен
{route='N',period='also',segment='Whall'},
{route='N',period='also',segment='Fourth North Tip',shape='|/'},
{route='N',period='rh',segment='Fourth DK',how='x',pattern='o '},
{route='N',period='rh',segment='Fourth North',how='x'},
{route='N',period='rh',segment='Fourth',how='x'},
{route='N',period='rh',segment='SB'},
{route='N',period='rh',segment='SB South'},
{route='N',period='md',segment='Ast'},
{route='N',period='md',segment='QBP'},
{route='N',period='md',segment='Bway North'},
{route='N',period='md',segment='Bway 57'},
{route='N',period='md',segment='Bway 49'},
{route='N',period='md',segment='Bway',how='x'},
{route='N',period='md',segment='Canal Bridge'},
{route='N',period='md',segment='MB'},
{route='N',period='md',segment='Fourth DK',how='x'},
{route='N',period='md',segment='Fourth North',how='x'},
{route='N',period='md',segment='Fourth',how='x'},
{route='N',period='md',segment='SB'},
{route='N',period='md',segment='SB South'},
{route='N',period='ev',segment='Ast'},
{route='N',period='ev',segment='QBP'},
{route='N',period='ev',segment='Bway North'},
{route='N',period='ev',segment='Bway 57'},
{route='N',period='ev',segment='Bway 49'},
{route='N',period='ev',segment='Bway',how='x'},
{route='N',period='ev',segment='Canal Bridge'},
{route='N',period='ev',segment='MB'},
{route='N',period='ev',segment='Fourth DK',how='x'},
{route='N',period='ev',segment='Fourth North',how='x'},
{route='N',period='ev',segment='Fourth',how='x'},
{route='N',period='ev',segment='SB'},
{route='N',period='ev',segment='SB South'},
{route='N',period='we',segment='Ast'},
{route='N',period='we',segment='QBP'},
{route='N',period='we',segment='Bway North'},
{route='N',period='we',segment='Bway 57'},
{route='N',period='we',segment='Bway 49'},
{route='N',period='we',segment='Bway'},
{route='N',period='we',segment='Canal Bridge'},
{route='N',period='we',segment='MB'},
{route='N',period='we',segment='Fourth DK',how='x'},
{route='N',period='we',segment='Fourth North',how='x'},
{route='N',period='we',segment='Fourth',how='x'},
{route='N',period='we',segment='SB'},
{route='N',period='we',segment='SB South'},
{route='N',period='ln',segment='Ast'},
{route='N',period='ln',segment='QBP'},
{route='N',period='ln',segment='Bway North'},
{route='N',period='ln',segment='Bway 57'},
{route='N',period='ln',segment='Bway 49'},
{route='N',period='ln',segment='Bway'},
{route='N',period='ln',segment='Bway South'},
{route='N',period='ln',segment='Whall'},
{route='N',period='ln',segment='Fourth North Tip'},
{route='N',period='ln',segment='Fourth DK'},
{route='N',period='ln',segment='Fourth North'},
{route='N',period='ln',segment='Fourth'},
{route='N',period='ln',segment='SB'},
{route='N',period='ln',segment='SB South'},
{route='Q',period='rh',segment='Second'},
{route='Q',period='rh',segment='63 BMT'},
{route='Q',period='rh',segment='Bway 57',how='x'},
{route='Q',period='rh',segment='Bway 49',how='x'},
{route='Q',period='rh',segment='Bway',how='x'},
{route='Q',period='rh',segment='Canal Bridge'},
{route='Q',period='rh',segment='MB'},
{route='Q',period='rh',segment='Brigh DK'},
{route='Q',period='rh',segment='Brigh North'},
{route='Q',period='rh',segment='PP'},
{route='Q',period='rh',segment='Brigh'},
{route='Q',period='rh',segment='Brigh South'},
{route='Q',period='md',segment='Second'},
{route='Q',period='md',segment='63 BMT'},
{route='Q',period='md',segment='Bway 57',how='x'},
{route='Q',period='md',segment='Bway 49',how='x'},
{route='Q',period='md',segment='Bway',how='x'},
{route='Q',period='md',segment='Canal Bridge'},
{route='Q',period='md',segment='MB'},
{route='Q',period='md',segment='Brigh DK'},
{route='Q',period='md',segment='Brigh North'},
{route='Q',period='md',segment='PP'},
{route='Q',period='md',segment='Brigh'},
{route='Q',period='md',segment='Brigh South'},
{route='Q',period='ev',segment='Second'},
{route='Q',period='ev',segment='63 BMT'},
{route='Q',period='ev',segment='Bway 57',how='x'},
{route='Q',period='ev',segment='Bway 49',how='x'},
{route='Q',period='ev',segment='Bway',how='x'},
{route='Q',period='ev',segment='Canal Bridge'},
{route='Q',period='ev',segment='MB'},
{route='Q',period='ev',segment='Brigh DK'},
{route='Q',period='ev',segment='Brigh North'},
{route='Q',period='ev',segment='PP'},
{route='Q',period='ev',segment='Brigh'},
{route='Q',period='ev',segment='Brigh South'},
{route='Q',period='we',segment='Second'},
{route='Q',period='we',segment='63 BMT'},
{route='Q',period='we',segment='Bway 57',how='x'},
{route='Q',period='we',segment='Bway 49',how='x'},
{route='Q',period='we',segment='Bway',how='x'},
{route='Q',period='we',segment='Canal Bridge'},
{route='Q',period='we',segment='MB'},
{route='Q',period='we',segment='Brigh DK'},
{route='Q',period='we',segment='Brigh North'},
{route='Q',period='we',segment='PP'},
{route='Q',period='we',segment='Brigh'},
{route='Q',period='we',segment='Brigh South'},
{route='Q',period='ln',segment='Second'},
{route='Q',period='ln',segment='63 BMT'},
{route='Q',period='ln',segment='Bway 57',how='x'},
{route='Q',period='ln',segment='Bway 49'},
{route='Q',period='ln',segment='Bway'},
{route='Q',period='ln',segment='Canal Bridge'},
{route='Q',period='ln',segment='MB'},
{route='Q',period='ln',segment='Brigh DK'},
{route='Q',period='ln',segment='Brigh North'},
{route='Q',period='ln',segment='PP'},
{route='Q',period='ln',segment='Brigh'},
{route='Q',period='ln',segment='Brigh South'},
{route='R',period='rh',segment='QB'},
{route='R',period='rh',segment='QP'},
{route='R',period='rh',segment='Bway North'},
{route='R',period='rh',segment='Bway 57'},
{route='R',period='rh',segment='Bway 49'},
{route='R',period='rh',segment='Bway'},
{route='R',period='rh',segment='Bway South'},
{route='R',period='rh',segment='Whall'},
{route='R',period='rh',segment='Fourth North Tip'},
{route='R',period='rh',segment='Fourth DK'},
{route='R',period='rh',segment='Fourth North'},
{route='R',period='rh',segment='Fourth'},
{route='R',period='rh',segment='Fourth South'},
{route='R',period='md',segment='QB'},
{route='R',period='md',segment='QP'},
{route='R',period='md',segment='Bway North'},
{route='R',period='md',segment='Bway 57'},
{route='R',period='md',segment='Bway 49'},
{route='R',period='md',segment='Bway'},
{route='R',period='md',segment='Bway South'},
{route='R',period='md',segment='Whall'},
{route='R',period='md',segment='Fourth North Tip'},
{route='R',period='md',segment='Fourth DK'},
{route='R',period='md',segment='Fourth North'},
{route='R',period='md',segment='Fourth'},
{route='R',period='md',segment='Fourth South'},
{route='R',period='ev',segment='QB'},
{route='R',period='ev',segment='QP'},
{route='R',period='ev',segment='Bway North'},
{route='R',period='ev',segment='Bway 57'},
{route='R',period='ev',segment='Bway 49'},
{route='R',period='ev',segment='Bway'},
{route='R',period='ev',segment='Bway South'},
{route='R',period='ev',segment='Whall'},
{route='R',period='ev',segment='Fourth North Tip'},
{route='R',period='ev',segment='Fourth DK'},
{route='R',period='ev',segment='Fourth North'},
{route='R',period='ev',segment='Fourth'},
{route='R',period='ev',segment='Fourth South'},
{route='R',period='we',segment='QB'},
{route='R',period='we',segment='QP'},
{route='R',period='we',segment='Bway North'},
{route='R',period='we',segment='Bway 57'},
{route='R',period='we',segment='Bway 49'},
{route='R',period='we',segment='Bway'},
{route='R',period='we',segment='Bway South'},
{route='R',period='we',segment='Whall'},
{route='R',period='we',segment='Fourth North Tip'},
{route='R',period='we',segment='Fourth DK'},
{route='R',period='we',segment='Fourth North'},
{route='R',period='we',segment='Fourth'},
{route='R',period='we',segment='Fourth South'},
{route='R',period='ln',segment='Whall',how='x',tt=true},
{route='R',period='ln',segment='Fourth North Tip'},
{route='R',period='ln',segment='Fourth DK'},
{route='R',period='ln',segment='Fourth North'},
{route='R',period='ln',segment='Fourth'},
{route='R',period='ln',segment='Fourth South'},
{route='S 42',period='rh',segment='42'},
{route='S 42',period='md',segment='42'},
{route='S 42',period='ev',segment='42'},
{route='S 42',period='we',segment='42'},
{route='S F',period='rh',segment='Franklin'},
{route='S F',period='md',segment='Franklin'},
{route='S F',period='ev',segment='Franklin'},
{route='S F',period='we',segment='Franklin'},
{route='S F',period='ln',segment='Franklin'},
{route='S R',period='also',segment='Rock Blvd'},
{route='S R',period='also',segment='Rock North'},
{route='S R',period='rh',segment='BChan'},
{route='S R',period='rh',segment='Rock West'},
{route='S R',period='md',segment='BChan'},
{route='S R',period='md',segment='Rock West'},
{route='S R',period='ev',segment='BChan'},
{route='S R',period='ev',segment='Rock West'},
{route='S R',period='we',segment='Rock Blvd',dir='1'},
{route='S R',period='we',segment='Rock North',dir='1'},
{route='S R',period='we',segment='BChan'},
{route='S R',period='we',segment='Rock West'},
{route='S R',period='ln',segment='BChan'},
{route='S R',period='ln',segment='Rock West'},
{route='A S',period='also',segment='Euclid'}, --это чисто ночной маршрут
{route='A S',period='also',segment='Fulton East'},
{route='A S',period='also',segment='Rock Blvd'},
{route='A S',period='also',segment='Fulton East Tip'},
{route='A S',period='ln',segment='Euclid',how='x',tt=true,shuttle=true},
{route='A S',period='ln',segment='Fulton East',shuttle=true},
{route='A S',period='ln',segment='Rock Blvd',shuttle=true},
{route='A S',period='ln',segment='Fulton East Tip',shuttle=true},
{route='W',period='rh',segment='Ast'},
{route='W',period='rh',segment='QBP'},
{route='W',period='rh',segment='Bway North'},
{route='W',period='rh',segment='Bway 57'},
{route='W',period='rh',segment='Bway 49'},
{route='W',period='rh',segment='Bway'},
{route='W',period='rh',segment='Bway South'},
{route='W',period='rh',segment='Whall',how='x',tt=true},
{route='W',period='rh',segment='Fourth North Tip',dir='peak+'},
{route='W',period='rh',segment='Fourth DK',dir='peak+'},
{route='W',period='rh',segment='Fourth North',dir='peak+'},
{route='W',period='rh',segment='Fourth',dir='peak+'},
{route='W',period='rh',segment='SB',dir='peak+'},
{route='W',period='md',segment='Ast'},
{route='W',period='md',segment='QBP'},
{route='W',period='md',segment='Bway North'},
{route='W',period='md',segment='Bway 57'},
{route='W',period='md',segment='Bway 49'},
{route='W',period='md',segment='Bway'},
{route='W',period='md',segment='Bway South'},
{route='W',period='md',segment='Whall',how='x',tt=true},
{route='W',period='ev',segment='Ast',dir='1'},
{route='W',period='ev',segment='QBP',dir='1'},
{route='W',period='ev',segment='Bway North',dir='1'},
{route='W',period='ev',segment='Bway 57',dir='1'},
{route='W',period='ev',segment='Bway 49',dir='1'},
{route='W',period='ev',segment='Bway',dir='1'},
{route='W',period='ev',segment='Bway South',dir='1'},
{route='W',period='ev',segment='Whall',how='x',dir='1',tt=true},
{route='Z',period='rh',segment='Arch BMT',dir='peakonly'},
{route='Z',period='rh',segment='Jam East',how='Z',dir='peakonly'},
{route='Z',period='rh',segment='Jam BJ',how='Z',dir='peakonly'},
{route='Z',period='rh',segment='Jam',how='Z',dir='peakonly'},
{route='Z',period='rh',segment='Myrtle Av',how='x',dir='peakonly'},
{route='Z',period='rh',segment='Jam West',how='x',dir='peakonly'},
{route='Z',period='rh',segment='Essex',dir='peakonly'},
{route='Z',period='rh',segment='Nassau',dir='peakonly'},
{route='T',period='rh',segment='Second 2',future=true},
{route='T',period='rh',segment='Second',future=true},
{route='T',period='rh',segment='Second 3',future=true},
{route='T',period='rh',segment='Second 4',future=true},
{route='T',period='md',segment='Second 2',future=true},
{route='T',period='md',segment='Second',future=true},
{route='T',period='md',segment='Second 3',future=true},
{route='T',period='md',segment='Second 4',future=true},
{route='T',period='ev',segment='Second 2',future=true},
{route='T',period='ev',segment='Second',future=true},
{route='T',period='ev',segment='Second 3',future=true},
{route='T',period='ev',segment='Second 4',future=true},
{route='T',period='we',segment='Second 2',future=true},
{route='T',period='we',segment='Second',future=true},
{route='T',period='we',segment='Second 3',future=true},
{route='T',period='we',segment='Second 4',future=true},
{route='T',period='ln',segment='Second 2',future=true},
{route='T',period='ln',segment='Second',future=true},
{route='T',period='ln',segment='Second 3',future=true},
{route='T',period='ln',segment='Second 4',future=true},
}
local ridership = {
['138 St-Grand Concourse 4 5']={r=1035878,prev=944598,rank=356},
['149 St-Grand Concourse 2 4 5']={r=3931908,prev=3972763,rank=123},
['161 St-Yankee Stadium B D 4']={r=8254928,prev=8392290,rank=40},
['167 St 4']={r=2653237,prev=2933140,rank=182},
['167 St B D']={r=2734530,prev=2022919,rank=178},
['170 St 4']={r=2487611,prev=2562443,rank=192},
['170 St B D']={r=2130461,prev=2454974,rank=222},
['174 St 2 5']={r=2057118,prev=2056692,rank=230},
['174-175 Sts B D']={r=1518260,prev=1005075,rank=293},
['176 St 4']={r=1713696,prev=1803691,rank=272},
['182-183 Sts B D']={r=1513443,prev=1502814,rank=294},
['183 St 4']={r=1779224,prev=1831457,rank=261},
['219 St 2 5']={r=979390,prev=1026894,rank=364},
['225 St 2 5']={r=1187486,prev=1224369,rank=333},
['231 St 1']={r=2919305,prev=3133231,rank=170},
['233 St 2 5']={r=1445532,prev=1496673,rank=304},
['238 St 1']={r=1204095,prev=960970,rank=332},
['3 Av-138 St 6']={r=2503850,prev=2451972,rank=190},
['3 Av-149 St 2 5']={r=6768255,prev=6784053,rank=59},
['Allerton Av 2 5']={r=1614464,prev=1603702,rank=280},
['Baychester Av 5']={r=1094872,prev=1006343,rank=346},
['Bedford Park Blvd B D']={r=2143375,prev=1984267,rank=219},
['Bedford Park Blvd-Lehman College 4']={r=1538253,prev=1575555,rank=291},
['Bronx Park East 2 5']={r=769303,prev=752916,rank=385},
['Brook Av 6']={r=1823468,prev=1895570,rank=254},
['Buhre Av 6']={r=1146032,prev=1110307,rank=338},
['Burke Av 2 5']={r=1000896,prev=997617,rank=362},
['Burnside Av 4']={r=3113514,prev=3198218,rank=161},
['Castle Hill Av 6']={r=1954511,prev=2000084,rank=243},
['Cypress Av 6']={r=1043922,prev=1113667,rank=354},
['East 143 St-St Mary\'s St 6']={r=313938,prev=301240,rank=417},
['East 149 St 6']={r=1467410,prev=1508022,rank=302},
['East 180 St 2 5']={r=2211198,prev=2249646,rank=213},
['Eastchester-Dyre Av 5']={r=1331886,prev=1259009,rank=321},
['Elder Av 6']={r=1996492,prev=2000985,rank=236},
['Fordham Rd 4']={r=3120976,prev=3321215,rank=160},
['Fordham Rd B D']={r=3671217,prev=3596416,rank=137},
['Freeman St 2 5']={r=1358821,prev=1354453,rank=316},
['Gun Hill Rd 2 5']={r=2271942,prev=2197147,rank=208},
['Gun Hill Rd 5']={r=1248513,prev=1521987,rank=329},
['Hunts Point Av 6']={r=3174354,prev=3216569,rank=156},
['Intervale Av 2 5']={r=964689,prev=943016,rank=367},
['Jackson Av 2 5']={r=1584727,prev=1597307,rank=283},
['Kingsbridge Rd 4']={r=2733096,prev=2783082,rank=179},
['Kingsbridge Rd B D']={r=2485283,prev=2475107,rank=193},
['Longwood Av 6']={r=949680,prev=1040934,rank=369},
['Middletown Rd 6']={r=597839,prev=595044,rank=402},
['Morris Park 5']={r=711229,prev=668423,rank=393},
['Morrison Av-Soundview 6']={r=1970185,prev=1988053,rank=239},
['Mosholu Pkwy 4']={r=2491758,prev=2531607,rank=191},
['Mt Eden Av 4']={r=1551038,prev=1652407,rank=289},
['Nereid Av 2 5']={r=1006617,prev=1034335,rank=360},
['Norwood-205 St D']={r=2639003,prev=2611874,rank=186},
['Parkchester 6']={r=4734709,prev=4836244,rank=97},
['Pelham Bay Park 6']={r=2134403,prev=2146552,rank=220},
['Pelham Pkwy 2 5']={r=2651208,prev=2639586,rank=183},
['Pelham Pkwy 5']={r=896134,prev=844884,rank=372},
['Prospect Av 2 5']={r=2148059,prev=2142697,rank=217},
['Simpson St 2 5']={r=2602749,prev=2585974,rank=188},
['St Lawrence Av 6']={r=1276865,prev=1273609,rank=327},
['Tremont Av B D']={r=3052099,prev=3246064,rank=165},
['Van Cortlandt Park-242 St 1']={r=2189109,prev=2333136,rank=214},
['Wakefield-241 St 2']={r=1404748,prev=1484478,rank=307},
['West Farms Sq-East Tremont Av 2 5']={r=2104945,prev=2094751,rank=224},
['Westchester Sq-East Tremont Av 6']={r=1796415,prev=1817925,rank=257},
['Whitlock Av 6']={r=586845,prev=592103,rank=403},
['Woodlawn 4']={r=2094285,prev=2160859,rank=226},
['Zerega Av 6']={r=795756,prev=792928,rank=382},
['15 St-Prospect Park F G']={r=1964534,prev=1867619,rank=240},
['18 Av D']={r=1942617,prev=1909554,rank=244},
['18 Av F']={r=1113492,prev=1163390,rank=344},
['18 Av N']={r=1179756,prev=981261,rank=334},
['20 Av D']={r=1578971,prev=1534396,rank=284},
['20 Av N']={r=1142086,prev=1075077,rank=339},
['25 Av D']={r=1507759,prev=1571134,rank=295},
['25 St R']={r=1153842,prev=1149469,rank=337},
['36 St D N R']={r=4254406,prev=4293364,rank=116},
['4 Av F G/9 St R']={r=3924882,prev=3906028,rank=125},
['45 St R']={r=2461410,prev=2251921,rank=195},
['50 St D']={r=976988,prev=965643,rank=366},
['53 St R']={r=2797730,prev=2378056,rank=174},
['55 St D']={r=637405,prev=650590,rank=397},
['59 St N R']={r=3664480,prev=3998207,rank=138},
['7 Av B Q']={r=3103599,prev=3126475,rank=162},
['7 Av F G']={r=3675218,prev=3572223,rank=136},
['71 St D']={r=1722921,prev=1746966,rank=270},
['77 St R']={r=1674582,prev=1676402,rank=277},
['79 St D']={r=1926290,prev=1901043,rank=247},
['8 Av N']={r=3801700,prev=3700661,rank=130},
['86 St N']={r=708542,prev=609555,rank=394},
['86 St R']={r=3434888,prev=3470741,rank=145},
['9 Av D']={r=1708387,prev=1667200,rank=274},
['Alabama Av J']={r=628299,prev=652030,rank=398},
['Atlantic Av L']={r=469819,prev=559411,rank=411},
['Atlantic Av-Barclays Ctr B D N Q R 2 3 4 5']={r=13939794,prev=13807282,rank=20},
['Avenue H Q']={r=991766,prev=1034018,rank=363},
['Avenue I F']={r=584129,prev=326005,rank=404},
['Avenue J Q']={r=1775846,prev=1878547,rank=264},
['Avenue M Q']={r=1691285,prev=1808189,rank=276},
['Avenue N F']={r=877383,prev=612201,rank=375},
['Avenue P F']={r=739804,prev=509036,rank=389},
['Avenue U F']={r=547776,prev=310821,rank=405},
['Avenue U N']={r=1019104,prev=830278,rank=359},
['Avenue U Q']={r=2301941,prev=2329614,rank=202},
['Avenue X F']={r=758700,prev=775436,rank=388},
['Bay 50 St D']={r=821873,prev=826074,rank=381},
['Bay Pkwy D']={r=2446673,prev=2435949,rank=196},
['Bay Pkwy F']={r=362802,prev=188225,rank=414},
['Bay Pkwy N']={r=2071452,prev=2266916,rank=229},
['Bay Ridge Av R']={r=2354120,prev=2228497,rank=200},
['Bay Ridge-95 St R']={r=1743441,prev=1739178,rank=269},
['Bedford Av L']={r=7836366,prev=9053980,rank=45},
['Bedford-Nostrand Avs G']={r=2795387,prev=2774993,rank=175},
['Bergen St 2 3']={r=1208319,prev=1140677,rank=330},
['Bergen St F G']={r=3577496,prev=3478946,rank=141},
['Beverley Rd Q']={r=1048249,prev=1060568,rank=352},
['Beverly Rd 2 5']={r=1284232,prev=1307405,rank=326},
['Brighton Beach B Q']={r=3745994,prev=3778194,rank=133},
['Broadway G']={r=1506905,prev=1402102,rank=296},
['Broadway Junction A C J L Z']={r=2759349,prev=2810636,rank=177},
['Bushwick Av-Aberdeen St L']={r=600188,prev=671545,rank=401},
['Canarsie-Rockaway Pkwy L']={r=3302691,prev=3598843,rank=151},
['Carroll St F G']={r=3615019,prev=3490924,rank=139},
['Central Av M']={r=1472067,prev=725022,rank=301},
['Chauncey St J Z']={r=1076510,prev=1063828,rank=349},
['Church Av 2 5']={r=2862033,prev=2818535,rank=172},
['Church Av B Q']={r=5061013,prev=5161293,rank=90},
['Church Av F G']={r=3051736,prev=3099383,rank=166},
['Clark St 2 3']={r=1781419,prev=1550414,rank=259},
['Classon Av G']={r=1722852,prev=1649340,rank=271},
['Cleveland St J']={r=880879,prev=901928,rank=374},
['Clinton-Washington Avs C']={r=2144338,prev=2178439,rank=218},
['Clinton-Washington Avs G']={r=1609332,prev=1534802,rank=281},
['Coney Island-Stillwell Av D F N Q']={r=4579191,prev=4615664,rank=104},
['Cortelyou Rd Q']={r=1957538,prev=1994734,rank=241},
['Court St R/Borough Hall 2 3 4 5']={r=10135722,prev=10364534,rank=28},
['Crescent St J Z']={r=1391945,prev=1467166,rank=308},
['Crown Heights-Utica Av 3 4']={r=7933008,prev=7920192,rank=44},
['Cypress Hills J']={r=420647,prev=411331,rank=413},
['DeKalb Av B Q R']={r=6708640,prev=6776248,rank=60},
['DeKalb Av L']={r=3290894,prev=4000252,rank=152},
['Ditmas Av F']={r=1177275,prev=1149528,rank=335},
['East 105 St L']={r=1001343,prev=1139556,rank=361},
['Eastern Pkwy-Brooklyn Museum 2 3']={r=1338351,prev=1544013,rank=319},
['Euclid Av A C']={r=3240578,prev=3174827,rank=154},
['Flatbush Av-Brooklyn College 2 5']={r=5684108,prev=5822873,rank=76},
['Flushing Av G']={r=732897,prev=874498,rank=390},
['Flushing Av J M']={r=2773154,prev=2537390,rank=176},
['Fort Hamilton Pkwy D']={r=1207971,prev=1191580,rank=331},
['Fort Hamilton Pkwy F G']={r=1800167,prev=1765887,rank=256},
['Fort Hamilton Pkwy N']={r=1372278,prev=969878,rank=311},
['Franklin Av 2 3 4 5/Botanic Garden S']={r=4999385,prev=4604219,rank=92},
['Franklin Av C S']={r=1977940,prev=2051171,rank=238},
['Fulton St G']={r=1768601,prev=1745439,rank=265},
['Gates Av J Z']={r=2249791,prev=2234908,rank=209},
['Graham Av L']={r=2709511,prev=3093428,rank=180},
['Grand Army Plaza 2 3']={r=2295401,prev=2228173,rank=204},
['Grand St L']={r=1847219,prev=2126443,rank=252},
['Grant Av A']={r=1749932,prev=1842974,rank=266},
['Greenpoint Av G']={r=3089912,prev=2859047,rank=163},
['Halsey St J']={r=2120521,prev=2059030,rank=223},
['Halsey St L']={r=2176141,prev=2625255,rank=215},
['Hewes St J M']={r=1117566,prev=893262,rank=343},
['High St A C']={r=3536860,prev=3463611,rank=142},
['Hoyt St 2 3']={r=2293256,prev=1982208,rank=205},
['Hoyt-Schermerhorn Sts A C G']={r=3605153,prev=3370038,rank=140},
['Jay St-MetroTech A C F R']={r=12238047,prev=12504027,rank=24},
['Jefferson St L']={r=2237997,prev=2515861,rank=211},
['Junius St 3']={r=676092,prev=620548,rank=395},
['Kings Hwy B Q']={r=5938819,prev=5895421,rank=71},
['Kings Hwy F']={r=1129071,prev=1356085,rank=340},
['Kings Hwy N']={r=1371311,prev=1032541,rank=312},
['Kingston Av 3']={r=1472802,prev=1443692,rank=300},
['Kingston-Throop Avs C']={r=2055094,prev=2099891,rank=231},
['Knickerbocker Av M']={r=1544093,prev=772085,rank=290},
['Kosciuszko St J']={r=1779062,prev=1908610,rank=262},
['Lafayette Av C']={r=1599887,prev=1631673,rank=282},
['Liberty Av C']={r=833633,prev=839241,rank=380},
['Livonia Av L']={r=856615,prev=994378,rank=376},
['Lorimer St J M']={r=1747990,prev=1495068,rank=267},
['Lorimer St L/Metropolitan Av G']={r=4696924,prev=4821359,rank=100},
['Marcy Av J M Z']={r=4717791,prev=4171666,rank=98},
['Montrose Av L']={r=1933886,prev=2239760,rank=245},
['Morgan Av L']={r=2100475,prev=2465927,rank=225},
['Myrtle Av J M Z']={r=3854024,prev=3789470,rank=128},
['Myrtle-Willoughby Avs G']={r=1820637,prev=1768122,rank=255},
['Myrtle-Wyckoff Avs L M']={r=5927332,prev=6893183,rank=72},
['Nassau Av G']={r=3136229,prev=2880235,rank=159},
['Neck Rd Q']={r=1362524,prev=1366989,rank=314},
['Neptune Av F']={r=428163,prev=433083,rank=412},
['Nevins St 2 3 4 5']={r=3150597,prev=3215723,rank=158},
['New Lots Av 3']={r=1643487,prev=1644379,rank=279},
['New Lots Av L']={r=1254351,prev=1499170,rank=328},
['New Utrecht Av N/62 St D']={r=1501183,prev=1503742,rank=297},
['Newkirk Av 2 5']={r=2131839,prev=2221270,rank=221},
['Newkirk Plaza B Q']={r=3252504,prev=3258207,rank=153},
['Norwood Av J Z']={r=948571,prev=966728,rank=370},
['Nostrand Av 3']={r=1370372,prev=1250715,rank=313},
['Nostrand Av A C']={r=5608232,prev=5609408,rank=78},
['Ocean Pkwy Q']={r=1033340,prev=1018695,rank=357},
['Park Pl S']={r=519984,prev=537340,rank=409},
['Parkside Av Q']={r=1955051,prev=1979647,rank=242},
['Pennsylvania Av 3']={r=1360708,prev=1279685,rank=315},
['President St 2 5']={r=1037219,prev=1197019,rank=355},
['Prospect Av R']={r=1780893,prev=1638002,rank=260},
['Prospect Park B Q S']={r=3323334,prev=3289464,rank=149},
['Ralph Av C']={r=1829126,prev=1850375,rank=253},
['Rockaway Av 3']={r=1451431,prev=1412271,rank=303},
['Rockaway Av C']={r=1787343,prev=1790683,rank=258},
['Saratoga Av 3']={r=1556357,prev=1535733,rank=288},
['Sheepshead Bay B Q']={r=4169796,prev=4183545,rank=119},
['Shepherd Av C']={r=977012,prev=990387,rank=365},
['Smith-9 Sts F G']={r=1435824,prev=1466151,rank=305},
['Sterling St 2 5']={r=1654809,prev=1753125,rank=278},
['Sutter Av L']={r=1047762,prev=1246958,rank=353},
['Sutter Av-Rutland Rd 3']={r=2019485,prev=1968448,rank=233},
['Union St R']={r=2271983,prev=2090848,rank=207},
['Utica Av A C']={r=5106247,prev=5195786,rank=89},
['Van Siclen Av 3']={r=853106,prev=854150,rank=378},
['Van Siclen Av C']={r=918811,prev=955230,rank=371},
['Van Siclen Av J Z']={r=791691,prev=818735,rank=383},
['West 8 St-New York Aquarium F Q']={r=837836,prev=818685,rank=379},
['Wilson Av L']={r=1290221,prev=1420065,rank=325},
['Winthrop St 2 5']={r=1882065,prev=2140028,rank=250},
['York St F']={r=3927129,prev=3256154,rank=124},
['1 Av L']={r=5345371,prev=6743140,rank=83},
['103 St 1']={r=3766055,prev=4072703,rank=131},
['103 St 6']={r=4039570,prev=4065523,rank=120},
['103 St B C']={r=1498363,prev=1630405,rank=299},
['110 St 6']={r=3316061,prev=3394176,rank=150},
['116 St 2 3']={r=3345661,prev=3446526,rank=148},
['116 St 6']={r=4572453,prev=4683148,rank=105},
['116 St B C']={r=2288111,prev=2262578,rank=206},
['116 St-Columbia University 1']={r=4380469,prev=4528136,rank=112},
['125 St 1']={r=2368025,prev=2457157,rank=199},
['125 St 2 3']={r=4644262,prev=4727671,rank=101},
['125 St 4 5 6']={r=8554857,prev=8630430,rank=37},
['125 St A B C D']={r=9208598,prev=9037343,rank=31},
['135 St 2 3']={r=4268823,prev=4506259,rank=115},
['135 St B C']={r=1743921,prev=1622552,rank=268},
['137 St-City College 1']={r=3874783,prev=4260166,rank=126},
['14 St A C E/8 Av L']={r=14239275,prev=14324670,rank=18},
['14 St F M 1 2 3/6 Av L']={r=14736035,prev=15002214,rank=17},
['14 St-Union Sq L N Q R W 4 5 6']={r=32385260,prev=33124407,rank=4},
['145 St 1']={r=2936613,prev=3062446,rank=169},
['145 St 3']={r=954825,prev=635413,rank=368},
['145 St A B C D']={r=7464653,prev=7434662,rank=49},
['155 St B D']={r=1123868,prev=1115948,rank=341},
['155 St C']={r=895036,prev=1001262,rank=373},
['157 St 1']={r=3739786,prev=3514522,rank=134},
['163 St-Amsterdam Av C']={r=1390312,prev=548092,rank=309},
['168 St A C 1']={r=6156288,prev=8150537,rank=67},
['175 St A']={r=4182625,prev=3879652,rank=118},
['18 St 1']={r=2649616,prev=2683235,rank=184},
['181 St 1']={r=3523536,prev=3605435,rank=143},
['181 St A']={r=3404841,prev=3368097,rank=147},
['190 St A']={r=1535450,prev=1423142,rank=292},
['191 St 1']={r=2333160,prev=2526932,rank=201},
['2 Av F']={r=5583944,prev=5034358,rank=79},
['207 St 1']={r=1853146,prev=2020214,rank=251},
['215 St 1']={r=527505,prev=553050,rank=408},
['23 St 1']={r=4627755,prev=4853909,rank=102},
['23 St 6']={r=8659806,prev=9035498,rank=35},
['23 St C E']={r=7272610,prev=7420152,rank=52},
['23 St F M']={r=8619473,prev=5099809,rank=36},
['23 St R W']={r=7085694,prev=8155834,rank=53},
['28 St 1']={r=4493352,prev=4444072,rank=108},
['28 St 6']={r=5834989,prev=3525030,rank=73},
['28 St R W']={r=4018310,prev=4445982,rank=122},
['3 Av L']={r=1700456,prev=2204834,rank=275},
['33 St 6']={r=8934900,prev=9530273,rank=33},
['34 St-Herald Sq B D F M N Q R W']={r=39385436,prev=39111312,rank=3},
['34 St-Hudson Yards 7']={r=6108384,prev=3189867,rank=69},
['34 St-Penn Station 1 2 3']={r=25967676,prev=25968950,rank=6},
['34 St-Penn Station A C E']={r=25631364,prev=24857456,rank=7},
['42 St-Bryant Pk B D F M/5 Av 7']={r=17213702,prev=16056128,rank=13},
['47-50 Sts-Rockefeller Center B D F M']={r=18604810,prev=17289384,rank=11},
['49 St N R W']={r=7410041,prev=8394862,rank=50},
['5 Av-53 St E M']={r=7684091,prev=7748504,rank=47},
['5 Av-59 St N R W']={r=4995128,prev=5136918,rank=93},
['50 St 1']={r=8134360,prev=8088925,rank=41},
['50 St C E']={r=6902595,prev=6441984,rank=57},
['57 St F']={r=4550216,prev=2254820,rank=106},
['57 St-7 Av N Q R W']={r=11012550,prev=11978164,rank=26},
['59 St-Columbus Circle A B C D 1']={r=23040650,prev=22991014,rank=8},
['66 St-Lincoln Center 1']={r=7068256,prev=7196026,rank=54},
['68 St-Hunter College 6']={r=6699711,prev=6537270,rank=61},
['7 Av B D E']={r=5508778,prev=5299531,rank=80},
['72 St 1 2 3']={r=12379560,prev=12879887,rank=23},
['72 St B C']={r=2837041,prev=1382963,rank=173},
['72 St Q']={r=9528891,prev=9068131,rank=30},
['77 St 6']={r=7821286,prev=7653602,rank=46},
['79 St 1']={r=4745863,prev=4990840,rank=96},
['8 St-New York University R W']={r=5434212,prev=5686332,rank=82},
['81 St-Museum of Natural History B C']={r=4407607,prev=4748083,rank=111},
['86 St 1']={r=5659795,prev=6139911,rank=77},
['86 St 4 5 6']={r=13537308,prev=13486510,rank=21},
['86 St B C']={r=3232637,prev=1734366,rank=155},
['86 St Q']={r=8378778,prev=8075480,rank=38},
['96 St 1 2 3']={r=11628887,prev=11702401,rank=25},
['96 St 6']={r=5145222,prev=5151742,rank=88},
['96 St B C']={r=3038864,prev=2836643,rank=167},
['96 St Q']={r=6154837,prev=6014304,rank=68},
['Astor Place 6']={r=5502925,prev=5111358,rank=81},
['Bowery J Z']={r=1325244,prev=1275541,rank=322},
['Bowling Green 4 5']={r=8362034,prev=8251885,rank=39},
['Broad St J Z']={r=2172223,prev=1967616,rank=216},
['Broadway-Lafayette St B D F M/Bleecker St 6']={r=12455155,prev=11414999,rank=22},
['Brooklyn Bridge-City Hall 4 5 6/Chambers St J Z']={r=9065146,prev=9060206,rank=32},
['Canal St 1']={r=1984827,prev=1884371,rank=237},
['Canal St A C E']={r=6403172,prev=6160037,rank=63},
['Canal St J N Q R W Z 6']={r=15861864,prev=15995877,rank=16},
['Cathedral Pkwy-110 St 1']={r=3703893,prev=4013259,rank=135},
['Cathedral Pkwy-110 St B C']={r=2396624,prev=1168203,rank=197},
['Central Park North-110 St 2 3']={r=2666985,prev=2823756,rank=181},
['Chambers St 1 2 3']={r=5941546,prev=6108641,rank=70},
['Chambers St A C/WTC E/Park Pl 2 3/Cortlandt R W']={r=20820549,prev=21636146,rank=9},
['Christopher St-Sheridan Sq 1']={r=3412332,prev=3312074,rank=146},
['City Hall R W']={r=1710380,prev=1920070,rank=273},
['Delancey St F/Essex St J M Z']={r=8861296,prev=7922586,rank=34},
['Dyckman St 1']={r=2079656,prev=2263932,rank=228},
['Dyckman St A']={r=2238372,prev=2037425,rank=210},
['East Broadway F']={r=4460330,prev=4216327,rank=109},
['Franklin St 1']={r=1567005,prev=1757424,rank=285},
['Fulton St A C J Z 2 3 4 5']={r=27715365,prev=27719115,rank=5},
['Grand Central-42 St S 4 5 6 7']={r=45745700,prev=45207849,rank=2},
['Grand St B D']={r=8024364,prev=7187070,rank=43},
['Harlem-148 St 3']={r=1120454,prev=1232448,rank=342},
['Houston St 1']={r=4496793,prev=4488886,rank=107},
['Inwood-207 St A']={r=3150731,prev=2796626,rank=157},
['Lexington Av N R W/59 St 4 5 6']={r=16760813,prev=16955204,rank=15},
['Lexington Av-53 St E M/51 St 6']={r=18957465,prev=18585755,rank=10},
['Lexington Av-63 St F Q']={r=6567634,prev=6506078,rank=62},
['Marble Hill-225 St 1']={r=1561844,prev=1686237,rank=287},
['Prince St R W']={r=4342692,prev=5142727,rank=113},
['Rector St 1']={r=2554523,prev=2764454,rank=189},
['Rector St R W']={r=2014996,prev=2154295,rank=234},
['Roosevelt Island F']={r=2380764,prev=2269432,rank=198},
['South Ferry 1/Whitehall St R W']={r=10272682,prev=10275268,rank=27},
['Spring St 6']={r=3754272,prev=3654673,rank=132},
['Spring St C E']={r=4423135,prev=3853792,rank=110},
['Times Sq-42 St N Q R W S 1 2 3 7/42 St A C E']={r=65020294,prev=65060656,rank=1},
['Wall St 2 3']={r=6910581,prev=6452733,rank=56},
['Wall St 4 5']={r=5720475,prev=5646207,rank=75},
['West 4 St-Washington Sq A B C D E F M']={r=14063633,prev=13446383,rank=19},
['WTC Cortlandt 1']={r=4232521,prev=1245455,rank=117},
['103 St-Corona Plaza 7']={r=6399657,prev=6319564,rank=64},
['104 St A']={r=536924,prev=548871,rank=406},
['104 St J Z']={r=774888,prev=456765,rank=384},
['111 St 7']={r=3836999,prev=3608389,rank=129},
['111 St A']={r=760163,prev=762641,rank=387},
['111 St J']={r=350344,prev=801639,rank=415},
['121 St J Z']={r=675500,prev=391696,rank=396},
['169 St F']={r=2465120,prev=2497336,rank=194},
['21 St G']={r=535536,prev=550464,rank=407},
['21 St-Queensbridge F']={r=3516992,prev=3340366,rank=144},
['30 Av N W']={r=5230182,prev=2373721,rank=87},
['33 St-Rawson St 7']={r=2907388,prev=3031465,rank=171},
['36 Av N W']={r=1933812,prev=1446827,rank=246},
['36 St M R']={r=1383420,prev=1513330,rank=310},
['39 Av-Dutch Kills N W']={r=761816,prev=665750,rank=386},
['40 St-Lowery St 7']={r=3074342,prev=3048104,rank=164},
['46 St M R']={r=2609445,prev=2711011,rank=187},
['46 St-Bliss St 7']={r=4019044,prev=4058815,rank=121},
['52 St 7']={r=1907368,prev=1883246,rank=248},
['63 Dr-Rego Park M R']={r=4753706,prev=4769745,rank=95},
['65 St M R']={r=1098148,prev=1129031,rank=345},
['67 Av M R']={r=2641450,prev=2592645,rank=185},
['69 St 7']={r=1564387,prev=1510410,rank=286},
['74-Broadway 7/Jackson Hts-Roosevelt Av E F M R']={r=17077862,prev=16994358,rank=14},
['75 Av E F']={r=1059027,prev=1019978,rank=351},
['75 St-Elderts Ln J Z']={r=1029388,prev=992267,rank=358},
['80 St A']={r=1298825,prev=1332047,rank=324},
['82 St-Jackson Hts 7']={r=4893865,prev=4741470,rank=94},
['85 St-Forest Pkwy J']={r=1061293,prev=1063133,rank=350},
['88 St A']={r=853110,prev=855851,rank=377},
['90 St-Elmhurst Av 7']={r=5272683,prev=5245160,rank=86},
['Aqueduct Racetrack A']={r=601436,prev=732091,rank=400},
['Aqueduct-North Conduit Av A']={r=263422,prev=276067,rank=419},
['Astoria Blvd N W']={r=723354,prev=4226298,rank=391},
['Astoria-Ditmars Blvd N W']={r=5277341,prev=4543854,rank=85},
['Beach 105 St A S']={r=88439,prev=92852,rank=424},
['Beach 25 St A']={r=517164,prev=543839,rank=410},
['Beach 36 St A']={r=292305,prev=275165,rank=418},
['Beach 44 St A']={r=215701,prev=216609,rank=421},
['Beach 60 St A']={r=623826,prev=630038,rank=399},
['Beach 67 St-Arverne By The Sea A']={r=718008,prev=669421,rank=392},
['Beach 90 St A S']={r=348771,prev=382766,rank=416},
['Beach 98 St A S']={r=164130,prev=154620,rank=422},
['Briarwood-Van Wyck Blvd E F']={r=1501152,prev=1462744,rank=298},
['Broad Channel A S']={r=90358,prev=82248,rank=423},
['Broadway N W']={r=3038655,prev=2436810,rank=168},
['Court Sq E G M 7']={r=7033377,prev=7218939,rank=55},
['Elmhurst Av M R']={r=3867341,prev=3898046,rank=127},
['Far Rockaway-Mott Av A']={r=1347765,prev=1376087,rank=317},
['Flushing-Main St 7']={r=17568837,prev=17799862,rank=12},
['Forest Av M']={r=1310163,prev=927801,rank=323},
['Forest Hills-71 Av E F M R']={r=8027234,prev=8115385,rank=42},
['Fresh Pond Rd M']={r=1776084,prev=1400512,rank=263},
['Grand Av-Newtown M R']={r=5730846,prev=5713827,rank=74},
['Howard Beach-JFK Airport A']={r=1171303,prev=1154695,rank=336},
['Hunters Point Av 7']={r=1885928,prev=1932478,rank=249},
['Jamaica Center-Parsons-Archer E J Z']={r=10010419,prev=10681269,rank=29},
['Jamaica-179 St F']={r=6262449,prev=6270766,rank=66},
['Jamaica-Van Wyck E']={r=1412179,prev=1502672,rank=306},
['Junction Blvd 7']={r=6883317,prev=6896657,rank=58},
['Kew Gardens-Union Turnpike E F']={r=7625674,prev=7680149,rank=48},
['Mets-Willets Point 7']={r=2025162,prev=1756825,rank=232},
['Middle Village-Metropolitan Av M']={r=1090449,prev=954875,rank=347},
['Northern Blvd M R']={r=2008091,prev=2097374,rank=235},
['Ozone Park-Lefferts Blvd A']={r=2216647,prev=2296755,rank=212},
['Parsons Blvd F']={r=2086114,prev=2003517,rank=227},
['Queens Plaza E M R']={r=4334290,prev=3886574,rank=114},
['Queensboro Plaza N W 7']={r=5018211,prev=5079051,rank=91},
['Rockaway Blvd A']={r=2299903,prev=2336304,rank=203},
['Rockaway Park-Beach 116 St A S']={r=228144,prev=240483,rank=420},
['Seneca Av M']={r=1080829,prev=565714,rank=348},
['Steinway St M R']={r=4715335,prev=5075623,rank=99},
['Sutphin Blvd F']={r=1345420,prev=1303795,rank=318},
['Sutphin Blvd-Archer Av-JFK Airport E J Z']={r=7354064,prev=7282128,rank=51},
['Vernon Blvd-Jackson Av 7']={r=4623070,prev=4493326,rank=103},
['Woodhaven Blvd J Z']={r=1337787,prev=1370889,rank=320},
['Woodhaven Blvd M R']={r=6381132,prev=6509386,rank=65},
['Woodside-61 St 7']={r=5345369,prev=5282486,rank=84},
}
local csv = {
['R01']={boro='Q',struc='Elevated',lat='40.775036',lon='-73.912034',id='1',n='',s='Manhattan'}, --Astoria - Ditmars Blvd / N W
['R03']={boro='Q',struc='Elevated',lat='40.770258',lon='-73.917843',id='2',n='Ditmars Blvd',s='Manhattan'}, --Astoria Blvd / N W
['R04']={boro='Q',struc='Elevated',lat='40.766779',lon='-73.921479',id='3',n='Astoria - Ditmars Blvd',s='Manhattan'}, --30 Av / N W
['R05']={boro='Q',struc='Elevated',lat='40.76182',lon='-73.925508',id='4',n='Astoria - Ditmars Blvd',s='Manhattan'}, --Broadway / N W
['R06']={boro='Q',struc='Elevated',lat='40.756804',lon='-73.929575',id='5',n='Astoria - Ditmars Blvd',s='Manhattan'}, --36 Av / N W
['R08']={boro='Q',struc='Elevated',lat='40.752882',lon='-73.932755',id='6',n='Astoria - Ditmars Blvd',s='Manhattan'}, --39 Av / N W
['R11']={boro='M',struc='Subway',lat='40.76266',lon='-73.967258',id='7',n='Queens',s='Downtown & Brooklyn'}, --Lexington Av/59 St / N W R
['R13']={boro='M',struc='Subway',lat='40.764811',lon='-73.973347',id='8',n='Queens',s='Downtown & Brooklyn'}, --5 Av/59 St / N W R
['R14']={boro='M',struc='Subway',lat='40.764664',lon='-73.980658',id='9',n='Uptown & Queens',s='Downtown & Brooklyn'}, --57 St - 7 Av / N Q R W
['R15']={boro='M',struc='Subway',lat='40.759901',lon='-73.984139',id='10',n='Uptown & Queens',s='Downtown & Brooklyn'}, --49 St / N R W
['R16']={boro='M',struc='Subway',lat='40.754672',lon='-73.986754',id='11',n='Uptown & Queens',s='Downtown & Brooklyn'}, --Times Sq - 42 St / N Q R W
['R17']={boro='M',struc='Subway',lat='40.749567',lon='-73.98795',id='12',n='Uptown & Queens',s='Downtown & Brooklyn'}, --34 St - Herald Sq / N Q R W
['R18']={boro='M',struc='Subway',lat='40.745494',lon='-73.988691',id='13',n='Uptown & Queens',s='Downtown & Brooklyn'}, --28 St / R W
['R19']={boro='M',struc='Subway',lat='40.741303',lon='-73.989344',id='14',n='Uptown & Queens',s='Downtown & Brooklyn'}, --23 St / R W
['R20']={boro='M',struc='Subway',lat='40.735736',lon='-73.990568',id='15',n='Uptown & Queens',s='Downtown & Brooklyn'}, --14 St - Union Sq / N Q R W
['R21']={boro='M',struc='Subway',lat='40.730328',lon='-73.992629',id='16',n='Uptown & Queens',s='Downtown & Brooklyn'}, --8 St - NYU / R W
['R22']={boro='M',struc='Subway',lat='40.724329',lon='-73.997702',id='17',n='Uptown & Queens',s='Downtown & Brooklyn'}, --Prince St / R W
['R23']={boro='M',struc='Subway',lat='40.719527',lon='-74.001775',id='18',n='Uptown & Queens',s='Downtown & Brooklyn'}, --Canal St / R W
['Q01']={boro='M',struc='Subway',lat='40.718383',lon='-74.00046',id='19',n='Uptown & Queens',s='Downtown & Brooklyn'}, --Canal St / N Q
['R24']={boro='M',struc='Subway',lat='40.713282',lon='-74.006978',id='20',n='Uptown & Queens',s='Downtown & Brooklyn'}, --City Hall / R W
['R25']={boro='M',struc='Subway',lat='40.710668',lon='-74.011029',id='21',n='Uptown & Queens',s='Downtown & Brooklyn'}, --Cortlandt St / R W
['R26']={boro='M',struc='Subway',lat='40.70722',lon='-74.013342',id='22',n='Uptown & Queens',s='Downtown & Brooklyn'}, --Rector St / R W
['R27']={boro='M',struc='Subway',lat='40.703087',lon='-74.012994',id='23',n='Uptown & Queens',s='Brooklyn'}, --Whitehall St / R W
['R28']={boro='Bk',struc='Subway',lat='40.6941',lon='-73.991777',id='24',n='Manhattan',s='Bay Ridge - 95 St'}, --Court St / R
['R29']={boro='Bk',struc='Subway',lat='40.69218',lon='-73.985942',id='25',n='Manhattan',s='Bay Ridge - 95 St'}, --Jay St - MetroTech / R
['R30']={boro='Bk',struc='Subway',lat='40.690635',lon='-73.981824',id='26',n='Manhattan',s='Coney Island - Bay Ridge'}, --DeKalb Av / B Q R
['R31']={boro='Bk',struc='Subway',lat='40.683666',lon='-73.97881',id='27',n='Manhattan',s='Coney Island - Bay Ridge'}, --Atlantic Av - Barclays Ctr / D N R
['R32']={boro='Bk',struc='Subway',lat='40.677316',lon='-73.98311',id='28',n='Manhattan',s='Bay Ridge - 95 St'}, --Union St / R
['R33']={boro='Bk',struc='Subway',lat='40.670847',lon='-73.988302',id='29',n='Manhattan',s='Bay Ridge - 95 St'}, --9 St / R
['R34']={boro='Bk',struc='Subway',lat='40.665414',lon='-73.992872',id='30',n='Manhattan',s='Bay Ridge - 95 St'}, --Prospect Av / R
['R35']={boro='Bk',struc='Subway',lat='40.660397',lon='-73.998091',id='31',n='Manhattan',s='Bay Ridge - 95 St'}, --25 St / R
['R36']={boro='Bk',struc='Subway',lat='40.655144',lon='-74.003549',id='32',n='Manhattan',s='Coney Island - Bay Ridge'}, --36 St / D N R
['R39']={boro='Bk',struc='Subway',lat='40.648939',lon='-74.010006',id='33',n='Manhattan',s='Bay Ridge - 95 St'}, --45 St / R
['R40']={boro='Bk',struc='Subway',lat='40.645069',lon='-74.014034',id='34',n='Manhattan',s='Bay Ridge - 95 St'}, --53 St / R
['R41']={boro='Bk',struc='Subway',lat='40.641362',lon='-74.017881',id='35',n='Manhattan',s='Coney Island - Bay Ridge'}, --59 St / N R
['R42']={boro='Bk',struc='Subway',lat='40.634967',lon='-74.023377',id='36',n='Manhattan',s='95 St'}, --Bay Ridge Av / R
['R43']={boro='Bk',struc='Subway',lat='40.629742',lon='-74.02551',id='37',n='Manhattan',s='95 St'}, --77 St / R
['R44']={boro='Bk',struc='Subway',lat='40.622687',lon='-74.028398',id='38',n='Manhattan',s='95 St'}, --86 St / R
['R45']={boro='Bk',struc='Subway',lat='40.616622',lon='-74.030876',id='39',n='Manhattan',s=''}, --Bay Ridge - 95 St / R
['D24']={boro='Bk',struc='Subway',lat='40.68446',lon='-73.97689',id='40',n='Manhattan',s='Brighton Beach & Coney Island'}, --Atlantic Av - Barclays Ctr / B Q
['D25']={boro='Bk',struc='Subway',lat='40.67705',lon='-73.972367',id='41',n='Manhattan',s='Brighton Beach & Coney Island'}, --7 Av / B Q
['D26']={boro='Bk',struc='Open Cut',lat='40.661614',lon='-73.962246',id='42',n='Manhattan & Franklin Av',s='Brighton Beach & Coney Island'}, --Prospect Park / B Q
['D27']={boro='Bk',struc='Open Cut',lat='40.655292',lon='-73.961495',id='43',n='Manhattan',s='Brighton Beach & Coney Island'}, --Parkside Av / B Q
['D28']={boro='Bk',struc='Open Cut',lat='40.650527',lon='-73.962982',id='44',n='Manhattan',s='Brighton Beach & Coney Island'}, --Church Av / B Q
['D29']={boro='Bk',struc='Open Cut',lat='40.644031',lon='-73.964492',id='45',n='Manhattan',s='Brighton Beach & Coney Island'}, --Beverley Rd / B Q
['D30']={boro='Bk',struc='Open Cut',lat='40.640927',lon='-73.963891',id='46',n='Manhattan',s='Brighton Beach & Coney Island'}, --Cortelyou Rd / B Q
['D31']={boro='Bk',struc='Open Cut',lat='40.635082',lon='-73.962793',id='47',n='Manhattan',s='Brighton Beach & Coney Island'}, --Newkirk Plaza / B Q
['D32']={boro='Bk',struc='Open Cut',lat='40.62927',lon='-73.961639',id='48',n='Manhattan',s='Brighton Beach & Coney Island'}, --Avenue H / B Q
['D33']={boro='Bk',struc='Open Cut',lat='40.625039',lon='-73.960803',id='49',n='Manhattan',s='Brighton Beach & Coney Island'}, --Avenue J / B Q
['D34']={boro='Bk',struc='Open Cut',lat='40.617618',lon='-73.959399',id='50',n='Manhattan',s='Brighton Beach & Coney Island'}, --Avenue M / B Q
['D35']={boro='Bk',struc='Open Cut',lat='40.60867',lon='-73.957734',id='51',n='Manhattan',s='Brighton Beach & Coney Island'}, --Kings Hwy / B Q
['D37']={boro='Bk',struc='Open Cut',lat='40.5993',lon='-73.955929',id='52',n='Manhattan',s='Brighton Beach & Coney Island'}, --Avenue U / B Q
['D38']={boro='Bk',struc='Open Cut',lat='40.595246',lon='-73.955161',id='53',n='Manhattan',s='Brighton Beach & Coney Island'}, --Neck Rd / B Q
['D39']={boro='Bk',struc='Open Cut',lat='40.586896',lon='-73.954155',id='54',n='Manhattan',s='Brighton Beach & Coney Island'}, --Sheepshead Bay / B Q
['D40']={boro='Bk',struc='Elevated',lat='40.577621',lon='-73.961376',id='55',n='Manhattan',s='Coney Island'}, --Brighton Beach / B Q
['D41']={boro='Bk',struc='Elevated',lat='40.576312',lon='-73.968501',id='56',n='Manhattan',s='Stillwell Av'}, --Ocean Pkwy / Q
['D42']={boro='Bk',struc='Elevated',lat='40.576127',lon='-73.975939',id='57',n='Manhattan',s='Stillwell Av'}, --W 8 St - NY Aquarium / F Q
['D43']={boro='Bk',struc='Viaduct',lat='40.577422',lon='-73.981233',id='58',n='Manhattan',s=''}, --Coney Island - Stillwell Av / D F N Q
['B12']={boro='Bk',struc='Open Cut',lat='40.646292',lon='-73.994324',id='59',n='Manhattan',s='Coney Island'}, --9 Av / D
['B13']={boro='Bk',struc='Elevated',lat='40.640914',lon='-73.994304',id='60',n='Manhattan',s='Coney Island'}, --Fort Hamilton Pkwy / D
['B14']={boro='Bk',struc='Elevated',lat='40.63626',lon='-73.994791',id='61',n='Manhattan',s='Coney Island'}, --50 St / D
['B15']={boro='Bk',struc='Elevated',lat='40.631435',lon='-73.995476',id='62',n='Manhattan',s='Coney Island'}, --55 St / D
['B16']={boro='Bk',struc='Elevated',lat='40.626472',lon='-73.996895',id='63',n='Manhattan',s='Coney Island'}, --62 St / D
['B17']={boro='Bk',struc='Elevated',lat='40.619589',lon='-73.998864',id='64',n='Manhattan',s='Coney Island'}, --71 St / D
['B18']={boro='Bk',struc='Elevated',lat='40.613501',lon='-74.00061',id='65',n='Manhattan',s='Coney Island'}, --79 St / D
['B19']={boro='Bk',struc='Elevated',lat='40.607954',lon='-74.001736',id='66',n='Manhattan',s='Coney Island'}, --18 Av / D
['B20']={boro='Bk',struc='Elevated',lat='40.604556',lon='-73.998168',id='67',n='Manhattan',s='Coney Island'}, --20 Av / D
['B21']={boro='Bk',struc='Elevated',lat='40.601875',lon='-73.993728',id='68',n='Manhattan',s='Coney Island'}, --Bay Pkwy / D
['B22']={boro='Bk',struc='Elevated',lat='40.597704',lon='-73.986829',id='69',n='Manhattan',s='Coney Island'}, --25 Av / D
['B23']={boro='Bk',struc='Elevated',lat='40.588841',lon='-73.983765',id='70',n='Manhattan',s='Coney Island'}, --Bay 50 St / D
['N02']={boro='Bk',struc='Open Cut',lat='40.635064',lon='-74.011719',id='71',n='Manhattan',s='Coney Island'}, --8 Av / N
['N03']={boro='Bk',struc='Open Cut',lat='40.631386',lon='-74.005351',id='72',n='Manhattan',s='Coney Island'}, --Fort Hamilton Pkwy / N
['N04']={boro='Bk',struc='Open Cut',lat='40.624842',lon='-73.996353',id='73',n='Manhattan',s='Coney Island'}, --New Utrecht Av / N
['N05']={boro='Bk',struc='Open Cut',lat='40.620671',lon='-73.990414',id='74',n='Manhattan',s='Coney Island'}, --18 Av / N
['N06']={boro='Bk',struc='Open Cut',lat='40.61741',lon='-73.985026',id='75',n='Manhattan',s='Coney Island'}, --20 Av / N
['N07']={boro='Bk',struc='Open Cut',lat='40.611815',lon='-73.981848',id='76',n='Manhattan',s='Coney Island'}, --Bay Pkwy / N
['N08']={boro='Bk',struc='Open Cut',lat='40.603923',lon='-73.980353',id='77',n='Manhattan',s='Coney Island'}, --Kings Hwy / N
['N09']={boro='Bk',struc='Open Cut',lat='40.597473',lon='-73.979137',id='78',n='Manhattan',s='Coney Island'}, --Avenue U / N
['N10']={boro='Bk',struc='Open Cut',lat='40.592721',lon='-73.97823',id='79',n='Manhattan',s='Coney Island'}, --86 St / N
['J12']={boro='Q',struc='Elevated',lat='40.700492',lon='-73.828294',id='80',n='Jamaica',s='Manhattan'}, --121 St / J Z
['J13']={boro='Q',struc='Elevated',lat='40.697418',lon='-73.836345',id='81',n='Jamaica',s='Manhattan'}, --111 St / J
['J14']={boro='Q',struc='Elevated',lat='40.695178',lon='-73.84433',id='82',n='Jamaica',s='Manhattan'}, --104 St / J Z
['J15']={boro='Q',struc='Elevated',lat='40.693879',lon='-73.851576',id='83',n='Jamaica',s='Manhattan'}, --Woodhaven Blvd / J Z
['J16']={boro='Q',struc='Elevated',lat='40.692435',lon='-73.86001',id='84',n='Jamaica',s='Manhattan'}, --85 St - Forest Pkwy / J
['J17']={boro='Q',struc='Elevated',lat='40.691324',lon='-73.867139',id='85',n='Jamaica',s='Manhattan'}, --75 St / J Z
['J19']={boro='Bk',struc='Elevated',lat='40.689941',lon='-73.87255',id='86',n='Jamaica',s='Manhattan'}, --Cypress Hills / J
['J20']={boro='Bk',struc='Elevated',lat='40.683194',lon='-73.873785',id='87',n='Jamaica',s='Manhattan'}, --Crescent St / J Z
['J21']={boro='Bk',struc='Elevated',lat='40.68141',lon='-73.880039',id='88',n='Jamaica',s='Manhattan'}, --Norwood Av / J Z
['J22']={boro='Bk',struc='Elevated',lat='40.679947',lon='-73.884639',id='89',n='Jamaica',s='Manhattan'}, --Cleveland St / J
['J23']={boro='Bk',struc='Elevated',lat='40.678024',lon='-73.891688',id='90',n='Jamaica',s='Manhattan'}, --Van Siclen Av / J Z
['J24']={boro='Bk',struc='Elevated',lat='40.676992',lon='-73.898654',id='91',n='Jamaica',s='Manhattan'}, --Alabama Av / J
['J27']={boro='Bk',struc='Elevated',lat='40.679498',lon='-73.904512',id='92',n='Jamaica',s='Manhattan'}, --Broadway Jct / J Z
['J28']={boro='Bk',struc='Elevated',lat='40.682893',lon='-73.910456',id='93',n='Jamaica',s='Manhattan'}, --Chauncey St / J Z
['J29']={boro='Bk',struc='Elevated',lat='40.68637',lon='-73.916559',id='94',n='Jamaica',s='Manhattan'}, --Halsey St / J
['J30']={boro='Bk',struc='Elevated',lat='40.68963',lon='-73.92227',id='95',n='Jamaica',s='Manhattan'}, --Gates Av / J Z
['J31']={boro='Bk',struc='Elevated',lat='40.693342',lon='-73.928814',id='96',n='Jamaica',s='Manhattan'}, --Kosciuszko St / J
['M11']={boro='Bk',struc='Elevated',lat='40.697207',lon='-73.935657',id='97',n='Jamaica - Middle Village',s='Manhattan'}, --Myrtle Av / J M Z
['M12']={boro='Bk',struc='Elevated',lat='40.70026',lon='-73.941126',id='98',n='Jamaica - Middle Village',s='Manhattan'}, --Flushing Av / J M
['M13']={boro='Bk',struc='Elevated',lat='40.703869',lon='-73.947408',id='99',n='Jamaica - Middle Village',s='Manhattan'}, --Lorimer St / J M
['M14']={boro='Bk',struc='Elevated',lat='40.70687',lon='-73.953431',id='100',n='Jamaica - Middle Village',s='Manhattan'}, --Hewes St / J M
['M16']={boro='Bk',struc='Elevated',lat='40.708359',lon='-73.957757',id='101',n='Jamaica - Middle Village',s='Manhattan'}, --Marcy Av / J M Z
['M18']={boro='M',struc='Subway',lat='40.718315',lon='-73.987437',id='102',n='Brooklyn',s='Broad St (JZ) - Uptown (M)'}, --Essex St / J M Z
['M19']={boro='M',struc='Subway',lat='40.72028',lon='-73.993915',id='103',n='Brooklyn',s='Broad St'}, --Bowery / J Z
['M20']={boro='M',struc='Subway',lat='40.718092',lon='-73.999892',id='104',n='Brooklyn',s='Broad St'}, --Canal St / J Z
['M21']={boro='M',struc='Subway',lat='40.713243',lon='-74.003401',id='105',n='Brooklyn',s='Broad St'}, --Chambers St / J Z
['M22']={boro='M',struc='Subway',lat='40.710374',lon='-74.007582',id='106',n='Brooklyn',s='Broad St'}, --Fulton St / J Z
['M23']={boro='M',struc='Subway',lat='40.706476',lon='-74.011056',id='107',n='Brooklyn',s=''}, --Broad St / J Z
['M01']={boro='Q',struc='Elevated',lat='40.711396',lon='-73.889601',id='108',n='Manhattan',s=''}, --Middle Village - Metropolitan Av / M
['M04']={boro='Q',struc='Elevated',lat='40.706186',lon='-73.895877',id='109',n='Manhattan',s='Metropolitan Av'}, --Fresh Pond Rd / M
['M05']={boro='Q',struc='Elevated',lat='40.704423',lon='-73.903077',id='110',n='Manhattan',s='Metropolitan Av'}, --Forest Av / M
['M06']={boro='Q',struc='Elevated',lat='40.702762',lon='-73.90774',id='111',n='Manhattan',s='Metropolitan Av'}, --Seneca Av / M
['M08']={boro='Bk',struc='Elevated',lat='40.69943',lon='-73.912385',id='112',n='Manhattan',s='Metropolitan Av'}, --Myrtle - Wyckoff Avs / M
['M09']={boro='Bk',struc='Elevated',lat='40.698664',lon='-73.919711',id='113',n='Manhattan',s='Metropolitan Av'}, --Knickerbocker Av / M
['M10']={boro='Bk',struc='Elevated',lat='40.697857',lon='-73.927397',id='114',n='Manhattan',s='Metropolitan Av'}, --Central Av / M
['L01']={boro='M',struc='Subway',lat='40.739777',lon='-74.002578',id='115',n='',s='Brooklyn'}, --8 Av / L
['L02']={boro='M',struc='Subway',lat='40.737335',lon='-73.996786',id='116',n='8 Av',s='Brooklyn'}, --6 Av / L
['L03']={boro='M',struc='Subway',lat='40.734789',lon='-73.99073',id='117',n='8 Av',s='Brooklyn'}, --Union Sq - 14 St / L
['L05']={boro='M',struc='Subway',lat='40.732849',lon='-73.986122',id='118',n='8 Av',s='Brooklyn'}, --3 Av / L
['L06']={boro='M',struc='Subway',lat='40.730953',lon='-73.981628',id='119',n='8 Av',s='Brooklyn'}, --1 Av / L
['L08']={boro='Bk',struc='Subway',lat='40.717304',lon='-73.956872',id='120',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Bedford Av / L
['L10']={boro='Bk',struc='Subway',lat='40.714063',lon='-73.950275',id='121',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Lorimer St / L
['L11']={boro='Bk',struc='Subway',lat='40.714565',lon='-73.944053',id='122',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Graham Av / L
['L12']={boro='Bk',struc='Subway',lat='40.711926',lon='-73.94067',id='123',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Grand St / L
['L13']={boro='Bk',struc='Subway',lat='40.707739',lon='-73.93985',id='124',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Montrose Av / L
['L14']={boro='Bk',struc='Subway',lat='40.706152',lon='-73.933147',id='125',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Morgan Av / L
['L15']={boro='Bk',struc='Subway',lat='40.706607',lon='-73.922913',id='126',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Jefferson St / L
['L16']={boro='Bk',struc='Subway',lat='40.703811',lon='-73.918425',id='127',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --DeKalb Av / L
['L17']={boro='Bk',struc='Subway',lat='40.699814',lon='-73.911586',id='128',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Myrtle - Wyckoff Avs / L
['L19']={boro='Q',struc='Subway',lat='40.695602',lon='-73.904084',id='129',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Halsey St / L
['L20']={boro='Bk',struc='Subway',lat='40.688764',lon='-73.904046',id='130',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Wilson Av / L
['L21']={boro='Bk',struc='Subway',lat='40.682829',lon='-73.905249',id='131',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Bushwick Av - Aberdeen St / L
['L22']={boro='Bk',struc='Elevated',lat='40.678856',lon='-73.90324',id='132',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Broadway Jct / L
['L24']={boro='Bk',struc='Elevated',lat='40.675345',lon='-73.903097',id='133',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Atlantic Av / L
['L25']={boro='Bk',struc='Elevated',lat='40.669367',lon='-73.901975',id='134',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Sutter Av / L
['L26']={boro='Bk',struc='Elevated',lat='40.664038',lon='-73.900571',id='135',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --Livonia Av / L
['L27']={boro='Bk',struc='Elevated',lat='40.658733',lon='-73.899232',id='136',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --New Lots Av / L
['L28']={boro='Bk',struc='At Grade',lat='40.650573',lon='-73.899485',id='137',n='Manhattan',s='Canarsie - Rockaway Parkway'}, --E 105 St / L
['L29']={boro='Bk',struc='At Grade',lat='40.646654',lon='-73.90185',id='138',n='Manhattan',s=''}, --Canarsie - Rockaway Pkwy / L
['S01']={boro='Bk',struc='Elevated',lat='40.680596',lon='-73.955827',id='139',n='',s='Prospect Park'}, --Franklin Av / S
['S03']={boro='Bk',struc='Open Cut',lat='40.674772',lon='-73.957624',id='141',n='Franklin Av',s='Prospect Park'}, --Park Pl / S
['S04']={boro='Bk',struc='Open Cut',lat='40.670343',lon='-73.959245',id='142',n='Franklin Av',s='Prospect Park'}, --Botanic Garden / S
['A02']={boro='M',struc='Subway',lat='40.868072',lon='-73.919899',id='143',n='',s='Downtown & Brooklyn'}, --Inwood - 207 St / A
['A03']={boro='M',struc='Subway',lat='40.865491',lon='-73.927271',id='144',n='207 St',s='Downtown & Brooklyn'}, --Dyckman St / A
['A05']={boro='M',struc='Subway',lat='40.859022',lon='-73.93418',id='145',n='207 St',s='Downtown & Brooklyn'}, --190 St / A
['A06']={boro='M',struc='Subway',lat='40.851695',lon='-73.937969',id='146',n='207 St',s='Downtown & Brooklyn'}, --181 St / A
['A07']={boro='M',struc='Subway',lat='40.847391',lon='-73.939704',id='147',n='207 St',s='Downtown & Brooklyn'}, --175 St / A
['A09']={boro='M',struc='Subway',lat='40.840719',lon='-73.939561',id='148',n='207 St',s='Downtown & Brooklyn'}, --168 St / A C
['A10']={boro='M',struc='Subway',lat='40.836013',lon='-73.939892',id='149',n='Uptown',s='Downtown & Brooklyn'}, --163 St - Amsterdam Av / C
['A11']={boro='M',struc='Subway',lat='40.830518',lon='-73.941514',id='150',n='Uptown',s='Downtown & Brooklyn'}, --155 St / C
['A12']={boro='M',struc='Subway',lat='40.824783',lon='-73.944216',id='151',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --145 St / A C
['D13']={boro='M',struc='Subway',lat='40.824783',lon='-73.944216',id='151',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --145 St / B D
['A14']={boro='M',struc='Subway',lat='40.817894',lon='-73.947649',id='152',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --135 St / B C
['A15']={boro='M',struc='Subway',lat='40.811109',lon='-73.952343',id='153',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --125 St / A B C D
['A16']={boro='M',struc='Subway',lat='40.805085',lon='-73.954882',id='154',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --116 St / B C
['A17']={boro='M',struc='Subway',lat='40.800603',lon='-73.958161',id='155',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --Cathedral Pkwy (110 St) / B C
['A18']={boro='M',struc='Subway',lat='40.796092',lon='-73.961454',id='156',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --103 St / B C
['A19']={boro='M',struc='Subway',lat='40.791642',lon='-73.964696',id='157',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --96 St / B C
['A20']={boro='M',struc='Subway',lat='40.785868',lon='-73.968916',id='158',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --86 St / B C
['A21']={boro='M',struc='Subway',lat='40.781433',lon='-73.972143',id='159',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --81 St - Museum of Natural History / B C
['A22']={boro='M',struc='Subway',lat='40.775594',lon='-73.97641',id='160',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --72 St / B C
['A24']={boro='M',struc='Subway',lat='40.768296',lon='-73.981736',id='161',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --59 St - Columbus Circle / A B C D
['A25']={boro='M',struc='Subway',lat='40.762456',lon='-73.985984',id='162',n='Uptown - Queens',s='Downtown & Brooklyn'}, --50 St / C E
['A27']={boro='M',struc='Subway',lat='40.757308',lon='-73.989735',id='163',n='Uptown - Queens',s='Downtown & Brooklyn'}, --42 St - Port Authority Bus Terminal / A C E
['A28']={boro='M',struc='Subway',lat='40.752287',lon='-73.993391',id='164',n='Uptown - Queens',s='Downtown & Brooklyn'}, --34 St - Penn Station / A C E
['A30']={boro='M',struc='Subway',lat='40.745906',lon='-73.998041',id='165',n='Uptown - Queens',s='Downtown & Brooklyn'}, --23 St / C E
['A31']={boro='M',struc='Subway',lat='40.740893',lon='-74.00169',id='166',n='Uptown - Queens',s='Downtown & Brooklyn'}, --14 St / A C E
['A32']={boro='M',struc='Subway',lat='40.732338',lon='-74.000495',id='167',n='Uptown - Queens',s='Downtown & Brooklyn'}, --W 4 St / A C E
['D20']={boro='M',struc='Subway',lat='40.732338',lon='-74.000495',id='167',n='Uptown - Queens',s='Downtown & Brooklyn'}, --W 4 St / B D F M
['A33']={boro='M',struc='Subway',lat='40.726227',lon='-74.003739',id='168',n='Uptown - Queens',s='Downtown & Brooklyn'}, --Spring St / C E
['A34']={boro='M',struc='Subway',lat='40.720824',lon='-74.005229',id='169',n='Uptown - Queens',s='Downtown & Brooklyn'}, --Canal St / A C E
['A36']={boro='M',struc='Subway',lat='40.714111',lon='-74.008585',id='170',n='Uptown',s='Downtown & Brooklyn'}, --Chambers St / A C
['E01']={boro='M',struc='Subway',lat='40.712582',lon='-74.009781',id='171',n='Uptown & Queens',s=''}, --World Trade Center / E
['A38']={boro='M',struc='Subway',lat='40.710197',lon='-74.007691',id='172',n='Uptown',s='Brooklyn'}, --Fulton St / A C
['A40']={boro='Bk',struc='Subway',lat='40.699337',lon='-73.990531',id='173',n='Manhattan',s='Euclid - Lefferts - Rockaways'}, --High St / A C
['A41']={boro='Bk',struc='Subway',lat='40.692338',lon='-73.987342',id='174',n='Manhattan',s='Euclid - Lefferts - Rockaways - Coney Island'}, --Jay St - MetroTech / A C F
['A42']={boro='Bk',struc='Subway',lat='40.688484',lon='-73.985001',id='175',n='Manhattan - Church Av',s='Euclid Av & Queens - Court Sq'}, --Hoyt - Schermerhorn Sts / A C G
['A43']={boro='Bk',struc='Subway',lat='40.686113',lon='-73.973946',id='176',n='Manhattan',s='Euclid Av'}, --Lafayette Av / C
['A44']={boro='Bk',struc='Subway',lat='40.683263',lon='-73.965838',id='177',n='Manhattan',s='Euclid Av'}, --Clinton - Washington Avs / C
['A45']={boro='Bk',struc='Subway',lat='40.68138',lon='-73.956848',id='178',n='Manhattan',s='Euclid Av'}, --Franklin Av / C
['A46']={boro='Bk',struc='Subway',lat='40.680438',lon='-73.950426',id='179',n='Manhattan',s='Euclid - Lefferts - Rockaways'}, --Nostrand Av / A C
['A47']={boro='Bk',struc='Subway',lat='40.679921',lon='-73.940858',id='180',n='Manhattan',s='Euclid Av'}, --Kingston - Throop Avs / C
['A48']={boro='Bk',struc='Subway',lat='40.679364',lon='-73.930729',id='181',n='Manhattan',s='Euclid - Lefferts - Rockaways'}, --Utica Av / A C
['A49']={boro='Bk',struc='Subway',lat='40.678822',lon='-73.920786',id='182',n='Manhattan',s='Euclid Av'}, --Ralph Av / C
['A50']={boro='Bk',struc='Subway',lat='40.67834',lon='-73.911946',id='183',n='Manhattan',s='Euclid Av'}, --Rockaway Av / C
['A51']={boro='Bk',struc='Subway',lat='40.678334',lon='-73.905316',id='184',n='Manhattan',s='Euclid - Lefferts - Rockaways'}, --Broadway Jct / A C
['A52']={boro='Bk',struc='Subway',lat='40.674542',lon='-73.896548',id='185',n='Manhattan',s='Euclid Av'}, --Liberty Av / C
['A53']={boro='Bk',struc='Subway',lat='40.67271',lon='-73.890358',id='186',n='Manhattan',s='Euclid Av'}, --Van Siclen Av / C
['A54']={boro='Bk',struc='Subway',lat='40.67413',lon='-73.88075',id='187',n='Manhattan',s='Euclid Av'}, --Shepherd Av / C
['A55']={boro='Bk',struc='Subway',lat='40.675377',lon='-73.872106',id='188',n='Manhattan',s='Lefferts - Rockaways'}, --Euclid Av / A C
['A57']={boro='Bk',struc='Subway',lat='40.677044',lon='-73.86505',id='189',n='Manhattan',s='Lefferts - Rockaways'}, --Grant Av / A
['A59']={boro='Q',struc='Elevated',lat='40.679371',lon='-73.858992',id='190',n='Manhattan',s='Lefferts - Rockaways'}, --80 St / A
['A60']={boro='Q',struc='Elevated',lat='40.679843',lon='-73.85147',id='191',n='Manhattan',s='Lefferts - Rockaways'}, --88 St / A
['A61']={boro='Q',struc='Elevated',lat='40.680429',lon='-73.843853',id='192',n='Manhattan',s='Lefferts - Rockaways'}, --Rockaway Blvd / A
['A63']={boro='Q',struc='Elevated',lat='40.681711',lon='-73.837683',id='193',n='Manhattan',s='Lefferts Blvd'}, --104 St / A
['A64']={boro='Q',struc='Elevated',lat='40.684331',lon='-73.832163',id='194',n='Manhattan',s='Lefferts Blvd'}, --111 St / A
['A65']={boro='Q',struc='Elevated',lat='40.685951',lon='-73.825798',id='195',n='Manhattan',s=''}, --Ozone Park - Lefferts Blvd / A
['H01']={boro='Q',struc='At Grade',lat='40.672097',lon='-73.835919',id='196',n='Manhattan',s='Rockaways'}, --Aqueduct Racetrack / A
['H02']={boro='Q',struc='At Grade',lat='40.668234',lon='-73.834058',id='197',n='Manhattan',s='Rockaways'}, --Aqueduct - N Conduit Av / A
['H03']={boro='Q',struc='At Grade',lat='40.660476',lon='-73.830301',id='198',n='Manhattan',s='Rockaways'}, --Howard Beach - JFK Airport / A
['H04']={boro='Q',struc='At Grade',lat='40.608382',lon='-73.815925',id='199',n='Manhattan',s='Rockaways'}, --Broad Channel / A S
['H12']={boro='Q',struc='Viaduct',lat='40.588034',lon='-73.813641',id='200',n='Manhattan',s='Rockaway Park'}, --Beach 90 St / A S
['H13']={boro='Q',struc='Viaduct',lat='40.585307',lon='-73.820558',id='201',n='Manhattan',s='Rockaway Park'}, --Beach 98 St / A S
['H14']={boro='Q',struc='Viaduct',lat='40.583209',lon='-73.827559',id='202',n='Manhattan',s='Rockaway Park'}, --Beach 105 St / A S
['H15']={boro='Q',struc='At Grade',lat='40.580903',lon='-73.835592',id='203',n='Manhattan',s=''}, --Rockaway Park - Beach 116 St / A S
['H06']={boro='Q',struc='Viaduct',lat='40.590927',lon='-73.796924',id='204',n='Manhattan',s='Far Rockaway'}, --Beach 67 St / A
['H07']={boro='Q',struc='Viaduct',lat='40.592374',lon='-73.788522',id='205',n='Manhattan',s='Far Rockaway'}, --Beach 60 St / A
['H08']={boro='Q',struc='Viaduct',lat='40.592943',lon='-73.776013',id='206',n='Manhattan',s='Far Rockaway'}, --Beach 44 St / A
['H09']={boro='Q',struc='Viaduct',lat='40.595398',lon='-73.768175',id='207',n='Manhattan',s='Far Rockaway'}, --Beach 36 St / A
['H10']={boro='Q',struc='Viaduct',lat='40.600066',lon='-73.761353',id='208',n='Manhattan',s='Far Rockaway'}, --Beach 25 St / A
['H11']={boro='Q',struc='Viaduct',lat='40.603995',lon='-73.755405',id='209',n='Manhattan',s=''}, --Far Rockaway - Mott Av / A
['D01']={boro='Bx',struc='Subway',lat='40.874811',lon='-73.878855',id='210',n='',s='Manhattan'}, --Norwood - 205 St / D
['D03']={boro='Bx',struc='Subway',lat='40.873244',lon='-73.887138',id='211',n='Norwood - 205 St',s='Manhattan'}, --Bedford Park Blvd / B D
['D04']={boro='Bx',struc='Subway',lat='40.866978',lon='-73.893509',id='212',n='Bedford Pk Blvd & 205 St',s='Manhattan'}, --Kingsbridge Rd / B D
['D05']={boro='Bx',struc='Subway',lat='40.861296',lon='-73.897749',id='213',n='Bedford Pk Blvd & 205 St',s='Manhattan'}, --Fordham Rd / B D
['D06']={boro='Bx',struc='Subway',lat='40.856093',lon='-73.900741',id='214',n='Bedford Pk Blvd & 205 St',s='Manhattan'}, --182-183 Sts / B D
['D07']={boro='Bx',struc='Subway',lat='40.85041',lon='-73.905227',id='215',n='Bedford Pk Blvd & 205 St',s='Manhattan'}, --Tremont Av / B D
['D08']={boro='Bx',struc='Subway',lat='40.8459',lon='-73.910136',id='216',n='Bedford Pk Blvd & 205 St',s='Manhattan'}, --174-175 Sts / B D
['D09']={boro='Bx',struc='Subway',lat='40.839306',lon='-73.9134',id='217',n='Bedford Pk Blvd & 205 St',s='Manhattan'}, --170 St / B D
['D10']={boro='Bx',struc='Subway',lat='40.833771',lon='-73.91844',id='218',n='Bedford Pk Blvd & 205 St',s='Manhattan'}, --167 St / B D
['D11']={boro='Bx',struc='Subway',lat='40.827905',lon='-73.925651',id='219',n='Bedford Pk Blvd & 205 St',s='Manhattan'}, --161 St - Yankee Stadium / B D
['D12']={boro='M',struc='Subway',lat='40.830135',lon='-73.938209',id='220',n='The Bronx',s='Downtown & Brooklyn'}, --155 St / B D
['B04']={boro='Q',struc='Subway',lat='40.754203',lon='-73.942836',id='221',n='Jamaica',s='Manhattan'}, --21 St - Queensbridge / F
['B06']={boro='M',struc='Subway',lat='40.759145',lon='-73.95326',id='222',n='Queens',s='Manhattan'}, --Roosevelt Island / F
['B08']={boro='M',struc='Subway',lat='40.764629',lon='-73.966113',id='223',n='Uptown - Queens',s='Downtown & Brooklyn'}, --Lexington Av/63 St / F Q
['B10']={boro='M',struc='Subway',lat='40.763972',lon='-73.97745',id='224',n='Uptown & Queens',s='Downtown & Brooklyn'}, --57 St / F
['D15']={boro='M',struc='Subway',lat='40.758663',lon='-73.981329',id='225',n='Uptown & The Bronx - Queens',s='Downtown & Brooklyn'}, --47-50 Sts - Rockefeller Ctr / B D F M
['D16']={boro='M',struc='Subway',lat='40.754222',lon='-73.984569',id='226',n='Uptown & The Bronx - Queens',s='Downtown & Brooklyn'}, --42 St - Bryant Pk / B D F M
['D17']={boro='M',struc='Subway',lat='40.749719',lon='-73.987823',id='227',n='Uptown & The Bronx - Queens',s='Downtown & Brooklyn'}, --34 St - Herald Sq / B D F M
['D18']={boro='M',struc='Subway',lat='40.742878',lon='-73.992821',id='228',n='Uptown & Queens',s='Downtown & Brooklyn'}, --23 St / F M
['D19']={boro='M',struc='Subway',lat='40.738228',lon='-73.996209',id='229',n='Uptown & Queens',s='Downtown & Brooklyn'}, --14 St / F M
['D21']={boro='M',struc='Subway',lat='40.725297',lon='-73.996204',id='230',n='Uptown & The Bronx - Queens',s='Downtown & Brooklyn'}, --Broadway-Lafayette St / B D F M
['D22']={boro='M',struc='Subway',lat='40.718267',lon='-73.993753',id='231',n='Uptown & The Bronx',s='Brooklyn'}, --Grand St / B D
['F14']={boro='M',struc='Subway',lat='40.723402',lon='-73.989938',id='232',n='Uptown & Queens',s='Downtown & Brooklyn'}, --2 Av / F
['F15']={boro='M',struc='Subway',lat='40.718611',lon='-73.988114',id='233',n='Uptown & Queens',s='Downtown & Brooklyn'}, --Delancey St / F
['F16']={boro='M',struc='Subway',lat='40.713715',lon='-73.990173',id='234',n='Uptown & Queens',s='Brooklyn'}, --East Broadway / F
['F18']={boro='Bk',struc='Subway',lat='40.701397',lon='-73.986751',id='235',n='Manhattan',s='Coney Island'}, --York St / F
['F20']={boro='Bk',struc='Subway',lat='40.686145',lon='-73.990862',id='236',n='Manhattan - Queens',s='Church Av - Coney Island'}, --Bergen St / F G
['F21']={boro='Bk',struc='Subway',lat='40.680303',lon='-73.995048',id='237',n='Manhattan - Queens',s='Church Av - Coney Island'}, --Carroll St / F G
['F22']={boro='Bk',struc='Viaduct',lat='40.67358',lon='-73.995959',id='238',n='Manhattan - Queens',s='Church Av - Coney Island'}, --Smith - 9 Sts / F G
['F23']={boro='Bk',struc='Viaduct',lat='40.670272',lon='-73.989779',id='239',n='Manhattan - Queens',s='Church Av - Coney Island'}, --4 Av / F G
['F24']={boro='Bk',struc='Subway',lat='40.666271',lon='-73.980305',id='240',n='Manhattan - Queens',s='Church Av - Coney Island'}, --7 Av / F G
['F25']={boro='Bk',struc='Subway',lat='40.660365',lon='-73.979493',id='241',n='Manhattan - Queens',s='Church Av - Coney Island'}, --15 St - Prospect Park / F G
['F26']={boro='Bk',struc='Subway',lat='40.650782',lon='-73.975776',id='242',n='Manhattan - Queens',s='Church Av - Coney Island'}, --Fort Hamilton Pkwy / F G
['F27']={boro='Bk',struc='Subway',lat='40.644041',lon='-73.979678',id='243',n='Manhattan',s='Coney Island'}, --Church Av / F
['F29']={boro='Bk',struc='Elevated',lat='40.636119',lon='-73.978172',id='244',n='Manhattan',s='Coney Island'}, --Ditmas Av / F
['F30']={boro='Bk',struc='Elevated',lat='40.629755',lon='-73.976971',id='245',n='Manhattan',s='Coney Island'}, --18 Av / F
['F31']={boro='Bk',struc='Elevated',lat='40.625322',lon='-73.976127',id='246',n='Manhattan',s='Coney Island'}, --Avenue I / F
['F32']={boro='Bk',struc='Elevated',lat='40.620769',lon='-73.975264',id='247',n='Manhattan',s='Coney Island'}, --Bay Pkwy / F
['F33']={boro='Bk',struc='Elevated',lat='40.61514',lon='-73.974197',id='248',n='Manhattan',s='Coney Island'}, --Avenue N / F
['F34']={boro='Bk',struc='Elevated',lat='40.608944',lon='-73.973022',id='249',n='Manhattan',s='Coney Island'}, --Avenue P / F
['F35']={boro='Bk',struc='Elevated',lat='40.603217',lon='-73.972361',id='250',n='Manhattan',s='Coney Island'}, --Kings Hwy / F
['F36']={boro='Bk',struc='Elevated',lat='40.596063',lon='-73.973357',id='251',n='Manhattan',s='Coney Island'}, --Avenue U / F
['F38']={boro='Bk',struc='Elevated',lat='40.58962',lon='-73.97425',id='252',n='Manhattan',s='Coney Island'}, --Avenue X / F
['F39']={boro='Bk',struc='Elevated',lat='40.581011',lon='-73.974574',id='253',n='Manhattan',s='Stillwell Av'}, --Neptune Av / F
['F01']={boro='Q',struc='Subway',lat='40.712646',lon='-73.783817',id='254',n='',s='Manhattan'}, --Jamaica - 179 St / F
['F02']={boro='Q',struc='Subway',lat='40.71047',lon='-73.793604',id='255',n='179 St',s='Manhattan'}, --169 St / F
['F03']={boro='Q',struc='Subway',lat='40.707564',lon='-73.803326',id='256',n='179 St',s='Manhattan'}, --Parsons Blvd / F
['F04']={boro='Q',struc='Subway',lat='40.70546',lon='-73.810708',id='257',n='179 St',s='Manhattan'}, --Sutphin Blvd / F
['F05']={boro='Q',struc='Subway',lat='40.709179',lon='-73.820574',id='258',n='Jamaica',s='Manhattan'}, --Briarwood - Van Wyck Blvd / E F
['F06']={boro='Q',struc='Subway',lat='40.714441',lon='-73.831008',id='259',n='Jamaica',s='Manhattan'}, --Kew Gardens - Union Tpke / E F
['F07']={boro='Q',struc='Subway',lat='40.718331',lon='-73.837324',id='260',n='Jamaica',s='Manhattan'}, --75 Av / E F
['G08']={boro='Q',struc='Subway',lat='40.721691',lon='-73.844521',id='261',n='Jamaica',s='Manhattan'}, --Forest Hills - 71 Av / E F M R
['G09']={boro='Q',struc='Subway',lat='40.726523',lon='-73.852719',id='262',n='Forest Hills',s='Manhattan'}, --67 Av / M R
['G10']={boro='Q',struc='Subway',lat='40.729846',lon='-73.861604',id='263',n='Forest Hills',s='Manhattan'}, --63 Dr - Rego Park / M R
['G11']={boro='Q',struc='Subway',lat='40.733106',lon='-73.869229',id='264',n='Forest Hills',s='Manhattan'}, --Woodhaven Blvd / M R
['G12']={boro='Q',struc='Subway',lat='40.737015',lon='-73.877223',id='265',n='Forest Hills',s='Manhattan'}, --Grand Av - Newtown / M R
['G13']={boro='Q',struc='Subway',lat='40.742454',lon='-73.882017',id='266',n='Forest Hills',s='Manhattan'}, --Elmhurst Av / M R
['G14']={boro='Q',struc='Subway',lat='40.746644',lon='-73.891338',id='267',n='Forest Hills - Jamaica',s='Manhattan'}, --Jackson Hts - Roosevelt Av / E F M R
['G15']={boro='Q',struc='Subway',lat='40.749669',lon='-73.898453',id='268',n='Forest Hills',s='Manhattan'}, --65 St / M R
['G16']={boro='Q',struc='Subway',lat='40.752885',lon='-73.906006',id='269',n='Forest Hills',s='Manhattan'}, --Northern Blvd / M R
['G18']={boro='Q',struc='Subway',lat='40.756312',lon='-73.913333',id='270',n='Forest Hills',s='Manhattan'}, --46 St / M R
['G19']={boro='Q',struc='Subway',lat='40.756879',lon='-73.92074',id='271',n='Forest Hills',s='Manhattan'}, --Steinway St / M R
['G20']={boro='Q',struc='Subway',lat='40.752039',lon='-73.928781',id='272',n='Forest Hills',s='Manhattan'}, --36 St / M R
['G21']={boro='Q',struc='Subway',lat='40.748973',lon='-73.937243',id='273',n='Forest Hills - Jamaica',s='Manhattan'}, --Queens Plaza / E M R
['F09']={boro='Q',struc='Subway',lat='40.747846',lon='-73.946',id='274',n='Forest Hills - Jamaica',s='Manhattan'}, --Court Sq / E M
['F11']={boro='M',struc='Subway',lat='40.757552',lon='-73.969055',id='275',n='Queens',s='Downtown & Brooklyn'}, --Lexington Av/53 St / E M
['F12']={boro='M',struc='Subway',lat='40.760167',lon='-73.975224',id='276',n='Queens',s='Downtown & Brooklyn'}, --5 Av/53 St / E M
['D14']={boro='M',struc='Subway',lat='40.762862',lon='-73.981637',id='277',n='Uptown & The Bronx - Queens',s='Downtown & Brooklyn'}, --7 Av / B D E
['G05']={boro='Q',struc='Subway',lat='40.702147',lon='-73.801109',id='278',n='',s='Manhattan'}, --Jamaica Center - Parsons/Archer / E J Z
['G06']={boro='Q',struc='Subway',lat='40.700486',lon='-73.807969',id='279',n='Jamaica Center',s='Manhattan'}, --Sutphin Blvd - Archer Av - JFK Airport / E J Z
['G07']={boro='Q',struc='Subway',lat='40.702566',lon='-73.816859',id='280',n='Jamaica Center',s='Manhattan'}, --Jamaica - Van Wyck / E
['G22']={boro='Q',struc='Subway',lat='40.746554',lon='-73.943832',id='281',n='',s='Brooklyn'}, --Court Sq / G
['G24']={boro='Q',struc='Subway',lat='40.744065',lon='-73.949724',id='282',n='Court Sq',s='Brooklyn'}, --21 St / G
['G26']={boro='Bk',struc='Subway',lat='40.731352',lon='-73.954449',id='283',n='Queens',s='Church Av'}, --Greenpoint Av / G
['G28']={boro='Bk',struc='Subway',lat='40.724635',lon='-73.951277',id='284',n='Queens',s='Church Av'}, --Nassau Av / G
['G29']={boro='Bk',struc='Subway',lat='40.712792',lon='-73.951418',id='285',n='Queens',s='Church Av'}, --Metropolitan Av / G
['G30']={boro='Bk',struc='Subway',lat='40.706092',lon='-73.950308',id='286',n='Queens',s='Church Av'}, --Broadway / G
['G31']={boro='Bk',struc='Subway',lat='40.700377',lon='-73.950234',id='287',n='Queens',s='Church Av'}, --Flushing Av / G
['G32']={boro='Bk',struc='Subway',lat='40.694568',lon='-73.949046',id='288',n='Queens',s='Church Av'}, --Myrtle - Willoughby Avs / G
['G33']={boro='Bk',struc='Subway',lat='40.689627',lon='-73.953522',id='289',n='Queens',s='Church Av'}, --Bedford - Nostrand Avs / G
['G34']={boro='Bk',struc='Subway',lat='40.688873',lon='-73.96007',id='290',n='Queens',s='Church Av'}, --Classon Av / G
['G35']={boro='Bk',struc='Subway',lat='40.688089',lon='-73.966839',id='291',n='Queens',s='Church Av'}, --Clinton - Washington Avs / G
['G36']={boro='Bk',struc='Subway',lat='40.687119',lon='-73.975375',id='292',n='Queens',s='Church Av'}, --Fulton St / G
['101']={boro='Bx',struc='Elevated',lat='40.889248',lon='-73.898583',id='293',n='',s='Manhattan'}, --Van Cortlandt Park - 242 St / 1
['103']={boro='Bx',struc='Elevated',lat='40.884667',lon='-73.90087',id='294',n='242 St',s='Manhattan'}, --238 St / 1
['104']={boro='Bx',struc='Elevated',lat='40.878856',lon='-73.904834',id='295',n='242 St',s='Manhattan'}, --231 St / 1
['106']={boro='M',struc='Elevated',lat='40.874561',lon='-73.909831',id='296',n='242 St',s='Downtown'}, --Marble Hill - 225 St / 1
['107']={boro='M',struc='Elevated',lat='40.869444',lon='-73.915279',id='297',n='The Bronx',s='Downtown'}, --215 St / 1
['108']={boro='M',struc='Elevated',lat='40.864621',lon='-73.918822',id='298',n='Uptown & The Bronx',s='Downtown'}, --207 St / 1
['109']={boro='M',struc='Elevated',lat='40.860531',lon='-73.925536',id='299',n='Uptown & The Bronx',s='Downtown'}, --Dyckman St / 1
['110']={boro='M',struc='Subway',lat='40.855225',lon='-73.929412',id='300',n='Uptown & The Bronx',s='Downtown'}, --191 St / 1
['111']={boro='M',struc='Subway',lat='40.849505',lon='-73.933596',id='301',n='Uptown & The Bronx',s='Downtown'}, --181 St / 1
['112']={boro='M',struc='Subway',lat='40.840556',lon='-73.940133',id='302',n='Uptown & The Bronx',s='Downtown'}, --168 St - Washington Hts / 1
['113']={boro='M',struc='Subway',lat='40.834041',lon='-73.94489',id='303',n='Uptown & The Bronx',s='Downtown'}, --157 St / 1
['114']={boro='M',struc='Subway',lat='40.826551',lon='-73.95036',id='304',n='Uptown & The Bronx',s='Downtown'}, --145 St / 1
['115']={boro='M',struc='Subway',lat='40.822008',lon='-73.953676',id='305',n='Uptown & The Bronx',s='Downtown'}, --137 St - City College / 1
['116']={boro='M',struc='Elevated',lat='40.815581',lon='-73.958372',id='306',n='Uptown & The Bronx',s='Downtown'}, --125 St / 1
['117']={boro='M',struc='Subway',lat='40.807722',lon='-73.96411',id='307',n='Uptown & The Bronx',s='Downtown'}, --116 St - Columbia University / 1
['118']={boro='M',struc='Subway',lat='40.803967',lon='-73.966847',id='308',n='Uptown & The Bronx',s='Downtown'}, --Cathedral Pkwy / 1
['119']={boro='M',struc='Subway',lat='40.799446',lon='-73.968379',id='309',n='Uptown & The Bronx',s='Downtown'}, --103 St / 1
['120']={boro='M',struc='Subway',lat='40.793919',lon='-73.972323',id='310',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --96 St / 1 2 3
['121']={boro='M',struc='Subway',lat='40.788644',lon='-73.976218',id='311',n='Uptown & The Bronx',s='Downtown'}, --86 St / 1
['122']={boro='M',struc='Subway',lat='40.783934',lon='-73.979917',id='312',n='Uptown & The Bronx',s='Downtown'}, --79 St / 1
['123']={boro='M',struc='Subway',lat='40.778453',lon='-73.98197',id='313',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --72 St / 1 2 3
['124']={boro='M',struc='Subway',lat='40.77344',lon='-73.982209',id='314',n='Uptown & The Bronx',s='Downtown'}, --66 St - Lincoln Center / 1
['125']={boro='M',struc='Subway',lat='40.768247',lon='-73.981929',id='315',n='Uptown & The Bronx',s='Downtown'}, --59 St - Columbus Circle / 1
['126']={boro='M',struc='Subway',lat='40.761728',lon='-73.983849',id='316',n='Uptown & The Bronx',s='Downtown'}, --50 St / 1
['127']={boro='M',struc='Subway',lat='40.75529',lon='-73.987495',id='317',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --Times Sq - 42 St / 1 2 3
['128']={boro='M',struc='Subway',lat='40.750373',lon='-73.991057',id='318',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --34 St - Penn Station / 1 2 3
['129']={boro='M',struc='Subway',lat='40.747215',lon='-73.993365',id='319',n='Uptown & The Bronx',s='Downtown'}, --28 St / 1
['130']={boro='M',struc='Subway',lat='40.744081',lon='-73.995657',id='320',n='Uptown & The Bronx',s='Downtown'}, --23 St / 1
['131']={boro='M',struc='Subway',lat='40.74104',lon='-73.997871',id='321',n='Uptown & The Bronx',s='Downtown'}, --18 St / 1
['132']={boro='M',struc='Subway',lat='40.737826',lon='-74.000201',id='322',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --14 St / 1 2 3
['133']={boro='M',struc='Subway',lat='40.733422',lon='-74.002906',id='323',n='Uptown & The Bronx',s='Downtown'}, --Christopher St - Sheridan Sq / 1
['134']={boro='M',struc='Subway',lat='40.728251',lon='-74.005367',id='324',n='Uptown & The Bronx',s='Downtown'}, --Houston St / 1
['135']={boro='M',struc='Subway',lat='40.722854',lon='-74.006277',id='325',n='Uptown & The Bronx',s='Downtown'}, --Canal St / 1
['136']={boro='M',struc='Subway',lat='40.719318',lon='-74.006886',id='326',n='Uptown & The Bronx',s='Downtown'}, --Franklin St / 1
['137']={boro='M',struc='Subway',lat='40.715478',lon='-74.009266',id='327',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --Chambers St / 1 2 3
['138']={boro='M',struc='Subway',lat='40.711835',lon='-74.012188',id='328',n='Uptown & The Bronx',s='Downtown'}, --WTC Cortlandt / 1
['139']={boro='M',struc='Subway',lat='40.707513',lon='-74.013783',id='329',n='Uptown & The Bronx',s='Downtown'}, --Rector St / 1
['142']={boro='M',struc='Subway',lat='40.702068',lon='-74.013664',id='330',n='Uptown & The Bronx',s=''}, --South Ferry / 1
['228']={boro='M',struc='Subway',lat='40.713051',lon='-74.008811',id='331',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --Park Pl / 2 3
['229']={boro='M',struc='Subway',lat='40.709416',lon='-74.006571',id='332',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --Fulton St / 2 3
['230']={boro='M',struc='Subway',lat='40.706821',lon='-74.0091',id='333',n='Uptown & The Bronx',s='Brooklyn'}, --Wall St / 2 3
['231']={boro='Bk',struc='Subway',lat='40.697466',lon='-73.993086',id='334',n='Manhattan',s='Flatbush - New Lots'}, --Clark St / 2 3
['232']={boro='Bk',struc='Subway',lat='40.693219',lon='-73.989998',id='335',n='Manhattan',s='Flatbush - New Lots'}, --Borough Hall / 2 3
['233']={boro='Bk',struc='Subway',lat='40.690545',lon='-73.985065',id='336',n='Manhattan',s='Flatbush - New Lots'}, --Hoyt St / 2 3
['234']={boro='Bk',struc='Subway',lat='40.688246',lon='-73.980492',id='337',n='Manhattan',s='Flatbush - Utica - New Lots'}, --Nevins St / 2 3 4 5
['235']={boro='Bk',struc='Subway',lat='40.684359',lon='-73.977666',id='338',n='Manhattan',s='Flatbush - New Lots'}, --Atlantic Av - Barclays Ctr / 2 3 4 5
['236']={boro='Bk',struc='Subway',lat='40.680829',lon='-73.975098',id='339',n='Manhattan',s='Flatbush - New Lots'}, --Bergen St / 2 3
['237']={boro='Bk',struc='Subway',lat='40.675235',lon='-73.971046',id='340',n='Manhattan',s='Flatbush - New Lots'}, --Grand Army Plaza / 2 3
['238']={boro='Bk',struc='Subway',lat='40.671987',lon='-73.964375',id='341',n='Manhattan',s='Flatbush - New Lots'}, --Eastern Pkwy - Brooklyn Museum / 2 3
['239']={boro='Bk',struc='Subway',lat='40.670682',lon='-73.958131',id='342',n='Manhattan',s='Flatbush - Utica - New Lots'}, --Franklin Av / 2 3 4 5
['248']={boro='Bk',struc='Subway',lat='40.669847',lon='-73.950466',id='343',n='Manhattan',s='New Lots'}, --Nostrand Av / 3
['249']={boro='Bk',struc='Subway',lat='40.669399',lon='-73.942161',id='344',n='Manhattan',s='New Lots'}, --Kingston Av / 3
['250']={boro='Bk',struc='Subway',lat='40.668897',lon='-73.932942',id='345',n='Manhattan',s='New Lots'}, --Crown Hts - Utica Av / 3 4
['251']={boro='Bk',struc='Elevated',lat='40.664717',lon='-73.92261',id='346',n='Manhattan',s='New Lots'}, --Sutter Av - Rutland Rd / 3
['252']={boro='Bk',struc='Elevated',lat='40.661453',lon='-73.916327',id='347',n='Manhattan',s='New Lots'}, --Saratoga Av / 3
['253']={boro='Bk',struc='Elevated',lat='40.662549',lon='-73.908946',id='348',n='Manhattan',s='New Lots'}, --Rockaway Av / 3
['254']={boro='Bk',struc='Elevated',lat='40.663515',lon='-73.902447',id='349',n='Manhattan',s='New Lots'}, --Junius St / 3
['255']={boro='Bk',struc='Elevated',lat='40.664635',lon='-73.894895',id='350',n='Manhattan',s='New Lots'}, --Pennsylvania Av / 3
['256']={boro='Bk',struc='Elevated',lat='40.665449',lon='-73.889395',id='351',n='Manhattan',s='New Lots'}, --Van Siclen Av / 3
['257']={boro='Bk',struc='Elevated',lat='40.666235',lon='-73.884079',id='352',n='Manhattan',s=''}, --New Lots Av / 3
['241']={boro='Bk',struc='Subway',lat='40.667883',lon='-73.950683',id='353',n='Manhattan',s='Flatbush'}, --President St / 2 5
['242']={boro='Bk',struc='Subway',lat='40.662742',lon='-73.95085',id='354',n='Manhattan',s='Flatbush'}, --Sterling St / 2 5
['243']={boro='Bk',struc='Subway',lat='40.656652',lon='-73.9502',id='355',n='Manhattan',s='Flatbush'}, --Winthrop St / 2 5
['244']={boro='Bk',struc='Subway',lat='40.650843',lon='-73.949575',id='356',n='Manhattan',s='Flatbush'}, --Church Av / 2 5
['245']={boro='Bk',struc='Subway',lat='40.645098',lon='-73.948959',id='357',n='Manhattan',s='Flatbush'}, --Beverly Rd / 2 5
['246']={boro='Bk',struc='Subway',lat='40.639967',lon='-73.948411',id='358',n='Manhattan',s='Flatbush'}, --Newkirk Av / 2 5
['247']={boro='Bk',struc='Subway',lat='40.632836',lon='-73.947642',id='359',n='Manhattan',s=''}, --Flatbush Av - Brooklyn College / 2 5
['601']={boro='Bx',struc='Elevated',lat='40.852462',lon='-73.828121',id='360',n='',s='Manhattan'}, --Pelham Bay Park / 6
['602']={boro='Bx',struc='Elevated',lat='40.84681',lon='-73.832569',id='361',n='Pelham Bay Park',s='Manhattan'}, --Buhre Av / 6
['603']={boro='Bx',struc='Elevated',lat='40.843863',lon='-73.836322',id='362',n='Pelham Bay Park',s='Manhattan'}, --Middletown Rd / 6
['604']={boro='Bx',struc='Elevated',lat='40.839892',lon='-73.842952',id='363',n='Pelham Bay Park',s='Manhattan'}, --Westchester Sq - E Tremont Av / 6
['606']={boro='Bx',struc='Elevated',lat='40.836488',lon='-73.847036',id='364',n='Pelham Bay Park',s='Manhattan'}, --Zerega Av / 6
['607']={boro='Bx',struc='Elevated',lat='40.834255',lon='-73.851222',id='365',n='Pelham Bay Park',s='Manhattan'}, --Castle Hill Av / 6
['608']={boro='Bx',struc='Elevated',lat='40.833226',lon='-73.860816',id='366',n='Pelham Bay Park',s='Manhattan'}, --Parkchester / 6
['609']={boro='Bx',struc='Elevated',lat='40.831509',lon='-73.867618',id='367',n='Pelham Bay Park',s='Manhattan'}, --St Lawrence Av / 6
['610']={boro='Bx',struc='Elevated',lat='40.829521',lon='-73.874516',id='368',n='Pelham Bay Park',s='Manhattan'}, --Morrison Av- Sound View / 6
['611']={boro='Bx',struc='Elevated',lat='40.828584',lon='-73.879159',id='369',n='Pelham Bay Park',s='Manhattan'}, --Elder Av / 6
['612']={boro='Bx',struc='Elevated',lat='40.826525',lon='-73.886283',id='370',n='Pelham Bay Park',s='Manhattan'}, --Whitlock Av / 6
['613']={boro='Bx',struc='Subway',lat='40.820948',lon='-73.890549',id='371',n='Pelham Bay Park',s='Manhattan'}, --Hunts Point Av / 6
['614']={boro='Bx',struc='Subway',lat='40.816104',lon='-73.896435',id='372',n='Pelham Bay Park',s='Manhattan'}, --Longwood Av / 6
['615']={boro='Bx',struc='Subway',lat='40.812118',lon='-73.904098',id='373',n='Pelham Bay Park',s='Manhattan'}, --E 149 St / 6
['616']={boro='Bx',struc='Subway',lat='40.808719',lon='-73.907657',id='374',n='Pelham Bay Park',s='Manhattan'}, --E 143 St - St Mary's St / 6
['617']={boro='Bx',struc='Subway',lat='40.805368',lon='-73.914042',id='375',n='Pelham Bay Park',s='Manhattan'}, --Cypress Av / 6
['618']={boro='Bx',struc='Subway',lat='40.807566',lon='-73.91924',id='376',n='Pelham Bay Park',s='Manhattan'}, --Brook Av / 6
['619']={boro='Bx',struc='Subway',lat='40.810476',lon='-73.926138',id='377',n='Pelham Bay Park',s='Manhattan'}, --3 Av - 138 St / 6
['401']={boro='Bx',struc='Elevated',lat='40.886037',lon='-73.878751',id='378',n='',s='Manhattan'}, --Woodlawn / 4
['402']={boro='Bx',struc='Elevated',lat='40.87975',lon='-73.884655',id='379',n='Woodlawn',s='Manhattan'}, --Mosholu Pkwy / 4
['405']={boro='Bx',struc='Elevated',lat='40.873412',lon='-73.890064',id='380',n='Woodlawn',s='Manhattan'}, --Bedford Park Blvd - Lehman College / 4
['406']={boro='Bx',struc='Elevated',lat='40.86776',lon='-73.897174',id='381',n='Woodlawn',s='Manhattan'}, --Kingsbridge Rd / 4
['407']={boro='Bx',struc='Elevated',lat='40.862803',lon='-73.901034',id='382',n='Woodlawn',s='Manhattan'}, --Fordham Rd / 4
['408']={boro='Bx',struc='Elevated',lat='40.858407',lon='-73.903879',id='383',n='Woodlawn',s='Manhattan'}, --183 St / 4
['409']={boro='Bx',struc='Elevated',lat='40.853453',lon='-73.907684',id='384',n='Woodlawn',s='Manhattan'}, --Burnside Av / 4
['410']={boro='Bx',struc='Elevated',lat='40.84848',lon='-73.911794',id='385',n='Woodlawn',s='Manhattan'}, --176 St / 4
['411']={boro='Bx',struc='Elevated',lat='40.844434',lon='-73.914685',id='386',n='Woodlawn',s='Manhattan'}, --Mt Eden Av / 4
['412']={boro='Bx',struc='Elevated',lat='40.840075',lon='-73.917791',id='387',n='Woodlawn',s='Manhattan'}, --170 St / 4
['413']={boro='Bx',struc='Elevated',lat='40.835537',lon='-73.9214',id='388',n='Woodlawn',s='Manhattan'}, --167 St / 4
['414']={boro='Bx',struc='Elevated',lat='40.827994',lon='-73.925831',id='389',n='Woodlawn',s='Manhattan'}, --161 St - Yankee Stadium / 4
['415']={boro='Bx',struc='Subway',lat='40.818375',lon='-73.927351',id='390',n='Woodlawn',s='Manhattan'}, --149 St - Grand Concourse / 4
['416']={boro='Bx',struc='Subway',lat='40.813224',lon='-73.929849',id='391',n='Woodlawn - Eastchester Dyre Av',s='Manhattan'}, --138 St - Grand Concourse / 4 5
['621']={boro='M',struc='Subway',lat='40.804138',lon='-73.937594',id='392',n='The Bronx',s='Downtown & Brooklyn'}, --125 St / 4 5 6
['622']={boro='M',struc='Subway',lat='40.798629',lon='-73.941617',id='393',n='Uptown & The Bronx',s='Downtown'}, --116 St / 6
['623']={boro='M',struc='Subway',lat='40.79502',lon='-73.94425',id='394',n='Uptown & The Bronx',s='Downtown'}, --110 St / 6
['624']={boro='M',struc='Subway',lat='40.7906',lon='-73.947478',id='395',n='Uptown & The Bronx',s='Downtown'}, --103 St / 6
['625']={boro='M',struc='Subway',lat='40.785672',lon='-73.95107',id='396',n='Uptown & The Bronx',s='Downtown'}, --96 St / 6
['626']={boro='M',struc='Subway',lat='40.779492',lon='-73.955589',id='397',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --86 St / 4 5 6
['627']={boro='M',struc='Subway',lat='40.77362',lon='-73.959874',id='398',n='Uptown & The Bronx',s='Downtown'}, --77 St / 6
['628']={boro='M',struc='Subway',lat='40.768141',lon='-73.96387',id='399',n='Uptown & The Bronx',s='Downtown'}, --68 St - Hunter College / 6
['629']={boro='M',struc='Subway',lat='40.762526',lon='-73.967967',id='400',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --59 St / 4 5 6
['630']={boro='M',struc='Subway',lat='40.757107',lon='-73.97192',id='401',n='Uptown & The Bronx',s='Downtown'}, --51 St / 6
['631']={boro='M',struc='Subway',lat='40.751776',lon='-73.976848',id='402',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --Grand Central - 42 St / 4 5 6
['632']={boro='M',struc='Subway',lat='40.746081',lon='-73.982076',id='403',n='Uptown & The Bronx',s='Downtown'}, --33 St / 6
['633']={boro='M',struc='Subway',lat='40.74307',lon='-73.984264',id='404',n='Uptown & The Bronx',s='Downtown'}, --28 St / 6
['634']={boro='M',struc='Subway',lat='40.739864',lon='-73.986599',id='405',n='Uptown & The Bronx',s='Downtown'}, --23 St / 6
['635']={boro='M',struc='Subway',lat='40.734673',lon='-73.989951',id='406',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --14 St - Union Sq / 4 5 6
['636']={boro='M',struc='Subway',lat='40.730054',lon='-73.99107',id='407',n='Uptown & The Bronx',s='Downtown'}, --Astor Pl / 6
['637']={boro='M',struc='Subway',lat='40.725915',lon='-73.994659',id='408',n='Uptown & The Bronx',s='Downtown'}, --Bleecker St / 6
['638']={boro='M',struc='Subway',lat='40.722301',lon='-73.997141',id='409',n='Uptown & The Bronx',s='Downtown'}, --Spring St / 6
['639']={boro='M',struc='Subway',lat='40.718803',lon='-74.000193',id='410',n='Uptown & The Bronx',s='Downtown'}, --Canal St / 6
['640']={boro='M',struc='Subway',lat='40.713065',lon='-74.004131',id='411',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --Brooklyn Bridge - City Hall / 4 5 6
['418']={boro='M',struc='Subway',lat='40.710368',lon='-74.009509',id='412',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --Fulton St / 4 5
['419']={boro='M',struc='Subway',lat='40.707557',lon='-74.011862',id='413',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --Wall St / 4 5
['420']={boro='M',struc='Subway',lat='40.704817',lon='-74.014065',id='414',n='Uptown & The Bronx',s='Brooklyn'}, --Bowling Green / 4 5
['423']={boro='Bk',struc='Subway',lat='40.692404',lon='-73.990151',id='415',n='Manhattan',s='Flatbush - Utica'}, --Borough Hall / 4 5
['201']={boro='Bx',struc='Elevated',lat='40.903125',lon='-73.85062',id='416',n='',s='Manhattan'}, --Wakefield - 241 St / 2
['204']={boro='Bx',struc='Elevated',lat='40.898379',lon='-73.854376',id='417',n='Wakefield - 241 St',s='Manhattan'}, --Nereid Av / 2 5
['205']={boro='Bx',struc='Elevated',lat='40.893193',lon='-73.857473',id='418',n='Wakefield - 241 St',s='Manhattan'}, --233 St / 2 5
['206']={boro='Bx',struc='Elevated',lat='40.888022',lon='-73.860341',id='419',n='Wakefield - 241 St',s='Manhattan'}, --225 St / 2 5
['207']={boro='Bx',struc='Elevated',lat='40.883895',lon='-73.862633',id='420',n='Wakefield - 241 St',s='Manhattan'}, --219 St / 2 5
['208']={boro='Bx',struc='Elevated',lat='40.87785',lon='-73.866256',id='421',n='Wakefield - 241 St',s='Manhattan'}, --Gun Hill Rd / 2 5
['209']={boro='Bx',struc='Elevated',lat='40.871356',lon='-73.867164',id='422',n='Wakefield - 241 St',s='Manhattan'}, --Burke Av / 2 5
['210']={boro='Bx',struc='Elevated',lat='40.865462',lon='-73.867352',id='423',n='Wakefield - 241 St',s='Manhattan'}, --Allerton Av / 2 5
['211']={boro='Bx',struc='Elevated',lat='40.857192',lon='-73.867615',id='424',n='Wakefield - 241 St',s='Manhattan'}, --Pelham Pkwy / 2 5
['212']={boro='Bx',struc='Elevated',lat='40.848828',lon='-73.868457',id='425',n='Wakefield - 241 St',s='Manhattan'}, --Bronx Park East / 2 5
['213']={boro='Bx',struc='Elevated',lat='40.841894',lon='-73.873488',id='426',n='Wakefield - Eastchester',s='Manhattan'}, --E 180 St / 2 5
['214']={boro='Bx',struc='Elevated',lat='40.840295',lon='-73.880049',id='427',n='Wakefield - Eastchester',s='Manhattan'}, --West Farms Sq - E Tremont Av / 2 5
['215']={boro='Bx',struc='Elevated',lat='40.837288',lon='-73.887734',id='428',n='Wakefield - Eastchester',s='Manhattan'}, --174 St / 2 5
['216']={boro='Bx',struc='Elevated',lat='40.829993',lon='-73.891865',id='429',n='Wakefield - Eastchester',s='Manhattan'}, --Freeman St / 2 5
['217']={boro='Bx',struc='Elevated',lat='40.824073',lon='-73.893064',id='430',n='Wakefield - Eastchester',s='Manhattan'}, --Simpson St / 2 5
['218']={boro='Bx',struc='Elevated',lat='40.822181',lon='-73.896736',id='431',n='Wakefield - Eastchester',s='Manhattan'}, --Intervale Av / 2 5
['219']={boro='Bx',struc='Elevated',lat='40.819585',lon='-73.90177',id='432',n='Wakefield - Eastchester',s='Manhattan'}, --Prospect Av / 2 5
['220']={boro='Bx',struc='Elevated',lat='40.81649',lon='-73.907807',id='433',n='Wakefield - Eastchester',s='Manhattan'}, --Jackson Av / 2 5
['221']={boro='Bx',struc='Subway',lat='40.816109',lon='-73.917757',id='434',n='Wakefield - Eastchester',s='Manhattan'}, --3 Av - 149 St / 2 5
['222']={boro='Bx',struc='Subway',lat='40.81841',lon='-73.926718',id='435',n='Wakefield - Eastchester',s='Manhattan'}, --149 St - Grand Concourse / 2 5
['301']={boro='M',struc='Subway',lat='40.82388',lon='-73.93647',id='436',n='',s='Downtown & Brooklyn'}, --Harlem - 148 St / 3
['302']={boro='M',struc='Subway',lat='40.820421',lon='-73.936245',id='437',n='148 St',s='Downtown & Brooklyn'}, --145 St / 3
['224']={boro='M',struc='Subway',lat='40.814229',lon='-73.94077',id='438',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --135 St / 2 3
['225']={boro='M',struc='Subway',lat='40.807754',lon='-73.945495',id='439',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --125 St / 2 3
['226']={boro='M',struc='Subway',lat='40.802098',lon='-73.949625',id='440',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --116 St / 2 3
['227']={boro='M',struc='Subway',lat='40.799075',lon='-73.951822',id='441',n='Uptown & The Bronx',s='Downtown & Brooklyn'}, --Central Park North (110 St) / 2 3
['501']={boro='Bx',struc='At Grade',lat='40.8883',lon='-73.830834',id='442',n='',s='Manhattan'}, --Eastchester - Dyre Av / 5
['502']={boro='Bx',struc='Open Cut',lat='40.878663',lon='-73.838591',id='443',n='Eastchester - Dyre Av',s='Manhattan'}, --Baychester Av / 5
['503']={boro='Bx',struc='Open Cut',lat='40.869526',lon='-73.846384',id='444',n='Eastchester - Dyre Av',s='Manhattan'}, --Gun Hill Rd / 5
['504']={boro='Bx',struc='Open Cut',lat='40.858985',lon='-73.855359',id='445',n='Eastchester - Dyre Av',s='Manhattan'}, --Pelham Pkwy / 5
['505']={boro='Bx',struc='Open Cut',lat='40.854364',lon='-73.860495',id='446',n='Eastchester - Dyre Av',s='Manhattan'}, --Morris Park / 5
['701']={boro='Q',struc='Subway',lat='40.7596',lon='-73.83003',id='447',n='',s='Manhattan'}, --Flushing - Main St / 7
['702']={boro='Q',struc='Elevated',lat='40.754622',lon='-73.845625',id='448',n='Flushing',s='Manhattan'}, --Mets - Willets Point / 7
['705']={boro='Q',struc='Elevated',lat='40.75173',lon='-73.855334',id='449',n='Flushing',s='Manhattan'}, --111 St / 7
['706']={boro='Q',struc='Elevated',lat='40.749865',lon='-73.8627',id='450',n='Flushing',s='Manhattan'}, --103 St - Corona Plaza / 7
['707']={boro='Q',struc='Elevated',lat='40.749145',lon='-73.869527',id='451',n='Flushing',s='Manhattan'}, --Junction Blvd / 7
['708']={boro='Q',struc='Elevated',lat='40.748408',lon='-73.876613',id='452',n='Flushing',s='Manhattan'}, --90 St - Elmhurst Av / 7
['709']={boro='Q',struc='Elevated',lat='40.747659',lon='-73.883697',id='453',n='Flushing',s='Manhattan'}, --82 St - Jackson Hts / 7
['710']={boro='Q',struc='Elevated',lat='40.746848',lon='-73.891394',id='454',n='Flushing',s='Manhattan'}, --74 St - Broadway / 7
['711']={boro='Q',struc='Elevated',lat='40.746325',lon='-73.896403',id='455',n='Flushing',s='Manhattan'}, --69 St / 7
['712']={boro='Q',struc='Elevated',lat='40.74563',lon='-73.902984',id='456',n='Flushing',s='Manhattan'}, --Woodside - 61 St / 7
['713']={boro='Q',struc='Elevated',lat='40.744149',lon='-73.912549',id='457',n='Flushing',s='Manhattan'}, --52 St / 7
['714']={boro='Q',struc='Elevated',lat='40.743132',lon='-73.918435',id='458',n='Flushing',s='Manhattan'}, --46 St / 7
['715']={boro='Q',struc='Elevated',lat='40.743781',lon='-73.924016',id='459',n='Flushing',s='Manhattan'}, --40 St / 7
['716']={boro='Q',struc='Elevated',lat='40.744587',lon='-73.930997',id='460',n='Flushing',s='Manhattan'}, --33 St / 7
['718']={boro='Q',struc='Elevated',lat='40.750582',lon='-73.940202',id='461',n='Astoria - Flushing',s='Manhattan'}, --Queensboro Plaza / 7
['R09']={boro='Q',struc='Elevated',lat='40.750582',lon='-73.940202',id='461',n='Astoria - Flushing',s='Manhattan'}, --Queensboro Plaza / N W
['719']={boro='Q',struc='Elevated',lat='40.747023',lon='-73.945264',id='462',n='Flushing',s='Manhattan'}, --Court Sq / 7
['720']={boro='Q',struc='Subway',lat='40.742216',lon='-73.948916',id='463',n='Flushing',s='Manhattan'}, --Hunters Point Av / 7
['721']={boro='Q',struc='Subway',lat='40.742626',lon='-73.953581',id='464',n='Flushing',s='Manhattan'}, --Vernon Blvd - Jackson Av / 7
['723']={boro='M',struc='Subway',lat='40.751431',lon='-73.976041',id='465',n='Queens',s='34 St - Hudson Yards'}, --Grand Central - 42 St / 7
['724']={boro='M',struc='Subway',lat='40.753821',lon='-73.981963',id='466',n='Queens',s='34 St - Hudson Yards'}, --5 Av / 7
['725']={boro='M',struc='Subway',lat='40.755477',lon='-73.987691',id='467',n='Queens',s='34 St - Hudson Yards'}, --Times Sq - 42 St / 7
['902']={boro='M',struc='Subway',lat='40.755983',lon='-73.986229',id='468',n='',s='Grand Central'}, --Times Sq - 42 St / S
['901']={boro='M',struc='Subway',lat='40.752769',lon='-73.979189',id='469',n='Times Sq',s=''}, --Grand Central - 42 St / S
['726']={boro='M',struc='Subway',lat='40.755882',lon='-74.00191',id='471',n='Queens',s=''}, --34 St - 11 Av / 7
['Q05']={boro='M',struc='Subway',lat='40.784318',lon='-73.947152',id='475',n='',s='Downtown & Brooklyn'}, --96 St / Q
['Q04']={boro='M',struc='Subway',lat='40.777891',lon='-73.951787',id='476',n='Uptown',s='Downtown & Brooklyn'}, --86 St / Q
['Q03']={boro='M',struc='Subway',lat='40.768799',lon='-73.958424',id='477',n='Uptown',s='Downtown & Brooklyn'}, --72 St / Q
}
local nodes = {
{segment='E180',node_n='180',nodetype='fork'},
{segment='WPR North',node_s='180',nodetype='fork'},
{segment='Dyre',node_s='180',nodetype='fork'},
{segment='EP',node_s='Frank',nodetype='fork'},
{segment='EP East',node_n='Frank',nodetype='fork'},
{segment='Nostrand',node_n='Frank',nodetype='fork'},
{segment='Rock Blvd',node_s='RockB',nodetype='fork'},
{segment='Fulton East Tip',node_n='RockB',nodetype='fork'},
{segment='Rock North',node_n='RockB',nodetype='fork'},
{segment='BChan',node_s='BChan',nodetype='fork'},
{segment='Rock West',node_n='BChan',nodetype='fork'},
{segment='Rock East',node_n='BChan',nodetype='fork'},
{segment='QB East',node_n='Briar',nodetype='fork'},
{segment='179',node_s='Briar',nodetype='fork'},
{segment='Arch IND VW',node_s='Briar',nodetype='fork'},
{segment='BWay 57',node_n='57',nodetype='fork'},
{segment='63 BMT',node_s='57',nodetype='fork'},
{segment='BWay North',node_s='57',nodetype='fork'},
{segment='Broad Laf',node_s='M',nodetype='uturn'},
{segment='Essex',node_s='M',nodetype='uturn'},
}
local unused_connections = {
{station='Куинс-Плаза (линия Куинс-бульвара, Ай-эн-ди)',north=true,connection='G'},
{station='Корт-сквер (линия Кросстаун, Ай-эн-ди)',north=false,connection='G'},
{station='Брод-стрит (линия Нассо-стрит, Би-эм-ти)',north=true,connection='J'},
{station='Корт-стрит (линия Четвёртой авеню, Би-эм-ти)',north=false,connection='J'},
{station='Бич 90-я улица (линия Рокавей, Ай-эн-ди)',north=false,connection='H'},
{station='Бич 67-я улица (линия Рокавей, Ай-эн-ди)',north=false,connection='H'},
{station='Атлантик-авеню (линия Канарси, Би-эм-ти)',north=false,connection='BJ'},
{station='Бродвей-Джанкшен (линия Джамейка, Би-эм-ти)',north=false,connection='BJ'},
--{station='Уэст Четвёртая улица — Вашингтон-сквер (линия Шестой авеню, Ай-эн-ди)',north=true,connection='6-8'},
--{station='Спринг-стрит (линия Восьмой авеню, Ай-эн-ди)',north=false,connection='6-8'},
--{station='Уэст Четвёртая улица — Вашингтон-сквер (линия Восьмой авеню, Ай-эн-ди)',north=true,connection='8-6'},
--{station='Бродвей — Лафайетт-стрит (линия Шестой авеню, Ай-эн-ди)',north=false,connection='8-6'},
}
local unused_tracks = {
{segment='Court',station='Корт-стрит (линия Фултон-стрит, Ай-эн-ди)',index=1,closed='закрыта и превращена в музей'},
{segment='Court',station='Хойт-стрит — Скермерхорн-стрит (линия Фултон-стрит, Ай-эн-ди)',index=2},
{segment='Lex South',station='Канал-стрит (линия Лексингтон-авеню, Ай-ар-ти)',index=1},
{segment='Lex South',station='Уэрт-стрит (линия Лексингтон-авеню, Ай-ар-ти)',index=2,closed='закрыта'},
{segment='Lex South',station='Бруклинский мост — Сити-холл (линия Лексингтон-авеню, Ай-ар-ти)',index=3},
{segment='Lex South',station='Сити-холл (линия Лексингтон-авеню, Ай-ар-ти)',index=4,closed='закрыта'},
{segment='18',station='23-я улица (линия Лексингтон-авеню, Ай-ар-ти)',index=1},
{segment='18',station='18-я улица (линия Лексингтон-авеню, Ай-ар-ти)',index=2,closed='закрыта'},
{segment='18',station='14-я улица — Юнион-сквер (линия Лексингтон-авеню, Ай-ар-ти)',index=3},
{segment='91',station='96-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',index=1},
{segment='91',station='91-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',index=2,closed='закрыта'},
{segment='91',station='86-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',index=3},
{segment='Bronx',station='180-я улица — Бронкс-парк (линия Уайт-Плейнс-роуд, Ай-ар-ти)',index=1,closed='снесена'},
{segment='Bronx',station='Уэст-Фармс-сквер — Ист-Тремонт-авеню (линия Уайт-Плейнс-роуд, Ай-ар-ти)',index=2},
{segment='Jam East',station='168-я улица (линия Джамейка, Би-эм-ти)',index=1,closed='снесена'},
{segment='Jam East',station='160-я улица (линия Джамейка, Би-эм-ти)',index=2,closed='снесена'},
{segment='Jam East',station='Сатфин-бульвар (линия Джамейка, Би-эм-ти)',index=3,closed='снесена'},
{segment='Jam East',station='Куинс-бульвар (линия Джамейка, Би-эм-ти)',index=4,closed='снесена'},
{segment='Jam East',station='Метрополитан-авеню (линия Джамейка, Би-эм-ти)',index=5,closed='снесена'},
{segment='Jam East',station='121-я улица (линия Джамейка, Би-эм-ти)',index=6},
{segment='Dean',station='Франклин-авеню (линия Франклин-авеню, Би-эм-ти)',index=1},
{segment='Dean',station='Дин-стрит (линия Франклин-авеню, Би-эм-ти)',index=2,closed='снесена'},
{segment='Dean',station='Парк-Плейс (линия Франклин-авеню, Би-эм-ти)',index=3},
{segment='Myr IND',station='Гранд-стрит (линия Шестой авеню, Ай-эн-ди)',index=1},
{segment='Myr IND',station='Мертл-авеню (линия Четвёртой авеню, Би-эм-ти)',index=2,closed='закрыта'},
{segment='Myr BMT',station='Канал-стрит (линия Бродвея, Би-эм-ти, через мост)',index=1},
{segment='Myr BMT',station='Мертл-авеню (линия Четвёртой авеню, Би-эм-ти)',index=2,closed='закрыта'},
{segment='Myr BMT',station='Декалб-авеню (линия Четвёртой авеню, Би-эм-ти)',index=3},
{segment='SFerry',station='Ректор-стрит (линия Бродвея и Седьмой авеню, Ай-ар-ти)',index=1},
{segment='SFerry',station='кольцо Саут-Ферри (линия Бродвея и Седьмой авеню, Ай-ар-ти)',index=2,closed='закрыта'},
{segment='SFerry Lex',station='Боулинг-Грин (линия Лексингтон-авеню, Ай-ар-ти)',index=1},
{segment='SFerry Lex',station='кольцо Саут-Ферри (линия Лексингтон-авеню, Ай-ар-ти)',index=2,closed='закрыта'},
{segment='Culver Shuttle',station='36-я улица (линия Пятой авеню, Би-эм-ти)',index=1,closed='снесена'},
{segment='Culver Shuttle',station='Девятая авеню (линия Уэст-Энд, Би-эм-ти)',index=2},
{segment='Culver Shuttle',station='Форт-Гамильтон-Паркуэй (линия Калвер, Би-эм-ти)',index=3,closed='снесена'},
{segment='Culver Shuttle',station='13-я авеню (линия Калвер, Би-эм-ти)',index=4,closed='снесена'},
{segment='Culver Shuttle',station='Дитмас-авеню (линия Калвер, Ай-эн-ди)',index=5},
{segment='GHR',station='Ган-Хилл-роуд (линия Уайт-Плейнс-роуд, Ай-ар-ти)',index=1},
{segment='GHR',station='210-я улица — Уильямсбридж (линия Третьей авеню, Ай-ар-ти)',index=2,closed='снесена'},
{segment='Jackson',station='Джексон-авеню (линия Уайт-Плейнс-роуд, Ай-ар-ти)',index=1},
{segment='Jackson',station='143-я улица (линия Третьей авеню, Ай-ар-ти)',index=2,closed='снесена'},
{segment='167',station='167-я улица (линия Джером-авеню, Ай-ар-ти)',index=1},
{segment='167',station='Андерсон-авеню — Джером-авеню (линия Девятой авеню, Ай-ар-ти)',index=2,closed='снесена'},
{segment='QBP',station='Куинсборо-Плаза (линия Флашинг, Ай-ар-ти)',index=1},
{segment='QBP',station='57-я улица (линия Второй авеню, Ай-ар-ти)',index=2,closed='снесена'},
{segment='80',station='Грант-авеню (линия Фултон-стрит, Би-эм-ти)',index=1,closed='снесена'},
{segment='80',station='80-я улица (линия Фултон-стрит, Ай-эн-ди)',index=2},
{segment='Canarsie',station='Канарси — Рокавей-Паркуэй (линия Канарси, Би-эм-ти)',index=1},
{segment='Canarsie',station='Флатландс-авеню (линия Канарси, Би-эм-ти)',index=2,closed='снесена'},
{segment='Atl Can',station='Манхэттен-Джанкшен (линия Фултон-стрит, Би-эм-ти)',index=1,closed='снесена'},
{segment='Atl Can',station='Атлантик-авеню (линия Канарси, Би-эм-ти)',index=2},
{segment='Atl Can',station='Хинсдейл-стрит (линия Фултон-стрит, Би-эм-ти)',index=3,closed='снесена'},
{segment='Gates',station='Гейтс-авеню (линия Джамейка, Би-эм-ти)',index=1},
{segment='Gates',station='Рид-авеню (линия Лексингтон-авеню, Би-эм-ти)',index=2,closed='снесена'},
{segment='Central',station='Сентрал-авеню (линия Мертл-авеню, Би-эм-ти)',index=1},
{segment='Central',station='Бродвей (линия Мертл-авеню, Би-эм-ти)',index=2,closed='закрыта'},
{segment='Marcy',station='Марси-авеню (линия Джамейка, Би-эм-ти)',index=1},
{segment='Marcy',station='Дригс-авеню (линия Джамейка, Би-эм-ти)',index=2,closed='снесена'},
{segment='Frank',station='Гранд-авеню (линия Фултон-стрит, Би-эм-ти)',index=1,closed='снесена'},
{segment='Frank',station='Франклин-авеню (линия Франклин-авеню, Би-эм-ти)',index=2},
{segment='Frank',station='Ностранд-авеню (линия Фултон-стрит, Би-эм-ти)',index=3,closed='снесена'},
{segment='WF',station='Уорлдс-Фэр (линия Всемирной выставки, Ай-эн-ди)',index=1,closed='снесена вместе с линией'},
{segment='WF',station='Форест-Хилс — 71-я авеню (линия Куинс-бульвара, Ай-эн-ди)',index=2},
}
local multiline_stations = {
{full='Джамейка-Сентер — Парсонс — Арчер (Нью-Йоркское метро)',
part='Джамейка-Сентер — Парсонс — Арчер (линия Арчер-авеню, Ай-эн-ди)',text='Через верхний уровень станции'},
{full='Джамейка-Сентер — Парсонс — Арчер (Нью-Йоркское метро)',
part='Джамейка-Сентер — Парсонс — Арчер (линия Арчер-авеню, Би-эм-ти)',text='а через нижний'},
{full='Сатфин-бульвар — Арчер-авеню — Аэропорт имени Джона Кеннеди (Нью-Йоркское метро)',
part='Сатфин-бульвар — Арчер-авеню — Аэропорт имени Джона Кеннеди (линия Арчер-авеню, Ай-эн-ди)',text='Через верхний уровень станции'},
{full='Сатфин-бульвар — Арчер-авеню — Аэропорт имени Джона Кеннеди (Нью-Йоркское метро)',
part='Сатфин-бульвар — Арчер-авеню — Аэропорт имени Джона Кеннеди (линия Арчер-авеню, Би-эм-ти)',text='а через нижний'},
{full='145-я улица (Нью-Йоркское метро)',part='145-я улица (линия Восьмой авеню, Ай-эн-ди)',text='Через верхний уровень станции',level='верхнего уровня'},
{full='145-я улица (Нью-Йоркское метро)',part='145-я улица (линия Конкорс, Ай-эн-ди)',text='а через нижний',level='нижнего уровня'},
{full='Уэст Четвёртая улица — Вашингтон-сквер (Нью-Йоркское метро)',
part='Уэст Четвёртая улица — Вашингтон-сквер (линия Восьмой авеню, Ай-эн-ди)',text='Через верхний уровень станции',level='верхнего уровня'},
{full='Уэст Четвёртая улица — Вашингтон-сквер (Нью-Йоркское метро)',
part='Уэст Четвёртая улица — Вашингтон-сквер (линия Шестой авеню, Ай-эн-ди)',text='а через нижний',level='нижнего уровня'},
{full='Уэст Восьмая улица — Нью-Йоркский аквариум (Нью-Йоркское метро)',
part='Уэст Восьмая улица — Нью-Йоркский аквариум (линия Брайтон, Би-эм-ти)',text='Через верхний уровень станции'},
{full='Уэст Восьмая улица — Нью-Йоркский аквариум (Нью-Йоркское метро)',
part='Уэст Восьмая улица — Нью-Йоркский аквариум (линия Калвер, Ай-эн-ди)',text='а через нижний'},
{full='50-я улица (Нью-Йоркское метро)',part='50-я улица (линия Восьмой авеню, Ай-эн-ди)',text='Через верхний уровень станции'},
{full='50-я улица (Нью-Йоркское метро)',part='50-я улица (линия Куинс-бульвара, Ай-эн-ди)',text='а через нижний'},
{full='Куинсборо-Плаза (Нью-Йоркское метро)',part='Куинсборо-Плаза (линия Астория, Би-эм-ти)',text='С северной стороны островных платформ на обоих уровнях станции',cross=true},
{full='Куинсборо-Плаза (Нью-Йоркское метро)',part='Куинсборо-Плаза (линия Флашинг, Ай-ар-ти)',text='а с южной',after='на верхнем уровне на Манхэттен, а на нижнем на Куинс',cross=true},
{full='Лексингтон-авеню — 63-я улица (Нью-Йоркское метро)',
part='Лексингтон-авеню — 63-я улица (линия 63-й улицы, Би-эм-ти)',text='С северной стороны островных платформ на обоих уровнях станции',cross=true},
{full='Лексингтон-авеню — 63-я улица (Нью-Йоркское метро)',
part='Лексингтон-авеню — 63-я улица (линия 63-й улицы, Ай-эн-ди)',text='а с южной',after='на верхнем уровне на Нижний Манхэттен, а на нижнем на Верхний Манхэттен и Куинс',cross=true},
{full='Седьмая авеню (Нью-Йоркское метро)',part='Седьмая авеню (линия Куинс-бульвара, Ай-эн-ди)',text='С северной стороны островных платформ на обоих уровнях станции',cross=true},
{full='Седьмая авеню (Нью-Йоркское метро)',part='Седьмая авеню (линия Шестой авеню, Ай-эн-ди)',text='а с южной',after='на верхнем уровне на Манхэттен, а на нижнем на Куинс и Бронкс',cross=true},
{full='Проспект-парк (Нью-Йоркское метро)',part='Проспект-парк (линия Брайтон, Би-эм-ти)',text='По двум центральным путям станции',cross=true},
{full='Проспект-парк (Нью-Йоркское метро)',part='Проспект-парк (линия Франклин-авеню, Би-эм-ти)',text='а по крайнему восточному пути',cross=true},
{full='Джей-стрит — Метротек (линии Ай-эн-ди)',part='Джей-стрит — Метротек (линия Фултон-стрит, Ай-эн-ди)',text='По двум центральным путям станции',cross=true},
{full='Джей-стрит — Метротек (линии Ай-эн-ди)',part='Джей-стрит — Метротек (линия Калвер, Ай-эн-ди)',text='а по двум крайним',cross=true},
{full='Хойт-стрит — Скермерхорн-стрит (Нью-Йоркское метро)',
part='Хойт-стрит — Скермерхорн-стрит (линия Кросстаун, Ай-эн-ди)',text='По двум центральным путям станции',cross=true},
{full='Хойт-стрит — Скермерхорн-стрит (Нью-Йоркское метро)',
part='Хойт-стрит — Скермерхорн-стрит (линия Фултон-стрит, Ай-эн-ди)',text='а по двум следующим (по другую сторону от действующих островных платформ)',cross=true},
{full='Декалб-авеню (Нью-Йоркское метро)',part='Декалб-авеню (линия Брайтон, Би-эм-ти)',text='По двум крайним путям станции',detailed=true,cross=true},
{full='Декалб-авеню (Нью-Йоркское метро)',part='Декалб-авеню (линия Четвёртой авеню, Би-эм-ти)',text='а по четырём центральным',level='в центральной части станции',no_exp=true,cross=true},
{full='Кони-Айленд — Стилуэлл-авеню (Нью-Йоркское метро)',part='Кони-Айленд — Стилуэлл-авеню (линия Си-Бич, Би-эм-ти)',text='У первой с востока островной платформы'},
{full='Кони-Айленд — Стилуэлл-авеню (Нью-Йоркское метро)',part='Кони-Айленд — Стилуэлл-авеню (линия Брайтон, Би-эм-ти)',text='у второй'},
{full='Кони-Айленд — Стилуэлл-авеню (Нью-Йоркское метро)',part='Кони-Айленд — Стилуэлл-авеню (линия Калвер, Ай-эн-ди)',text='у третьей'},
{full='Кони-Айленд — Стилуэлл-авеню (Нью-Йоркское метро)',part='Кони-Айленд — Стилуэлл-авеню (линия Уэст-Энд, Би-эм-ти)',text='а у четвёртой'},
-- бывшая станция
{full='Саут-Ферри (Нью-Йоркское метро)',part='кольцо Саут-Ферри (линия Бродвея и Седьмой авеню, Ай-ар-ти)',text=''},
{full='Саут-Ферри (Нью-Йоркское метро)',part='кольцо Саут-Ферри (линия Лексингтон-авеню, Ай-ар-ти)',text=''},
}
local station_complexes = {
{article='149-я улица — Гранд-Конкорс (Нью-Йоркское метро)',station='149-я улица — Гранд-Конкорс (линия Уайт-Плейнс-роуд, Ай-ар-ти)',section='Платформы линии Уайт-Плейнс-роуд, Ай-ар-ти'},
{article='149-я улица — Гранд-Конкорс (Нью-Йоркское метро)',station='149-я улица — Гранд-Конкорс (линия Джером-авеню, Ай-ар-ти)',section='Платформы линии Джером-авеню, Ай-ар-ти'},
{article='14-я улица / Восьмая авеню (Нью-Йоркское метро)',station='14-я улица (линия Восьмой авеню, Ай-эн-ди)',section='Платформы линии Восьмой авеню, Ай-эн-ди'},
{article='14-я улица / Восьмая авеню (Нью-Йоркское метро)',station='Восьмая авеню (линия Канарси, Би-эм-ти)',section='Платформа линии Канарси, Би-эм-ти'},
{article='14-я улица — Юнион-сквер (Нью-Йоркское метро)',station='14-я улица — Юнион-сквер (линия Лексингтон-авеню, Ай-ар-ти)',section='Платформы линии Лексингтон-авеню, Ай-ар-ти'},
{article='14-я улица — Юнион-сквер (Нью-Йоркское метро)',station='Юнион-сквер (линия Канарси, Би-эм-ти)',section='Платформа линии Канарси, Би-эм-ти'},
{article='14-я улица — Юнион-сквер (Нью-Йоркское метро)',station='14-я улица — Юнион-сквер (линия Бродвея, Би-эм-ти)',section='Платформы линии Бродвея, Би-эм-ти'},
{article='14-я улица / Шестая авеню (Нью-Йоркское метро)',station='14-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',section='Платформы линии Бродвея и Седьмой авеню, Ай-ар-ти'},
{article='14-я улица / Шестая авеню (Нью-Йоркское метро)',station='14-я улица (линия Шестой авеню, Ай-эн-ди)',section='Платформы линии Шестой авеню, Ай-эн-ди'},
{article='14-я улица / Шестая авеню (Нью-Йоркское метро)',station='Шестая авеню (линия Канарси, Би-эм-ти)',section='Платформа линии Канарси, Би-эм-ти'},
{article='161-я улица — Стадион Янки (Нью-Йоркское метро)',station='161-я улица — Стадион Янки (линия Джером-авеню, Ай-ар-ти)',section='Платформы линии Джером-авеню, Ай-ар-ти'},
{article='161-я улица — Стадион Янки (Нью-Йоркское метро)',station='161-я улица — Стадион Янки (линия Конкорс, Ай-эн-ди)',section='Платформы линии Конкорс, Ай-эн-ди'},
{article='168-я улица (Нью-Йоркское метро)',station='168-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',section='Платформы линии Бродвея и Седьмой авеню, Ай-ар-ти'},
{article='168-я улица (Нью-Йоркское метро)',station='168-я улица (линия Восьмой авеню, Ай-эн-ди)',section='Платформы линии Восьмой авеню, Ай-эн-ди'},
{article='34-я улица — Геральд-сквер (Нью-Йоркское метро)',station='34-я улица — Геральд-сквер (линия Бродвея, Би-эм-ти)',section='Платформы линии Бродвея, Би-эм-ти'},
{article='34-я улица — Геральд-сквер (Нью-Йоркское метро)',station='34-я улица — Геральд-сквер (линия Шестой авеню, Ай-эн-ди)',section='Платформы линии Шестой авеню, Ай-эн-ди'},
{article='42-я улица — Брайант-парк / Пятая авеню (Нью-Йоркское метро)',station='Пятая авеню (линия Флашинг, Ай-ар-ти)',section='Платформа линии Флашинг, Ай-ар-ти'},
{article='42-я улица — Брайант-парк / Пятая авеню (Нью-Йоркское метро)',station='42-я улица — Брайант-парк (линия Шестой авеню, Ай-эн-ди)',section='Платформы линии Шестой авеню, Ай-эн-ди'},
{article='59-я улица — Колумбус-Серкл (Нью-Йоркское метро)',station='59-я улица — Колумбус-Серкл (линия Бродвея и Седьмой авеню, Ай-ар-ти)',section='Платформы линии Бродвея и Седьмой авеню, Ай-ар-ти'},
{article='59-я улица — Колумбус-Серкл (Нью-Йоркское метро)',station='59-я улица — Колумбус-Серкл (линия Восьмой авеню, Ай-эн-ди)',section='Платформы линии Восьмой авеню, Ай-эн-ди'},
{article='Атлантик-авеню — Барклайс-центр (Нью-Йоркское метро)',station='Атлантик-авеню — Барклайс-центр (линия Истерн-Паркуэй, Ай-ар-ти)',section='Платформы линии Истерн-Паркуэй, Ай-ар-ти'},
{article='Атлантик-авеню — Барклайс-центр (Нью-Йоркское метро)',station='Атлантик-авеню — Барклайс-центр (линия Брайтон, Би-эм-ти)',section='Платформа линии Брайтон, Би-эм-ти'},
{article='Атлантик-авеню — Барклайс-центр (Нью-Йоркское метро)',station='Атлантик-авеню — Барклайс-центр (линия Четвёртой авеню, Би-эм-ти)',section='Платформы линии Четвёртой авеню, Би-эм-ти'},
{article='Бродвей — Лафайетт-стрит / Бликер-стрит (Нью-Йоркское метро)',station='Бликер-стрит (линия Лексингтон-авеню, Ай-ар-ти)',section='Платформы линии Лексингтон-авеню, Ай-ар-ти'},
{article='Бродвей — Лафайетт-стрит / Бликер-стрит (Нью-Йоркское метро)',station='Бродвей — Лафайетт-стрит (линия Шестой авеню, Ай-эн-ди)',section='Платформы линии Шестой авеню, Ай-эн-ди'},
{article='Бродвей-Джанкшен (Нью-Йоркское метро)',station='Бродвей-Джанкшен (линия Фултон-стрит, Ай-эн-ди)',section='Платформы линии Фултон-стрит, Ай-эн-ди'},
{article='Бродвей-Джанкшен (Нью-Йоркское метро)',station='Бродвей-Джанкшен (линия Джамейка, Би-эм-ти)',section='Платформы линии Джамейка, Би-эм-ти'},
{article='Бродвей-Джанкшен (Нью-Йоркское метро)',station='Бродвей-Джанкшен (линия Канарси, Би-эм-ти)',section='Платформы линии Канарси, Би-эм-ти'},
{article='Бруклинский мост — Сити-холл / Чеймберс-стрит (Нью-Йоркское метро)',station='Бруклинский мост — Сити-холл (линия Лексингтон-авеню, Ай-ар-ти)',section='Платформы линии Лексингтон-авеню, Ай-ар-ти'},
{article='Бруклинский мост — Сити-холл / Чеймберс-стрит (Нью-Йоркское метро)',station='Чеймберс-стрит (линия Нассо-стрит, Би-эм-ти)',section='Платформы линии Нассо-стрит, Би-эм-ти'},
{article='Канал-стрит (Нью-Йоркское метро)',station='Канал-стрит (линия Лексингтон-авеню, Ай-ар-ти)',section='Платформы линии Лексингтон-авеню, Ай-ар-ти'},
{article='Канал-стрит (Нью-Йоркское метро)',station='Канал-стрит (линия Нассо-стрит, Би-эм-ти)',section='Платформы линии Нассо-стрит, Би-эм-ти'},
{article='Канал-стрит (Нью-Йоркское метро)',station='Канал-стрит (линия Бродвея, Би-эм-ти, через тоннель)',section='Платформы линии Бродвея, Би-эм-ти'}, --две станции - один раздел статьи
{article='Канал-стрит (Нью-Йоркское метро)',station='Канал-стрит (линия Бродвея, Би-эм-ти, через мост)',section='Платформы линии Бродвея, Би-эм-ти'}, --две станции - один раздел статьи
{article='Чеймберс-стрит — Всемирный торговый центр / Парк-Плейс (Нью-Йоркское метро)',station='Парк-Плейс (линия Бродвея и Седьмой авеню, Ай-ар-ти)',section='Платформа линии Бродвея и Седьмой авеню, Ай-ар-ти'},
{article='Чеймберс-стрит — Всемирный торговый центр / Парк-Плейс (Нью-Йоркское метро)',station='Чеймберс-стрит (линия Восьмой авеню, Ай-эн-ди)',section='Платформы линии Восьмой авеню, Ай-эн-ди'}, --две станции - один раздел статьи
{article='Чеймберс-стрит — Всемирный торговый центр / Парк-Плейс (Нью-Йоркское метро)',station='Всемирный торговый центр (линия Восьмой авеню, Ай-эн-ди)',section='Платформы линии Восьмой авеню, Ай-эн-ди'}, --две станции - один раздел статьи
{article='Чеймберс-стрит — Всемирный торговый центр / Парк-Плейс (Нью-Йоркское метро)',station='Кортландт-стрит (линия Бродвея, Би-эм-ти)',section='Платформы линии Бродвея, Би-эм-ти'},
{article='Корт-сквер — 23-я улица (Нью-Йоркское метро)',station='Корт-сквер (линия Флашинг, Ай-ар-ти)',section='Платформы линии Флашинг, Ай-ар-ти'},
{article='Корт-сквер — 23-я улица (Нью-Йоркское метро)',station='Корт-сквер (линия Кросстаун, Ай-эн-ди)',section='Платформа линии Кросстаун, Ай-эн-ди'},
{article='Корт-сквер — 23-я улица (Нью-Йоркское метро)',station='Корт-сквер — 23-я улица (линия Куинс-бульвара, Ай-эн-ди)',section='Платформы линии Куинс-бульвара, Ай-эн-ди'},
{article='Корт-стрит / Боро-холл (Нью-Йоркское метро)',station='Боро-холл (линия Бродвея и Седьмой авеню, Ай-ар-ти)',section='Платформы линии Бродвея и Седьмой авеню, Ай-ар-ти'},
{article='Корт-стрит / Боро-холл (Нью-Йоркское метро)',station='Боро-холл (линия Истерн-Паркуэй, Ай-ар-ти)',section='Платформы линии Истерн-Паркуэй, Ай-ар-ти'},
{article='Корт-стрит / Боро-холл (Нью-Йоркское метро)',station='Корт-стрит (линия Четвёртой авеню, Би-эм-ти)',section='Платформа линии Четвёртой авеню, Би-эм-ти'},
{article='Деланси-стрит / Эссекс-стрит (Нью-Йоркское метро)',station='Эссекс-стрит (линия Нассо-стрит, Би-эм-ти)',section='Платформы линии Нассо-стрит, Би-эм-ти'},
{article='Деланси-стрит / Эссекс-стрит (Нью-Йоркское метро)',station='Деланси-стрит (линия Шестой авеню, Ай-эн-ди)',section='Платформы линии Шестой авеню, Ай-эн-ди'},
{article='Четвёртая авеню / Девятая улица (Нью-Йоркское метро)',station='Девятая улица (линия Четвёртой авеню, Би-эм-ти)',section='Платформы линии Четвёртой авеню, Би-эм-ти'},
{article='Четвёртая авеню / Девятая улица (Нью-Йоркское метро)',station='Четвёртая авеню (линия Калвер, Ай-эн-ди)',section='Платформы линии Калвер, Ай-эн-ди'},
{article='Франклин-авеню / Ботанический сад (Нью-Йоркское метро)',station='Франклин-авеню — Медгар-Эверс-колледж (линия Истерн-Паркуэй, Ай-ар-ти)',section='Платформы линии Истерн-Паркуэй, Ай-ар-ти'},
{article='Франклин-авеню / Ботанический сад (Нью-Йоркское метро)',station='Ботанический сад (линия Франклин-авеню, Би-эм-ти)',section='Платформы линии Франклин-авеню, Би-эм-ти'},
{article='Франклин-авеню (Нью-Йоркское метро)',station='Франклин-авеню (линия Франклин-авеню, Би-эм-ти)',section='Платформа линии Франклин-авеню, Би-эм-ти'},
{article='Франклин-авеню (Нью-Йоркское метро)',station='Франклин-авеню (линия Фултон-стрит, Ай-эн-ди)',section='Платформы линии Фултон-стрит, Ай-эн-ди'},
{article='Фултон-стрит (Нью-Йоркское метро)',station='Фултон-стрит (линия Бродвея и Седьмой авеню, Ай-ар-ти)',section='Платформа линии Бродвея и Седьмой авеню, Ай-ар-ти'},
{article='Фултон-стрит (Нью-Йоркское метро)',station='Фултон-стрит (линия Лексингтон-авеню, Ай-ар-ти)',section='Платформы линии Лексингтон-авеню, Ай-ар-ти'},
{article='Фултон-стрит (Нью-Йоркское метро)',station='Фултон-стрит (линия Восьмой авеню, Ай-эн-ди)',section='Платформа линии Восьмой авеню, Ай-эн-ди'},
{article='Фултон-стрит (Нью-Йоркское метро)',station='Фултон-стрит (линия Нассо-стрит, Би-эм-ти)',section='Платформы линии Нассо-стрит, Би-эм-ти'},
{article='Центральный вокзал — 42-я улица (Нью-Йоркское метро)',station='Центральный вокзал — 42-я улица (линия Лексингтон-авеню, Ай-ар-ти)',section='Платформы линии Лексингтон-авеню, Ай-ар-ти'},
{article='Центральный вокзал — 42-я улица (Нью-Йоркское метро)',station='Центральный вокзал (линия Флашинг, Ай-ар-ти)',section='Платформа линии Флашинг, Ай-ар-ти'},
{article='Центральный вокзал — 42-я улица (Нью-Йоркское метро)',station='Центральный вокзал (челнок 42-й улицы, Ай-ар-ти)',section='Платформа челнока 42-й улицы, Ай-ар-ти'},
{article='Центральный вокзал — 42-я улица (Нью-Йоркское метро)',station='42-я улица (линия Второй авеню, Ай-эн-ди)',section='',future=true},
{article='Джей-стрит — Метротек (Нью-Йоркское метро)',station='Джей-стрит — Метротек (линии Ай-эн-ди)',section='Платформы Ай-эн-ди'}, --станция с двумя линиями входит в пересадочный узел
{article='Джей-стрит — Метротек (Нью-Йоркское метро)',station='Джей-стрит — Метротек (линия Четвёртой авеню, Би-эм-ти)',section='Платформа Би-эм-ти'},
{article='Лексингтон-авеню — 53-я улица / 51-я улица (Нью-Йоркское метро)',station='51-я улица (линия Лексингтон-авеню, Ай-ар-ти)',section='Платформы линии Лексингтон-авеню, Ай-ар-ти'},
{article='Лексингтон-авеню — 53-я улица / 51-я улица (Нью-Йоркское метро)',station='Лексингтон-авеню — 53-я улица (линия Куинс-бульвара, Ай-эн-ди)',section='Платформа линии Куинс-бульвара, Ай-эн-ди'},
{article='Лексингтон-авеню — 53-я улица / 51-я улица (Нью-Йоркское метро)',station='55-я улица (линия Второй авеню, Ай-эн-ди)',section='',future=true},
{article='Лексингтон-авеню — 59-я улица (Нью-Йоркское метро)',station='59-я улица (линия Лексингтон-авеню, Ай-ар-ти)',section='Платформы линии Лексингтон-авеню, Ай-ар-ти'},
{article='Лексингтон-авеню — 59-я улица (Нью-Йоркское метро)',station='Лексингтон-авеню — 59-я улица (линия Бродвея, Би-эм-ти)',section='Платформа линии Бродвея, Би-эм-ти'},
{article='Лексингтон-авеню — 59-я улица (Нью-Йоркское метро)',station='Лексингтон-авеню — 63-я улица (Нью-Йоркское метро)',section=''}, --станция с двумя линиями входит в пересадочный узел виртуально
{article='Лоример-стрит / Метрополитан-авеню (Нью-Йоркское метро)',station='Лоример-стрит (линия Канарси, Би-эм-ти)',section='Платформы линии Канарси, Би-эм-ти'},
{article='Лоример-стрит / Метрополитан-авеню (Нью-Йоркское метро)',station='Метрополитан-авеню (линия Кросстаун, Ай-эн-ди)',section='Платформы линии Кросстаун, Ай-эн-ди'},
{article='Мертл-авеню — Уайкофф-авеню (Нью-Йоркское метро)',station='Мертл-авеню — Уайкофф-авеню (линия Канарси, Би-эм-ти)',section='Платформа линии Канарси, Би-эм-ти'},
{article='Мертл-авеню — Уайкофф-авеню (Нью-Йоркское метро)',station='Мертл-авеню — Уайкофф-авеню (линия Мертл-авеню, Би-эм-ти)',section='Платформа линии Мертл-авеню, Би-эм-ти'},
{article='Нью-Ютрект-авеню / 62-я улица (Нью-Йоркское метро)',station='Нью-Ютрект-авеню (линия Си-Бич, Би-эм-ти)',section='Платформы линии Си-Бич, Би-эм-ти'},
{article='Нью-Ютрект-авеню / 62-я улица (Нью-Йоркское метро)',station='62-я улица (линия Уэст-Энд, Би-эм-ти)',section='Платформы линии Уэст-Энд, Би-эм-ти'},
{article='74-я улица — Бродвей / Рузвельт-авеню (Нью-Йоркское метро)',station='74-я улица — Бродвей (линия Флашинг, Ай-ар-ти)',section='Платформы линии Флашинг, Ай-ар-ти'},
{article='74-я улица — Бродвей / Рузвельт-авеню (Нью-Йоркское метро)',station='Джексон-Хайтс — Рузвельт-авеню (линия Куинс-бульвара, Ай-эн-ди)',section='Платформы линии Куинс-бульвара, Ай-эн-ди'},
{article='Саут-Ферри — Уайтхолл-стрит (Нью-Йоркское метро)',station='Саут-Ферри (линия Бродвея и Седьмой авеню, Ай-ар-ти)',section='Платформа линии Бродвея и Седьмой авеню, Ай-ар-ти'},
{article='Саут-Ферри — Уайтхолл-стрит (Нью-Йоркское метро)',station='Уайтхолл-стрит — Саут-Ферри (линия Бродвея, Би-эм-ти)',section='Платформы линии Бродвея, Би-эм-ти'},
{article='Таймс-сквер — 42-я улица (Нью-Йоркское метро)',station='Таймс-сквер — 42-я улица (линия Бродвея и Седьмой авеню, Ай-ар-ти)',section='Платформы линии Бродвея и Седьмой авеню, Ай-ар-ти'},
{article='Таймс-сквер — 42-я улица (Нью-Йоркское метро)',station='Таймс-сквер (линия Флашинг, Ай-ар-ти)',section='Платформа линии Флашинг, Ай-ар-ти'},
{article='Таймс-сквер — 42-я улица (Нью-Йоркское метро)',station='42-я улица — Автовокзал Портового управления (линия Восьмой авеню, Ай-эн-ди)',section='Платформы линии Восьмой авеню, Ай-эн-ди'},
{article='Таймс-сквер — 42-я улица (Нью-Йоркское метро)',station='Таймс-сквер — 42-я улица (линия Бродвея, Би-эм-ти)',section='Платформы линии Бродвея, Би-эм-ти'},
{article='Таймс-сквер — 42-я улица (Нью-Йоркское метро)',station='Таймс-сквер (челнок 42-й улицы, Ай-ар-ти)',section='Платформа челнока 42-й улицы, Ай-ар-ти'},
{article='2',station='Ливония-авеню (линия Канарси, Би-эм-ти)',section=''},
{article='2',station='Джуниус-стрит (линия Нью-Лотс, Ай-ар-ти)',section=''},
{article='3',station='Таймс-сквер — 42-я улица (Нью-Йоркское метро)',section='',periods='rh+md+ev+we'},
{article='3',station='42-я улица — Брайант-парк / Пятая авеню (Нью-Йоркское метро)',section='',periods='rh+md+ev+we'},
{article='a',station='125-я улица (линия Лексингтон-авеню, Ай-ар-ти)',section='',future=true},
{article='a',station='125-я улица (линия Второй авеню, Ай-эн-ди)',section='',future=true},
{article='b',station='Третья авеню (линия Канарси, Би-эм-ти)',section='',future=true},
{article='b',station='14-я улица (линия Второй авеню, Ай-эн-ди)',section='',future=true},
{article='c',station='Вторая авеню (линия Шестой авеню, Ай-эн-ди)',section='',future=true},
{article='c',station='Хаустон-стрит (линия Второй авеню, Ай-эн-ди)',section='',future=true},
{article='d',station='Гранд-стрит (линия Шестой авеню, Ай-эн-ди)',section='',future=true},
{article='d',station='Гранд-стрит (линия Второй авеню, Ай-эн-ди)',section='',future=true},
}
local route_fun=function(xx)
return setmetatable(xx, {
__index=function(xx,key)
if key=='label' or key=='tooltip' or key=='name' then
return xx.id
elseif key=='link' then
return xx.id..' (маршрут метро, Нью-Йорк)'
end
end,
__call=function(xx,key,param1,param2)
if key=='bullet' then
if param2==nil then
param2=xx.tooltip
end
return '[[Файл:NYCS-bull-trans-'..xx.label..'-Std.svg|'..param1..'px|'..param2..'|link='..xx.link..']]'
elseif key=='bold' then
if param1 then
txt=xx.name
else
txt=xx.tooltip
end
pos=string.find(txt,' ',1,true)
if pos then
return '[['..xx.link..'|<b>'..string.sub(txt,1,pos-1)..'</b>]]'..string.sub(txt,pos,string.len(txt))
else
return '[['..xx.link..'|<b>'..txt..'</b>]]'
end
end
end
})
end
local routes = {
['1']=route_fun({id='1',bkg='FFCCCC',color='ee352e',descr='Локальный маршрут [[Линия Бродвея и Седьмой авеню, Ай-ар-ти|линии Бродвея и Седьмой авеню]]',schedule='9426'}),
['2']=route_fun({id='2',bkg='FFCCCC',color='ee352e',descr='Экспресс-маршрут [[Линия Бродвея и Седьмой авеню, Ай-ар-ти|линии Бродвея и Седьмой авеню]]',schedule='9431'}),
['3']=route_fun({id='3',bkg='FFCCCC',color='ee352e',descr='Экспресс-маршрут [[Линия Бродвея и Седьмой авеню, Ай-ар-ти|линии Бродвея и Седьмой авеню]]',schedule='9436'}),
['4']=route_fun({id='4',bkg='BFFA9C',color='00933c',descr='Экспресс-маршрут [[Линия Лексингтон-авеню, Ай-ар-ти|линии Лексингтон-авеню]]',schedule='9441'}),
['5']=route_fun({id='5',bkg='BFFA9C',color='00933c',descr='Экспресс-маршрут [[Линия Лексингтон-авеню, Ай-ар-ти|линии Лексингтон-авеню]]',schedule='9446'}),
['6']=route_fun({id='6',bkg='BFFA9C',color='00933c',descr='Локальный маршрут [[Линия Лексингтон-авеню, Ай-ар-ти|линии Лексингтон-авеню]]',schedule='9456'}),
['<6>']=route_fun({id='<6>',bkg='BFFA9C',label='6d',link='6 (маршрут метро, Нью-Йорк)',color='00933c',
descr='Локальный маршрут [[Линия Лексингтон-авеню, Ай-ар-ти|линии Лексингтон-авеню]],<br>экспресс-маршрут [[Линия Пелем, Ай-ар-ти|линии Пелем]]',onedir=true}),
['7']=route_fun({id='7',bkg='FFCCFF',color='b933ad',descr='Локальный маршрут [[Линия Флашинг, Ай-ар-ти|линии Флашинг]]',schedule='9461'}),
['<7>']=route_fun({id='<7>',bkg='FFCCFF',label='7d',link='7 (маршрут метро, Нью-Йорк)',color='b933ad',descr='Экспресс-маршрут [[Линия Флашинг, Ай-ар-ти|линии Флашинг]]',onedir=true}),
['A']=route_fun({id='A',bkg='CDE6FE',color='2850ad',descr='Экспресс-маршрут [[Линия Восьмой авеню, Ай-эн-ди|линии Восьмой авеню]]',schedule='9466',second='A S'}),
['B']=route_fun({id='B',bkg='FFCD97',color='ff6319',descr='Экспресс-маршрут [[Линия Шестой авеню, Ай-эн-ди|линии Шестой авеню]]',schedule='9481'}),
['C']=route_fun({id='C',bkg='CDE6FE',color='2850ad',descr='Локальный маршрут [[Линия Восьмой авеню, Ай-эн-ди|линии Восьмой авеню]]',schedule='9471'}),
['D']=route_fun({id='D',bkg='FFCD97',color='ff6319',descr='Экспресс-маршрут [[Линия Шестой авеню, Ай-эн-ди|линии Шестой авеню]]',schedule='9486'}),
['E']=route_fun({id='E',bkg='CDE6FE',color='2850ad',descr='Локальный маршрут [[Линия Восьмой авеню, Ай-эн-ди|линии Восьмой авеню]]',schedule='9476'}),
['F']=route_fun({id='F',bkg='FFCD97',color='ff6319',descr='Локальный маршрут [[Линия Шестой авеню, Ай-эн-ди|линии Шестой авеню]]',schedule='10366'}),
['<F>']=route_fun({id='<F>',bkg='FFCD97',label='Fd',link='F (маршрут метро, Нью-Йорк)',color='ff6319',
descr='Локальный маршрут [[Линия Шестой авеню, Ай-эн-ди|линии Шестой авеню]],<br>экспресс-маршрут [[Линия Калвер, Ай-эн-ди|линии Калвер]]',onedir=true}),
['G']=route_fun({id='G',bkg='CCFFCC',color='6cbe45',descr='Локальный маршрут [[Линия Кросстаун, Ай-эн-ди|линии Кросстаун]]',schedule='9501'}),
['J']=route_fun({id='J',bkg='E2BF9C',link='J/Z (маршрут метро, Нью-Йорк)',color='996633',descr='Локальный маршрут [[Линия Нассо-стрит, Би-эм-ти|линии Нассо-стрит]]',schedule='9506'}),
['L']=route_fun({id='L',bkg='EEEEEE',color='a7a9ac',descr='Локальный маршрут [[Линия Канарси, Би-эм-ти|линии Канарси]]',schedule='18241'}),
['M']=route_fun({id='M',bkg='FFCD97',color='ff6319',descr='Локальный маршрут [[Линия Шестой авеню, Ай-эн-ди|линии Шестой авеню]]',schedule='9496'}),
['N']=route_fun({id='N',bkg='FFF793',color='fccc0a',descr='Экспресс-маршрут [[Линия Бродвея, Би-эм-ти|линии Бродвея]]',schedule='9511'}),
['Q']=route_fun({id='Q',bkg='FFF793',color='fccc0a',descr='Экспресс-маршрут [[Линия Бродвея, Би-эм-ти|линии Бродвея]]',schedule='9516'}),
['R']=route_fun({id='R',bkg='FFF793',color='fccc0a',descr='Локальный маршрут [[Линия Бродвея, Би-эм-ти|линии Бродвея]]',schedule='9521'}),
['A S']=route_fun({id='A S',bkg='CDE6FE',label='S blue',tooltip='S (челнок Леффертс-бульвара)',link='A (маршрут метро, Нью-Йорк)',color='2850ad',name='S',descr='Челнок Леффертс-бульвара',shuttle=true}), --,sameas='A'
['S 42']=route_fun({id='S 42',bkg='CCCCCC',label='S',tooltip='S (челнок 42-й улицы)',link='Челнок 42-й улицы',color='808183',name='S',descr='[[Челнок 42-й улицы, Ай-ар-ти|Челнок 42-й улицы]]',schedule='9531',shuttle=true}),
['S F']=route_fun({id='S F',bkg='CCCCCC',label='S',tooltip='S (челнок Франклин-авеню)',link='Челнок Франклин-авеню',color='808183',name='S',descr='[[Челнок Франклин-авеню]]',schedule='9541',shuttle=true}),
['S R']=route_fun({id='S R',bkg='CCCCCC',label='S',tooltip='S (челнок Рокавей-парка)',link='Челнок Рокавей-парка',color='808183',name='S',descr='[[Челнок Рокавей-парка]]',schedule='9536',shuttle=true}),
['W']=route_fun({id='W',bkg='FFF793',color='fccc0a',descr='Локальный маршрут [[Линия Бродвея, Би-эм-ти|линии Бродвея]]',schedule='9526'}),
['Z']=route_fun({id='Z',bkg='E2BF9C',link='J/Z (маршрут метро, Нью-Йорк)',color='996633',descr='Экспресс-маршрут [[Линия Нассо-стрит, Би-эм-ти|линии Нассо-стрит]]',onedir=true}),
['T']=route_fun({id='T',bkg='CCFFFF',color='00add0',descr='Локальный маршрут [[Линия Второй авеню, Ай-эн-ди|линии Второй авеню]]',future=true}),
}
local icon_fun=function(x0)
return setmetatable(x0, {
__call=function(x0,key,param1,param2,param3)
if key=='icon' then
if param2==nil then
param2=x0.tooltip
end
if param3==nil then
param3=''
end
if x0.icon=='' then
return '[[Файл:Transparent square.svg|'..param1..'px|'..param2..'|link='..param3..']]'
else
return '[[Файл:NYCS-SSI-'..x0.icon..'.svg|'..param1..'px|'..param2..'|link='..param3..']]'
end
end
end
})
end
local icons = {
['rh+md+ev+we+ln']=icon_fun({icon='alltimes',tooltip='круглосуточно',alltimes=true,num=1}),
['rh+md+ev+we']=icon_fun({icon='allexceptnights',tooltip='круглосуточно, кроме ночи',comma=true,num=2}),
['rh(not peak)+md+ev+we+ln']=icon_fun({icon='allexceptrush',tooltip='круглосуточно, кроме часов пик в пиковом направлении',comma=true,
alltimes=true,legend='круглосуточно, кроме будней днём (либо часов пик) в пиковом направлении',num=3}),
['rh+md+ev']=icon_fun({icon='weekdaysonly',tooltip='в будни днём и вечером',legend='в будни днём (и, возможно, вечером)',num=4}),
['rh+md+ev+ln(1)']=icon_fun({icon='nightsweekdays',tooltip='в будни круглосуточно',num=5}),
['rh']=icon_fun({icon='rushonly',tooltip='в часы пик',num=6}),
['rh(peak)']=icon_fun({icon='rushpeak',tooltip='в часы пик в пиковом направлении',
legend='в будни днём (либо в часы пик) в пиковом направлении',num=7}),
['rh(not peak)']=icon_fun({icon='rushreversepeak',tooltip='в часы пик в направлении, обратном пиковому',comma=true,
legend='в будни днём (либо в часы пик) в направлении, обратном пиковому',num=8}),
['we']=icon_fun({icon='weekendsonly',tooltip='в выходные',num=9}),
['ln']=icon_fun({icon='nightsonly',tooltip='ночью',ignore=true,num=10}),
['we+ln']=icon_fun({icon='nightsweekends',tooltip='ночью и в выходные',legend='ночью и в выходные (и, возможно, вечером)',num=11}),
['-']=icon_fun({icon='closed',tooltip='нет движения поездов',num=12}),
-- файлы для сочетаний времён есть только досюда, далее используются те же файлы повторно
['rh(some peak)']=icon_fun({icon='rushpeak',tooltip='часть рейсов в часы пик в пиковом направлении',ignore=true}),
['rh(2)+md+ev+we+ln']=icon_fun({icon='alltimes',tooltip='круглосуточно (в часы пик большинство поездов)',alltimes=true}),
['rh+md+ev+we+ln(2)']=icon_fun({icon='allexceptnights',tooltip='круглосуточно, кроме ночи рабочих дней',comma=true}),
['rh+ev+we']=icon_fun({icon='allexceptnights',tooltip='в часы пик, вечером и в выходные'}),
['rh+we']=icon_fun({icon='allexceptnights',tooltip='в часы пик и в выходные'}),
['rh+md(not peak)+ev+we+ln']=icon_fun({icon='alltimes',tooltip='круглосуточно, кроме будней (не в час пик) в пиковом направлении',comma=true,alltimes=true}),
['rh+md+ev+ln']=icon_fun({icon='nightsweekdays',tooltip='в будни круглосуточно и в выходные ночью'}),
['rh+md+ev(1)']=icon_fun({icon='weekdaysonly',tooltip='в будни днём и вечером до 23:00'}),
['rh+md']=icon_fun({icon='weekdaysonly',tooltip='в будни днём'}),
['rh+md(peak)']=icon_fun({icon='weekdaysonly',tooltip='в будни днём (в часы пик в обе стороны, в другое время в пиковом направлении)'}),
['ev+we+ln']=icon_fun({icon='nightsweekends',tooltip='вечером, ночью и в выходные'}),
['rh(1)']=icon_fun({icon='rushonly',tooltip='часть рейсов в часы пик'}),
['rh(peak)+md(peak)']=icon_fun({icon='rushpeak',tooltip='в будни днём в пиковом направлении'}),
['rh(peak)+ln']=icon_fun({icon='rushpeak',tooltip='в часы пик в пиковом направлении, а также ночью'}),
['rh(not peak)+md(not peak)+ev+we+ln']=icon_fun({icon='allexceptrush',tooltip='круглосуточно, кроме будней днём в пиковом направлении',comma=true,alltimes=true}),
['rh(not peak)+md+ev+we']=icon_fun({icon='allexceptrush',tooltip='круглосуточно, кроме часов пик в пиковом направлении и ночи',comma=true}),
['md+ev+we']=icon_fun({icon='allexceptrush',tooltip='круглосуточно, кроме часов пик и ночи',comma=true}),
['rh(some peak)+ln']=icon_fun({icon='nightsonly',tooltip='ночью, а также часть рейсов в часы пик в пиковом направлении',ignore=true}),
['we+ln(2)']=icon_fun({icon='weekendsonly',tooltip='в выходные, включая ночь',comma=true}),
['we(1)']=icon_fun({icon='weekendsonly',tooltip='в выходные летом',ignore=true}),
['ev+we']=icon_fun({icon='nightsweekends',tooltip='вечером и в выходные'}),
['md+ev']=icon_fun({icon='weekdaysonly',tooltip='в будни днём, кроме часов пик, и вечером'}),
['md+ev(1)']=icon_fun({icon='weekdaysonly',tooltip='в будни днём, кроме часов пик, и вечером до 23:00'}),
['rh(some peak)+ev+we']=icon_fun({icon='nightsweekends',tooltip='вечером и в выходные, а также часть рейсов в часы пик в пиковом направлении'}),
['md']=icon_fun({icon='weekdaysonly',tooltip='в будни днём, кроме часов пик',comma=true}),
['rh(some peak)+we']=icon_fun({icon='weekendsonly',tooltip='в выходные, а также часть рейсов в часы пик в пиковом направлении'}),
['rh(not peak)+md(not peak)+ev+we']=icon_fun({icon='allexceptrush',tooltip='круглосуточно, кроме будней днём в пиковом направлении и ночи',comma=true}),
['rh(not peak)+md(not peak)']=icon_fun({icon='rushreversepeak',tooltip='в будни днём в направлении, обратном пиковому',comma=true}),
}
local subperiods = {
{period='rh',subperiod='peak'},
{period='rh',subperiod='not peak'},
{period='rh',subperiod='some peak'},
{period='rh',subperiod='1'},
{period='rh',subperiod='2'},
{period='md',subperiod='peak'},
{period='md',subperiod='not peak'},
{period='ev',subperiod=''},
{period='we',subperiod=''},
{period='ln',subperiod=''},
{period='ev',subperiod='1'},
{period='we',subperiod='1'},
{period='ln',subperiod='1'},
}
local lines = {
['линия Восьмой авеню, Ай-эн-ди']={color='2850ad',link='[[Линия Восьмой авеню, Ай-эн-ди|линии Восьмой авеню]]'},
['линия Нассо-стрит, Би-эм-ти']={color='996633',link='[[Линия Нассо-стрит, Би-эм-ти|линии Нассо-стрит]]'},
['линия Франклин-авеню, Би-эм-ти']={color='808183',shuttle=true},
['челнок 42-й улицы, Ай-ар-ти']={color='808183',shuttle=true},
['линия Канарси, Би-эм-ти']={color='a7a9ac',link='[[Линия Канарси, Би-эм-ти|линии Канарси]]'},
['линия Лексингтон-авеню, Ай-ар-ти']={color='00933c',link='[[Линия Лексингтон-авеню, Ай-ар-ти|линии Лексингтон-авеню]]'},
['линия Кросстаун, Ай-эн-ди']={color='6cbe45',link='[[Линия Кросстаун, Ай-эн-ди|линии Кросстаун]]'},
['линия Шестой авеню, Ай-эн-ди']={color='ff6319',link='[[Линия Шестой авеню, Ай-эн-ди|линии Шестой авеню]]'},
['линия Флашинг, Ай-ар-ти']={color='b933ad',link='[[Линия Флашинг, Ай-ар-ти|линии Флашинг]]'},
['линия Бродвея и Седьмой авеню, Ай-ар-ти']={color='ee352e',link='[[Линия Бродвея и Седьмой авеню, Ай-ар-ти|линии Бродвея и Седьмой авеню]]'},
['линия Бродвея, Би-эм-ти']={color='fccc0a',link='[[Линия Бродвея, Би-эм-ти|линии Бродвея]]'},
-- ['линия Второй авеню, Ай-эн-ди']={color='00add0',link='[[Линия Второй авеню, Ай-эн-ди|линии Второй авеню]]'}, -- на будущее
}
local colors = {
['2850ad']={text='синим'},
['996633']={text='коричневым'},
['808183']={text='тёмно-серым'},
['a7a9ac']={text='светло-серым'},
['00933c']={text='зелёным'},
['6cbe45']={text='салатовым'},
['ff6319']={text='оранжевым'},
['b933ad']={text='фиолетовым'},
['ee352e']={text='красным'},
['fccc0a']={text='жёлтым'},
['00add0']={text='бирюзовым'},
}
local alts = {
{number=nil,
text='',
refname='',
link='',
title=''
}, -- эта запись должна оставаться в таблице, когда нет других записей
}
-- global functions
function p.test(frame)
param=getArgs(frame)[1]
s=''
for i=1,param do
s=s..' '
end
return string.len(s)
end
function p.const(frame)
param=getArgs(frame)[1]
return const(param,frame)
end
function p.station_lines(frame)
local aa=getArgs(frame)
station=aa[1]
color=aa[2]
rtn=''
for n,x in pairs(station_parts(station)) do
if rtn~='' then
rtn=rtn..'<br>'
end
rtn=rtn..line(x,color)
end
return rtn
end
function p.station_cats(frame)
local aa=getArgs(frame)
local station=aa[1]
local param=aa[2]
if param=='former' then
return ''
end
local rtn=''
local parts=station_parts(station)
local pref='\r\n'
if frame:preprocess('{{NAMESPACE}}')~='' then
pref=pref..'* [[:'
else
pref=pref..'[['
end
for n,x in pairs(parts) do
local tmp=line_netto(x)
local pos=string.find(tmp,' ',1,true)
if string.sub(tmp,1,2)=="л" then
rtn=rtn..pref..'Категория:Станции линии '
elseif string.sub(tmp,1,2)=="ч" then
rtn=rtn..pref..'Категория:Станции челнока '
else
pos=0
end
if pos>0 then
rtn=rtn..string.sub(tmp,pos+1,string.len(tmp))..']]'
end
end
if param=='future' then
return rtn
end
for n,x in pairs(stations) do
for nn,xx in pairs(parts) do
if x.station==xx then
if x.orig then
tmp=x.orig
else
tmp=x.opened
end
if tmp~='' then
tmp=last4(tmp)
rtn=rtn..pref..'Категория:Станции метрополитена, построенные в '..tmp..' году]]'
rtn=rtn..pref..'Категория:Здания и сооружения, построенные в '..tmp..' году в США]]'
rtn=rtn..pref..'Категория:'..tmp..' год в Нью-Йорке]]'
end
break
end
end
end
for n,x in pairs(multiline_stations) do
if x.full==station then
if x.cross then
rtn=rtn..pref..'Категория:Кросс-платформенные пересадки Нью-Йоркского метрополитена]]'
end
break
end
end
return rtn
end
function last4(tmp)
return string.sub(tmp,string.len(tmp)-3,string.len(tmp))
end
function p.complex_lines(frame)
local aa=getArgs(frame)
complex=aa[1]
color=aa[2]
a=complex_lines(complex,color)
rtn=''
for n0,x0 in pairs(a) do
if rtn~='' then
rtn=rtn..'<br>'
end
rtn=rtn..x0
end
return rtn
end
function p.station_next(frame)
local aa=getArgs(frame)
station=aa[1]
acc=aa[2]=='acc'
local tw=twins[station]
if tw then
return '<b>'..tw.comment1..':</b><br>'..next_station_list(tw.station1,true,acc,false)..'<hr>'..next_station_list(tw.station1,false,acc,false)..
'<hr><b>'..tw.comment2..':</b><br>'..next_station_list(tw.station2,true,acc,false)..'<hr>'..next_station_list(tw.station2,false,acc,false)
end
return next_station_list(station,true,acc,false)..'<hr>'..next_station_list(station,false,acc,false)
end
function p.station_next_ns(frame)
local aa=getArgs(frame)
station=aa[1]
acc=aa[2]=='acc'
north=aa[3]=='n'
local tw=twins[station]
if tw then
return '<b>'..tw.comment1..':</b><br>'..next_station_list(tw.station1,north,acc,false)..
'<hr><b>'..tw.comment2..':</b><br>'..next_station_list(tw.station2,north,acc,false)
end
return next_station_list(station,north,acc,false)
end
function p.station_bkg(frame)
station=getArgs(frame)[1]
arr={}
for n,x in pairs(station_parts(station)) do
arr=station_list_once(arr,x)
end
return arr_text(arr,'bkg')
end
function p.station_letters(frame)
station=getArgs(frame)[1]
t=arr_text(complex_sum(station),'letters')
if t~='' then
return t
end
return station_list_full(station,'letters')
end
function p.station_bullets(frame)
station=getArgs(frame)[1]
t=arr_text(complex_sum(station),'bullets')
if t~='' then
return t
end
t=station_list_full(station,'bullets')
if t~='' then
return t
end
return nostation
end
function p.station_letters_L(frame)
local aa=getArgs(frame)
station=aa[1]
text=aa[2]
if station=='' then
return ''
end
t=arr_text(complex_sum(station),'letters')
if t~='' then
rtn=netto(station,'text')..' ('..t..')'
else
rtn=netto(station,'text')..' ('..station_list_full(station,'letters')..')'
end
if text then
return rtn
else
return '[['..station..'|'..rtn..']]'
end
end
function p.station_full(frame)
station=getArgs(frame)[1]
local tw=twins[station]
if tw then
return tw.comment1..': '..station_list_full(tw.station1,'full')..'<br>'..tw.comment2..': '..station_list_full(tw.station2,'full')
end
local s=station_list_full(station,'full')
if s=='' then
return nostation
end
if not alt_exist() then
return s
end
alt_on=true
for nnn,xxx in pairs(alts) do
xxx.relevant=false
end
t=station_list_full(station,'full')
if t=='' then
t='<b>станция закрыта</b>'
end
if t~=s then
return s..alt_text('all','','<br><small><i>',':</i></small>','<br>'..t,frame)
else
return s
end
end
function p.SM(frame)
local aa=getArgs(frame)
local station=aa[1]
local tail=aa[2]
local param=aa[3]
local gray=aa[4]
local label=aa[5]
if tail==nil then
tail=''
end
local rtn,typeO,staname,staname2,en,years
if param=='former' then
rtn='|black'
for n,x in pairs(stations_former) do
if x.station==station then
if x.station2 then
rtn=rtn..'|black|white|black|black'
staname2=netto(x.station2,'text')
end
if x.type=='o' then
typeO=true
end
en=x.en
years=last4(x.opened)..'—'..last4(x.closed)
end
end
else
rtn=station_list_full(station,'colors')
for n0,x0 in pairs(station_parts(station)) do
csta=x0
for n,x in pairs(stations) do
if x.station==csta then
if x.type=='o' then
typeO=true
end
if param=='reincarn' and x.old~='-' then
staname=x.old
if x.oldtype=='o' then
typeO=true
end
elseif label then
else
label=x.br
end
years=last4(x.opened)
end
end
end
end
if typeO then
rtn=rtn..'|type=O'
if gray then
rtn=rtn..'_lightgrey'
end
else
if gray then
rtn=rtn..'|type=_lightgrey'
end
end
if staname==nil then
staname=netto(station,'text')
end
if staname2 then
staname=staname..' — '..staname2
station=staname..' ('..line_netto(station)..')'
end
local page=mw.title.new(station)
if not page.exists then
if en then
station='en:'..en
else
station=''
end
end
if label then
label='{{line-height|80%|'..label..'}}'
else
label=staname
end
rtn=rtn..'|link='..station..'|label='..label..'|text='..staname..' ('..years..')'..tail
return frame:preprocess('{{SM smart'..rtn..'}}')
end
function p.complex_prose(frame)
complex=getArgs(frame)[1]
a=complex_lines(complex,color)
rtn=''
local r=''
for n0,x0 in pairs(a) do
if rtn~='' then
rtn=rtn..',\r\n'
end
rtn=rtn..'* '..x0
end
arr=complex_sum(complex)
list={}
for n,x in pairs(routes_sorted()) do
for n0,x0 in pairs(arr) do
if x.id==x0.route then
periods=normalize(x0.periods,false)
if list[periods] then
r1=list[periods].routes..', '
k=list[periods].key
else
r1=''
k=x.label
end
if icons[periods] then
title=icons[periods].tooltip
else
title=noperiods
end
list[periods]={title=title,routes=r1..x('bold',true),key=k}
end
end
end
list0={}
cou=0
for n0,x0 in pairs(list) do
table.insert(list0, {routes=x0.routes,title=x0.title,key=x0.key})
cou=cou+1
end
for n00,x00 in pairs(station_complexes) do
if r=='' and x00.article==complex then
if alt_ok(x00) then
for n0,x0 in pairs(stations) do
if x0.station==x00.station then
r=rider(x0,frame,'complex text')
end
end
end
end
end
if cou==1 then
for n0,x0 in pairs(list0) do
rtn0=x0.routes
end
return 'В пересадочный узел входят станции следующих линий:\r\n'..rtn..'.\r\nНа станциях пересадочного узла круглосуточно останавливаются маршруты: '..rtn0..'.'..r
else
table.sort(list0, function(a,b) return a.key<b.key end)
rtn0=''
for n0,x0 in pairs(list0) do
if rtn0~='' then
rtn0=rtn0..',\r\n'
end
rtn0=rtn0..'* '..x0.routes..' ('..x0.title..')'
end
return 'В пересадочный узел входят станции следующих линий:\r\n'..rtn..'.\r\nНа станциях пересадочного узла останавливаются маршруты:\r\n'..rtn0..'.'..r
end
end
function p.station_prose(frame)
local aa=getArgs(frame)
station=aa[1]
level=aa[2]
if level=='' then
level=nil
end
local tw=twins[station]
if tw then
return '* '..station_prose(tw.station1,tw.comment1,frame)..'\r\n* '..station_prose(tw.station2,tw.comment2,frame)
end
return station_prose(station,level,frame)
end
function station_prose(station,level,frame)
local rtn=''
local r=''
typ=nil
subt=nil
for n0,x0 in pairs(station_parts(station)) do
csta=x0
for nn,xx in pairs(stations) do
if xx.station==csta then
typ=xx.type
subt=xx.subtype
r=rider(xx,frame,'station text')
end
end
end
if subt=='split' then
tmp=station_list_full(station,'prose skip split',nil,nil,'skip')
elseif subt=='under' then
tmp=station_list_full(station,'prose skip under',nil,nil,'skip')
else
tmp=station_list_full(station,'prose skip',nil,nil,'skip')
end
if tmp~='' then
rtn=tmp..'.'
else
if typ=='x' and subt~='suppress' and subt~='bumper' then
if subt=='tt' then
tmp=station_list_full(station,'prose tt',nil,nil,'exp')
elseif subt=='bidi' then
tmp=station_list_full(station,'prose exp 1',nil,nil,'exp')
else
tmp=station_list_full(station,'prose exp 2',nil,nil,'exp')
end
if tmp~='' then
tmp=tmp..'. '..station_list_full(station,'prose lcl',nil,nil,'lcl')..'.'
end
elseif subt=='bumper' then
tmp=tmp..'Оба пути заканчиваются тупиками: поезд приходит на любой из путей и отправляется обратно.'
end
if tmp~='' then
rtn=tmp
end
end
tmp=station_list_full(station,'prose',nil,nil,nil,level)
if tmp~='' and rtn~='' then
return tmp..'. '..rtn..r
elseif tmp~='' then
return tmp..'.'..r
elseif rtn~='' then
return rtn..r
else
return nostation
end
end
function p.station_netto_T(frame)
station=getArgs(frame)[1]
return netto(station,'text')
end
function p.station_netto_L(frame)
station=getArgs(frame)[1]
return netto(station,'link')
end
function p.station_descr(frame)
article=getArgs(frame)[1]
arr=complex_sum(article)
local t=arr_text(arr,'letters')
local b=''
if t~='' then
b=complex_csv(article,'boro plain',frame)
return "«"..netto(article,'link')..'» — пересадочный узел Нью-Йоркского метрополитена'..b..', обслуживаемый маршрутами <span class="nowrap">'..t..'.</span>'
end
for n,x in pairs(station_parts(article)) do
arr=station_list_once(arr,x)
end
if arr_text(arr,'count letters')==1 then
m='маршрутом'
else
m='маршрутами'
end
b=station_csv(article,'boro plain',frame)
if b then
return "«"..netto(article,'link')..'» — станция Нью-Йоркского метрополитена'..b..', обслуживаемая '..m..' <span class="nowrap">'..arr_text(arr,'letters')..'.</span>'
else
return nostation
end
end
function p.route_prose(frame)
route=getArgs(frame)[1]
plural=getArgs(frame)[2]=="plural"
local rtn="На картах, станциях, вагонах и т. д. "
if plural then
rtn=rtn.."они обозначаются "
else
rtn=rtn.."он обозначается "
end
local c=routes[route].color
rtn=rtn..colors[c].text.." цветом"
for n,x in pairs(lines) do
if x.color==c then
if plural then
if x.shuttle then
rtn=rtn..", поскольку являются [[S (маршрут метро, Нью-Йорк)|челночными маршрутами]]"
else
rtn=rtn..", поскольку проходят по "..x.link
end
else
if x.shuttle then
rtn=rtn..", поскольку является [[S (маршрут метро, Нью-Йорк)|челночным маршрутом]]"
else
rtn=rtn..", поскольку проходит по "..x.link
end
end
break
end
end
rtn=rtn.."."
return rtn
end
function p.route_periods(frame)
route=getArgs(frame)[1]
param=getArgs(frame)[2]
if param=='future' then
future_on=true
end
return periods(route,true)
end
function p.route_terminals(frame)
local aa=getArgs(frame)
route=aa[1]
param=aa[2]
if param=='future' then
future_on=true
end
total_periods=periods(route,true)
arrarr_n={}
arrarr_s={}
fill_terminals(route,arrarr_n,arrarr_s)
return text_terminals(arrarr_n,total_periods,param=='small')..'<hr>'..text_terminals(arrarr_s,total_periods,param=='small')
end
function p.station_terminal(frame)
local aa=getArgs(frame)
station=aa[1]
north=aa[2]=='n'
when=aa[3]
plain=aa[4]
arr={}
for n,x in pairs(station_parts(station)) do
arr=station_list_once(arr,x)
multiline=x~=station
end
arrarr_n={}
arrarr_s={}
for n,x in pairs(arr) do
fill_terminals(x.route,arrarr_n,arrarr_s,station,multiline)
end
if north then
if arrarr_n[station] then
arr=arrarr_n[station].arr
else
arr={}
end
else
if arrarr_s[station] then
arr=arrarr_s[station].arr
else
arr={}
end
end
if plain=='letters' or when=='letters' then
if when=='when' then
return arr_text(arr,'when')
else
return arr_text(arr,'letters')
end
elseif plain=='plain' or when=='plain' then
if when=='when' then
return arr_text(arr,'prose semishort plain')
else
return arr_text(arr,'prose short plain')
end
else
if when=='when' then
return arr_text(arr,'prose semishort')
else
return arr_text(arr,'prose short')
end
end
end
function p.route_count_stations(frame)
local aa=getArgs(frame)
route=aa[1]
param=aa[2]
if param=='future' then
future_on=true
end
total_periods=periods(route,false)
arr={}
for n0,x0 in pairs(stations_all()) do
for n,x in pairs(routes_periods) do
if x.segment==x0.segment and x.route==route then
if alt_ok(x) then
comment=howstops(x.how,x.dir,x0.type,x.period)
if comment then
--if comment=='some peak' or comment=='1' then
if comment=='1' or comment=='2' then
group=x.period..'('..comment..')'
else
group=x.period
end
if arr[group] then
arr[group].quantity=arr[group].quantity+1
else
arr[group]={group=group,quantity=1}
end
end
end
end
end
end
--if arr['rh']~=nil and arr['rh(1)']~=nil then
-- arr['rh(1)'].quantity=arr['rh(1)'].quantity+arr['rh'].quantity
--end
if arr['ev']~=nil and arr['ev(1)']~=nil then
arr['ev(1)'].quantity=arr['ev(1)'].quantity+arr['ev'].quantity
end
if arr['we']~=nil and arr['we(1)']~=nil then
arr['we(1)'].quantity=arr['we(1)'].quantity+arr['we'].quantity
end
if arr['ln']~=nil and arr['ln(1)']~=nil then
arr['ln(1)'].quantity=arr['ln(1)'].quantity+arr['ln'].quantity
end
if arr['ev']~=nil and arr['ev(2)']~=nil then
arr['ev(2)'].quantity=arr['ev(2)'].quantity+arr['ev'].quantity
end
if arr['we']~=nil and arr['we(2)']~=nil then
arr['we(2)'].quantity=arr['we(2)'].quantity+arr['we'].quantity
end
if arr['ln']~=nil and arr['ln(2)']~=nil then
arr['ln(2)'].quantity=arr['ln(2)'].quantity+arr['ln'].quantity
end
arr0={}
for n,x in pairs(arr) do
if arr0[x.quantity] then
arr0[x.quantity].group=arr0[x.quantity].group..'+'..x.group
else
arr0[x.quantity]={group=x.group,quantity=x.quantity}
end
end
arr={}
for n,x in pairs(arr0) do
table.insert(arr, {group=x.group,quantity=x.quantity})
end
table.sort(arr, function(a,b) return a.quantity<b.quantity end)
rtn=''
for n,x in pairs(arr) do
if rtn~='' then
rtn=rtn..'<br>'
end
periods=normalize(x.group,false)
x0=icons[periods]
if x0==nil then
rtn=rtn..x.quantity..' (нет индикатора: '..x.group..')'..noperiods
elseif x0.tooltip==total_periods then
rtn=rtn..x.quantity
else
rtn=rtn..x.quantity..' ('..x0.tooltip..')'
end
end
return rtn
end
function p.complex_next(frame)
local aa=getArgs(frame)
complex=aa[1]
acc=aa[2]=='acc'
rtn=''
rtn=rtn..'{|class="standard" style="'..whiteback..'"\r\n'
rtn=rtn..'!Предыдущая станция\r\n!Линия<hr>Название станции\r\n!Следующая станция\r\n'
for n,x in pairs(station_complexes) do
station=x.station
if x.article==complex and x.section~='' then
if alt_ok(x) then
rtn=rtn..'|- align=center\r\n|'..next_station_list(station,true,acc,true)..'\r\n|\r\n'
rtn0=''
for n0,x0 in pairs(station_parts(station)) do
if rtn0~='' then
rtn0=rtn0..'<br>'
end
rtn0=rtn0..line(x0)
end
rtn=rtn..'<b>'..rtn0..'</b>\r\n<br>\r\n'..netto(station,'text')..'\r\n|'..next_station_list(station,false,acc,true)..'\r\n'
end
end
end
rtn=rtn..'|}\r\n'
return rtn
end
function p.segment_table(frame)
local aa=getArgs(frame)
local seg=aa[1]
local param=aa[2]
local param2=aa[3]
local param3=aa[4]
local rtn=''
local sta_table
if param=='future' then
sta_table=stations_future
future_on=true
elseif param=='former' then
sta_table=stations_former
else
sta_table=stations
end
for n,x in pairs(sta_table) do
if x.segment==seg then
if (param~='reincarn' and param~='reincarn back') or x.old~='-' then
if param=='reincarn back' then
rtn=segment_row(x,'reincarn',param2,param3,frame)..rtn
else
rtn=rtn..segment_row(x,param,param2,param3,frame)
end
end
end
end
if param=='former' and rtn=='' then
rtn='|-\r\n|colspan=7 align=center style="'..grayback..'"|<i>('..seg..')</i>\r\n'
end
return rtn
end
function segment_row(x,param,param2,param3,frame)
local span
if param=='2' then
span=8
else
span=7
end
local gray=param=='future' or param=='former'
local milestone_style='padding-left:2em;padding-right:2em;'
if gray then
milestone_style=milestone_style..grayback
end
local rtn=''
if x.above then
rtn=rtn..'|-\r\n|colspan='..span..' align=center style="'..milestone_style..'"|<b>'..ita1(gray)..x.above..ita2(gray)..'</b>\r\n'
end
local sta=x.station
local full=from_part(sta,true)
local struc
if param=='future' then
if x.struc then
struc=x.struc
else
struc='подземная'
end
elseif param=='former' then
if x.struc then
struc=x.struc
else
struc='эстакадная'
end
else
struc=key_csv(x.c_key,'struc')
end
local a1,a2,a3
if param~='2' then
excludefound=false
if full=='' then
a1=''
a2=station_transfers(sta,'full small',nil,frame,param)
if gray then
a3=x.conn
else
a3=station_connections(sta)
end
else
a2=station_transfers(full,'full small',nil,frame,param)
if gray then
a3=x.conn
else
a3=station_connections(full)
end
if param=='1' then
if a3~='' then
a3=a3..'<br>'
end
a3=a3..'<i><small>На этой станции даны единым списком маршруты обеих линий, проходящих через неё</small></i>'
a1=station_list_full(full,'full')
else
arr={}
for nn,xx in pairs(multiline_stations) do
if full==xx.full and xx.part~=sta then
arr=station_list_once(arr,xx.part)
end
end
a1=arr_text(arr,'full small')
end
end
local link
if param=='reincarn' then
link='[['
if x.oldlink then
link=link..x.oldlink
else
link=link..sta
end
link=link..'|'
if x.old then
link=link..x.old
else
link=link..netto(sta,'text')
end
link=link..']]'
else
if x.br then
link='[['..sta..'|'..x.br..']]'
else
link=netto(sta,'link')
end
if x.info then
link=link..frame:preprocess('<ref>'..x.info..'</ref>')
end
end
local en=x.en
if en then
local page=mw.title.new(sta)
if not page.exists then
link=link..'<sup style="font-style:normal;">[[[:en:'..en..'|en]]]</sup>'
end
end
if x.spur=='sw' or x.spur=='se' then
rtn=rtn..stub_spur(x.spur,'Станция '..link..' находилась на ответвлении',true)
end
if param2~='reincarn' then
if x.spur_noreincarn=='sw' or x.spur_noreincarn=='se' then
rtn=rtn..stub_spur(x.spur_noreincarn,'Станция '..link..' находилась на ответвлении',true)
end
end
if x.above_stub~=nil and param~='reincarn' then
rtn=rtn..stub_spur(x.above_stub,x.above_stub_text,false)
end
rtn=rtn..'|-'
local style=''
if gray then
style=style..grayback
end
if x.spur=='nw' or x.spur=='ne' then
style=style..bor('left')..bor('right')..bor('top')
elseif x.spur=='sw' or x.spur=='se' then
style=style..bor('left')..bor('right')..bor('bottom')
end
if param2~='reincarn' then
if x.spur_noreincarn=='nw' or x.spur_noreincarn=='ne' then
style=style..bor('left')..bor('right')..bor('top')
elseif x.spur_noreincarn=='sw' or x.spur_noreincarn=='se' then
style=style..bor('left')..bor('right')..bor('bottom')
end
end
if style~='' then
rtn=rtn..' style="'..style..'"'
end
if param2~=nil and (excludefound or param=='0') then
rtn=rtn..' style="'..bor('top')..bor('bottom')..bor(param2)
if param3 then
rtn=rtn..'height:'..(param3*20)..'px;'
end
rtn=rtn..'"\r\n|nowrap|'
else
rtn=rtn..'\r\n|'
end
rtn=rtn..ita1(gray,param=='future',param=='former',x.saved)
rtn=rtn..link
if x.station2 then
rtn=rtn..' [[Файл:U+21C3.svg|x18px|link=]] [[Файл:U+21BE.svg|x18px|link=]] '..netto(x.station2,'link')
end
rtn=rtn..ita2(gray)..'\r\n|'
if param=='former' or param=='reincarn' then
else
rtn=rtn..acc_cell(x.acc)
end
rtn=rtn..'\r\n|'..ita1(gray)..struc..ita2(gray)..'\r\n|'..ita1(gray)
if x.type=='o' or x.other_type=='o' or (x.oldtype=='o' and param=='reincarn') then
rtn=rtn..'лок.'
else
rtn=rtn..'<b>все</b>'
end
if x.note then
rtn=rtn..' '..x.note
end
rtn=rtn..ita2(gray)..'\r\n'
if param2~=nil and (excludefound or param=='0') then
rtn=rtn..'|nowrap'
end
rtn=rtn..'|'..ita1(gray)
if x.orig then
rtn=rtn..x.orig..frame:preprocess('<ref name="date '..x.opened..'">В составе метро с '..x.opened..'.</ref>')
else
rtn=rtn..x.opened
end
rtn=rtn..ita2(gray)..'\r\n'
if param=='1' then
rtn=rtn..'|colspan=2|\r\n'..inner_table(a1,a2,a3)
else
if param=='former' then
rtn=rtn..'|'..ita1(gray)..x.closed..ita2(gray)..'\r\n'
elseif x.future then
rtn=rtn..'|\r\n'
else
rtn=rtn..'|'..station_list_full(sta,'full')..'\r\n'
end
if param~='0' then
if param=='former' or param=='reincarn' then
local tt=''
if x.station2 then
tt=tt..frame:preprocess(
'<ref name="split">Платформы разных направлений располагались на параллельных улицах и представляли собой отдельные станции.</ref>')
end
if x.transfer then
if tt~='' then
tt=tt..'<br>'
end
tt=tt..frame:preprocess(x.transfer)
end
rtn=rtn..'|nowrap| '..ita1(gray or param=='reincarn')..tt..ita2(gray or param=='reincarn')..'\r\n'
else
rtn=rtn..'|\r\n'..inner_table(a1,a2,a3)
end
else
rtn=rtn..'|\r\n'..tab..'\r\n|nowrap|<i><small>Все станции в этой рамке<br>связаны пересадкой</small></i>\r\n|}\r\n'
end
end
if x.spur=='nw' or x.spur=='ne' then
rtn=rtn..stub_spur(x.spur,'Станция '..link..' находилась на ответвлении',true)
end
if param2~='reincarn' then
if x.spur_noreincarn=='nw' or x.spur_noreincarn=='ne' then
rtn=rtn..stub_spur(x.spur_noreincarn,'Станция '..link..' находилась на ответвлении',true)
end
end
if x.below_stub~=nil and param~='reincarn' then
rtn=rtn..stub_spur(x.below_stub,x.below_stub_text,false)
end
else
rtn=rtn..'|-\r\n|'
if x.br then
if full=='' then
rtn=rtn..'[['..sta..'|'..x.br..']]'
else
rtn=rtn..'[['..full..'|'..x.br..']]'
end
else
if full=='' then
rtn=rtn..netto(sta,'link')
else
rtn=rtn..netto(full,'link')
end
end
rtn=rtn..'\r\n|'..acc_cell(x.acc)..'\r\n|'..struc..'\r\n|'
if x.type=='o' or x.other_type=='o' then
rtn=rtn..'лок.\r\n'
else
rtn=rtn..'<b>все</b>\r\n'
end
rtn=rtn..'|'
if x.orig then
rtn=rtn..x.orig..frame:preprocess('<ref name="date '..x.opened..'">В составе метро с '..x.opened..'.</ref>')
else
rtn=rtn..x.opened
end
rtn=rtn..'\r\n|'..station_list_full(sta,'full')..'\r\n'
if full=='' then
rtn=rtn..'|\r\n'
a2=station_transfers(sta,'full small',nil,frame)
a3=station_connections(sta)
else
arr={}
for nn,xx in pairs(multiline_stations) do
if full==xx.full and xx.part~=sta then
arr=station_list_once(arr,xx.part)
rtn=rtn..'|'..station_list_full(xx.part,'full')..'\r\n'
end
end
a2=station_transfers(full,'full small',nil,frame)
a3=station_connections(full)
end
rtn=rtn..'|\r\n'..inner_table('',a2,a3)
end
if x.below then
rtn=rtn..'|-\r\n|colspan='..span..' align=center style="'..milestone_style..'"|<b>'..ita1(gray)..x.below..ita2(gray)..'</b>\r\n'
end
if x.below_key then
for n00,x00 in pairs(stations_former) do
if x00.segment==x.below_key then
rtn=rtn..segment_row(x00,'former',param,'',frame)
end
end
end
if x.below_key_noreincarn~=nil and param~='reincarn' then
for n00,x00 in pairs(stations_former) do
if x00.segment==x.below_key_noreincarn then
rtn=rtn..segment_row(x00,'former',param,'',frame)
end
end
end
return rtn
end
function p.route_table(frame)
local aa=getArgs(frame)
route=aa[1]
route2=aa[2]
forperiod=aa[3]
if route2=='future' then
future_on=true
route2=nil
elseif route2=='' then
route2=nil
end
if forperiod then
return tab..' class="standard" style="line-height:0;'..whiteback..'"\r\n'..build_route(route,route2,'route',frame,nil,forperiod)..'\r\n|}'
else
return tab..' class="standard" style="line-height:0;'..whiteback..'"\r\n'..build_route(route,route2,'route',frame)..'\r\n|}'
end
end
function p.route_regimes(frame)
local aa=getArgs(frame)
route=aa[1]
route2=aa[2]
if route2=='future' then
future_on=true
route2=nil
elseif route2=='' then
route2=nil
end
return tab..' class="standard" style="'..whiteback..'"\r\n'..build_route(route,route2,'regimes',frame)..'\r\n|}'
end
function p.route_table_nav(frame)
local aa=getArgs(frame)
article=aa[1]
arr=complex_sum(article)
if arr_text(arr,'count letters')==0 then
for n,x in pairs(station_parts(article)) do
arr=station_list_once(arr,x)
end
end
rtn=''
letters=arr_text(arr,'check')
for nn,xx in pairs(routes_sorted()) do
if string.find('+'..letters..'+','+'..xx.id..'+',1,true) then
if rtn~='' then
rtn=rtn..'|-\r\n|colspan=2|<hr>\r\n'
end
rtn=rtn..build_route(xx.id,nil,'navtext',frame,article)
end
end
return tab..'\r\n'..rtn..'|}'
end
function p.route_lines(frame)
local aa=getArgs(frame)
route=aa[1]
purpose=aa[2]
if purpose=='' or purpose==nil then
purpose='list'
end
return build_route(route,nil,'lines '..purpose,frame,'')
end
function p.connection_use(frame)
local aa=getArgs(frame)
seg1=aa[1]
seg2=aa[2]
ifno=aa[3]
if seg1=='' or seg1==nil or seg2=='' or seg2==nil then
return 'не заданы два сегмента'..badparams
end
if ifno==nil then
ifno='соединение не используется'
end
return two_segments(seg1,seg2,'','full small',ifno)
end
function p.connection_use_2(frame)
local aa=getArgs(frame)
seg1=aa[1]
seg2=aa[2]
seg3=aa[3]
seg4=aa[4]
ifno1=aa[5]
ifno2=aa[6]
if seg1=='' or seg1==nil or seg2=='' or seg2==nil or seg3=='' or seg3==nil or seg4=='' or seg4==nil then
return 'не заданы два сегмента'..badparams
end
if ifno1==nil then
ifno1='соединение не используется'
end
if ifno2==nil then
ifno2='оба соединения не используются'
end
rtn1=two_segments(seg1,seg2,'','full small',ifno1)
rtn2=two_segments(seg3,seg4,'','full small',ifno1)
if rtn1==ifno1 and rtn2==ifno1 then
return 'и обратно ('..ifno2..')'
else
return '('..rtn1..') и обратно ('..rtn2..')'
end
end
function p.connection_use_color(frame)
local aa=getArgs(frame)
seg1=aa[1]
seg2=aa[2]
if seg1=='' or seg1==nil or seg2=='' or seg2==nil then
return '000000'
end
return two_segments(seg1,seg2,'','color','000000')
end
function p.connection_use_st(frame)
local aa=getArgs(frame)
sta1=aa[1]
sta2=aa[2]
param3=aa[3]
param4=aa[4]
if param3=='when' or param4=='when' then
fmt='when'
elseif param3=='letters' or param4=='letters' then
fmt='letters'
elseif param3=='bullets' or param4=='bullets' then
fmt='bullets'
elseif param3=='bullets all' or param4=='bullets all' then
fmt='bullets all'
elseif param3=='full small' or param4=='full small' then
fmt='full small'
else
fmt=''
end
if param3=='when' then
sta2a=''
else
sta2a=param3
end
seg1=''
seg2=''
seg2a=''
typ1=nil
typ2=nil
typ2a=nil
for n,x in pairs(stations) do
if x.station==sta1 then
seg1=x.segment
typ1=x.type
end
if x.station==sta2 then
seg2=x.segment
typ2=x.type
end
if x.station==sta2a then
seg2a=x.segment
typ2a=x.type
end
end
if seg1=='' or seg1==nil or seg2=='' or seg2==nil then
return 'не заданы два сегмента'..badparams
end
if param3=='x' or param3=='o' then
seg2a=param3
end
if fmt=='when' then
return two_segments(seg1,seg2,seg2a,'prose semishort','регулярного движения нет',true,typ1,typ2,typ2a)
elseif fmt=='letters' or fmt=='bullets' or fmt=='bullets all' or fmt=='full small' then
return two_segments(seg1,seg2,seg2a,fmt,'',true,typ1,typ2,typ2a)
else
return two_segments(seg1,seg2,seg2a,'prose short','регулярного движения нет',true,typ1,typ2,typ2a)
end
end
function p.line_nowrap(frame)
line=tolower(getArgs(frame)[1])
return toupper(line_nowrap(line))
end
function p.line_bullets(frame)
line=tolower(getArgs(frame)[1])
arr=line_routes(line)
if getArgs(frame)[2]==nil then
return '<span class="nowrap">'..arr_text(arr,'large bullets')..'</span>'
else
return '<span class="nowrap">'..arr_text(arr,'bullets')..'</span>'
end
end
function p.line_opened(frame)
local y=''
local o=''
line=tolower(getArgs(frame)[1])
full=getArgs(frame)[2]
for n,x in pairs(stations) do
if line_netto(x.station)==line then
local yy=last4(x.opened)
if y=='' or yy<y then
y=yy
end
if x.orig then
local oo=last4(x.orig)
if o=='' or oo<o then
o=oo
end
end
end
end
if full~=nil and o~='' then
return o..' (в составе метро с '..y..')'
else
return y
end
end
function p.line_aboveground(frame)
local above=false
local below=false
line=tolower(getArgs(frame)[1])
for n,x in pairs(stations) do
if line_netto(x.station)==line then
if key_csv(x.c_key,'struc')=='подземная' then
below=true
else
above=true
end
end
end
if below and above then
return 'есть'
elseif above then
return 'вся линия'
else
return 'нет'
end
end
function p.line_prose(frame)
line=tolower(getArgs(frame)[1])
arr=line_routes(line)
if arr_text(arr,'all alltimes') then
rtn='круглосуточно '..arr_text(arr,'prose by short')..'.'
else
rtn=arr_text(arr,'prose by')..'.'
end
o=lines[line]
if o then
cou=0
arr={}
for n,x in pairs(routes_sorted()) do
if x.color==o.color and x.tooltip==x.id then
cou=cou+1
arr[cou]=x('bold')
end
end
if cou>0 then
rtn=rtn..' Линия считается «[[Список линий Нью-Йоркского метрополитена#Терминология|стволовой]]»: '
if cou==1 then
rtn=rtn..'маршрут '..arr[1]..', проходящий по ней, обозначается '
else
rtn=rtn..'маршруты '
for n=1,cou do
rtn=rtn..arr[n]
if n==cou then
elseif n==cou-1 then
rtn=rtn.." и "
else
rtn=rtn..", "
end
end
rtn=rtn..', проходящие по ней, обозначаются '
end
rtn=rtn..colors[o.color].text..' цветом.'
end
end
return rtn
end
function p.line_count_stations(frame)
line=tolower(getArgs(frame)[1])
sum=0
for n,x in pairs(stations) do
if line_netto(x.station)==line then
sum=sum+1
end
end
return sum
end
function p.line_color(frame)
line=tolower(getArgs(frame)[1])
o=lines[line]
if o then
return o.color
else
return '000000'
end
end
function p.segment_color(frame)
local aa=getArgs(frame)
local seg1=aa[1]
local seg2=aa[2]
local cond=aa[3]
local arr={}
if cond=='segand' or cond=='segandnot' then
local arr1={}
arr1=segment_routes(arr1,seg1)
local arr2={}
arr2=segment_routes(arr2,seg2)
for n0,x0 in pairs(routes) do
local elem1=arr1[x0.id]
local elem2=arr2[x0.id]
local elem=''
if elem1==nil then
elseif elem2==nil then
if cond=='segandnot' then
elem=elem1.periods
end
else
elem1='+'..normalize(elem1.periods)..'+'
elem2='+'..normalize(elem2.periods)..'+'
for nn,xx in pairs({'rh','md','ev','we','ln'}) do
if string.find(elem1,'+'..xx,1,true)~=nil then
local f1=string.find(elem1,'+'..xx..'+',1,true)
local f1_1=string.find(elem1,'+'..xx..'(1)+',1,true)
local f1_2=string.find(elem1,'+'..xx..'(2)+',1,true)
local f1_p=string.find(elem1,'+'..xx..'(peak)+',1,true)
local f1_sp=string.find(elem1,'+'..xx..'(some peak)+',1,true)
local f1_np=string.find(elem1,'+'..xx..'(not peak)+',1,true)
local f2=string.find(elem2,'+'..xx..'+',1,true)
local f2_1=string.find(elem2,'+'..xx..'(1)+',1,true)
local f2_2=string.find(elem2,'+'..xx..'(2)+',1,true)
local f2_p=string.find(elem2,'+'..xx..'(peak)+',1,true)
local f2_sp=string.find(elem2,'+'..xx..'(some peak)+',1,true)
local f2_np=string.find(elem2,'+'..xx..'(not peak)+',1,true)
if cond=='segand' then
if not(
(f1_2 and f2_1) or (f1_1 and f2_2)
or (f1_np and (f2_p or f2_sp))
or (f2_np and (f1_p or f1_sp))
) then elem=elem..'+'..xx end
else
if not(
f2
or (f1_1 and f2_1)
or (f1_2 and f2_2)
or (f1_p and f2_p)
or (f1_sp and f2_sp)
or (f1_np and f2_np)
or (f1_sp and f2_p)
) then elem=elem..'+'..xx end
end
end
end
end
if elem~='' then
arr[x0.id]={route=x0.id,periods=string.sub(elem,2,string.len(elem))}
end
end
else
arr=segment_routes(arr,seg1)
if cond=='segor' then
arr=segment_routes(arr,seg2)
end
end
local rtn=arr_text(arr,'color')
if rtn=='' then
rtn='000000'
end
return rtn
end
function p.segment_route_coef(frame)
local aa=getArgs(frame)
local route1=aa[1]
local route2=routes[route1].second
if route2==nil then
route2=''
end
local seg1=aa[2]
local seg2=aa[3]
local cond=aa[4]
local a1=segment_route_when(seg1,route1,route2)
if seg2 then
local a2=segment_route_when(seg2,route1,route2)
for nn,xx in pairs({'rh','md','ev','we','ln'}) do
if cond=='segor' then
if a1[xx]==nil and a2[xx]~=nil then
a1[xx]=a2[xx]
end
elseif cond=='segand' then
if a1[xx]==nil or a2[xx]==nil then
a1[xx]=nil
elseif (a1[xx]=='1' and a2[xx]=='2') or (a1[xx]=='2' and a2[xx]=='1')
or (a1[xx]=='notpeakonly' and a2[xx]=='peakonly') or (a1[xx]=='notpeakonly' and a2[xx]=='peak+')
or (a2[xx]=='notpeakonly' and a1[xx]=='peakonly') or (a2[xx]=='notpeakonly' and a1[xx]=='peak+') then
a1[xx]=nil
end
elseif cond=='segandnot' then
if a1[xx]==nil or a2[xx]==nil then
elseif a2[xx]=='' or a2[xx]=='peak' or a1[xx]=='' or a1[xx]=='peak' or a2[xx]==a1[xx]
or (a1[xx]=='peak+' and a2[xx]=='peakonly') or (a2[xx]=='peak+' and a1[xx]=='peakonly') then
a1[xx]=nil
end
end
end
end
if a1['md'] then
if a1['ln'] then
return 0
elseif a1['we'] then
return 50
else
return 100
end
else
if a1['rh'] then
return 150
elseif a1['ln'] then
return 200
else
return 255
end
end
end
function segment_route_when(seg,route1,route2)
local a={}
for n,x in pairs(routes_periods) do
if x.segment==seg then
if alt_ok(x) then
if x.route==route1 or x.route==route2 then
if x.dir then
a[x.period]=x.dir
else
a[x.period]=''
end
end
end
end
end
return a
end
function p.segment_dir(frame)
local aa=frame.args --=getArgs(frame)
local seg1=aa[1]
local seg2=aa[2]
local cond=aa[3]
local period=aa[4]
if period==nil then
period=''
end
local dir1=segment_dir(seg1,period)
if cond~='segor' and cond~='segand' and cond~='segandnot' then
return dir2color(dir1)
end
local inuse=false
for nn,xx in pairs(routes) do
local r1=seg_route(seg1,xx.id,period)
local r2=seg_route(seg2,xx.id,period)
if cond=='segor' then
if r1 or r2 then
inuse=true
end
elseif cond=='segand' then
if r1 and r2 then
inuse=true
end
elseif cond=='segandnot' then
if r1 and not r2 then
inuse=true
end
end
end
if not inuse then
return dir2color('no')
end
local dir2=segment_dir(seg2,period)
if cond=='segor' then
if dir1=='2' or dir2=='2' then
return dir2color('2')
elseif dir1=='1' or dir2=='1' then
return dir2color('1')
elseif dir1=='ss' or dir2=='ss' then
return dir2color('ss')
elseif dir1=='sh' and dir2=='sh' then
return dir2color('sh')
else
return dir2color('')
end
elseif cond=='segand' then
if dir1==dir2 then
return dir2color(dir1)
elseif (dir1=='1' and dir2=='2') or (dir2=='1' and dir1=='2') then
return dir2color('1')
elseif (dir1=='ss' and dir2~='') or (dir2=='ss' and dir1~='') then
return dir2color('ss')
elseif dir1=='sh' and dir2=='sh' then
return dir2color('sh')
else
return dir2color('')
end
elseif cond=='segandnot' then
if dir1=='2' and dir2~='2' then
return dir2color('2')
elseif dir1=='1' and (dir2=='ss' or dir2=='') then
return dir2color('1')
elseif dir1=='ss' and dir2=='' then
return dir2color('ss')
elseif dir1=='sh' and dir2~='sh' then
return dir2color('sh')
else
return dir2color('')
end
end
end
function dir2color(dir)
if dir=='2' then
return 'red'
elseif dir=='1' then
return 'pink'
elseif dir=='ss' then
return 'chocolate'
elseif dir=='sh' then
return 'lightseagreen'
elseif dir=='no' then
return 'black'
else
return 'grey'
end
end
function segment_dir(seg,period)
local x1,x2,ss,notsh,inuse
if seg=='SIR' then
return ''
end
for n,x in pairs(routes_periods) do
if x.segment==seg and (period=='' or x.period==period) then
if alt_ok(x) then
inuse=true
if x.how=='x' then
if x.tt then
elseif x.dir==nil then
x2=true
elseif x.dir=='peak' or x.dir=='peak+' or x.dir=='peakonly' then
x1=true
end
elseif x.how then
ss=true
end
if routes[x.route].shuttle==nil and x.shuttle==nil then
notsh=true
end
end
end
end
if inuse==nil then
return 'no'
elseif x2 then
return '2'
elseif x1 then
return '1'
elseif ss then
return 'ss'
elseif notsh==nil then
return 'sh'
else
return ''
end
end
function p.SL(frame)
--local aa=getArgs(frame) -- здесь это почему-то не работает
local aa=frame.args
station=aa[1]
orient=aa[2] -- V or H
track=aa[3] -- 'exp', 'lcl', 'skip' or nil (or 'manual')
route_plus=aa[4]
route_minus=aa[5]
if track=='' then
track=nil
end
if route_plus=='' then
route_plus=nil
end
if route_minus=='' then
route_minus=nil
end
local arr={}
if track~='manual' then
arr=station_list_once(arr,station,nil,nil,track)
end
if route_plus then
for match in (route_plus..', '):gmatch("(.-), ") do -- https://stackoverflow.com/questions/1426954/split-string-in-lua
arr_add(arr,match,'md','')
end
end
m1=nil
m2=nil
if route_minus then
for match in (route_minus..', '):gmatch("(.-), ") do -- https://stackoverflow.com/questions/1426954/split-string-in-lua
if m1==nil then
m1=match
elseif m2==nil then
m2=match
end
end
end
return arr_text(arr,'SL '..orient,m1,m2)
end
function p.station_acc(frame)
station=getArgs(frame)[1]
for n0,x0 in pairs(station_parts(station)) do
csta=x0
for n,x in pairs(stations) do
if x.station==csta then
cacc=x.acc
end
end
end
if cacc then
rtn=accicon
if cacc=='yes' then
return rtn
elseif cacc=='n' then
return rtn..' (только на север)'
elseif cacc=='s' then
return rtn..' (только на юг)'
else
return rtn..' ('..cacc..')'
end
else
return ''
end
end
function p.station_opened(frame)
station=getArgs(frame)[1]
local tw=twins[station]
if tw then
local so1=station_opened(tw.station1)
local so2=station_opened(tw.station2)
if so1==so2 then
return so1
else
return '<b>'..tw.comment1..':</b>'..indent..so1
..'<br><b>'..tw.comment2..':</b>'..indent..so2
end
end
return station_opened(station)
end
function station_opened(station)
for n0,x0 in pairs(station_parts(station)) do
csta=x0
for n,x in pairs(stations) do
if x.station==csta then
if x.orig then
return x.orig..'<br>(в составе метро с '..x.opened..')'
else
return x.opened
end
end
end
end
end
function p.complex_boro(frame)
complex=getArgs(frame)[1]
return complex_csv(complex,'boro',frame)
end
function complex_csv(complex,field,frame)
local rtn=''
local cur
for nn,xx in pairs(station_complexes) do
if xx.article==complex and xx.section~='' then
cur=station_csv(xx.station,field,frame)
if rtn=='' then
rtn=cur
elseif rtn~=cur then
rtn=rtn..', '..cur
end
end
end
return rtn
end
function p.station_csv(frame)
station=getArgs(frame)[1]
field=getArgs(frame)[2]
local tw=twins[station]
if tw then
local so1=station_csv(tw.station1,field,frame)
local so2=station_csv(tw.station2,field,frame)
if so1==so2 then
return so1
else
return '<b>'..tw.comment1..':</b>'..indent..so1
..'<br><b>'..tw.comment2..':</b>'..indent..so2
end
end
return station_csv(station,field,frame)
end
function station_csv(station,field,frame)
for n0,x0 in pairs(station_parts(station)) do
csta=x0
for n,x in pairs(stations) do
if x.station==csta then
return key_csv(x.c_key,field,frame)
end
end
end
end
function key_csv(key,field,frame)
local c=csv[key]
if field=='boro' then
cf=c.boro
if cf=='M' then
return '[[Манхэттен]]'
elseif cf=='Bk' then
return '[[Бруклин]]'
elseif cf=='Q' then
return '[[Куинс]]'
elseif cf=='Bx' then
return '[[Бронкс]]'
end
elseif field=='boro plain' then
cf=c.boro
if cf=='M' then
return ' на Манхэттене'
elseif cf=='Bk' then
return ' в Бруклине'
elseif cf=='Q' then
return ' в Куинсе'
elseif cf=='Bx' then
return ' в Бронксе'
end
elseif field=='struc' then
cf=c.struc
if cf=='At Grade' then
return 'наземная'
elseif cf=='Elevated' or cf=='Viaduct' then
return 'эстакадная'
elseif cf=='Open Cut' then
return 'в выемке'
elseif cf=='Subway' then
return 'подземная'
end
elseif field=='coord' then
return frame:preprocess('{{coord|'..c.lat..'|'..c.lon..'|region:US_type:railwaystation}}')
elseif field=='id' then
return c.id
end
end
function p.former_data(frame)
station=getArgs(frame)[1]
field=getArgs(frame)[2]
for n,x in pairs(stations_former) do
if x.station==station then
if field=='boro' then
cf=x.boro
if cf=='M' then
return '[[Манхэттен]]'
elseif cf=='B' then
return '[[Бруклин]]'
elseif cf=='Q' then
return '[[Куинс]]'
elseif cf=='Bx' then
return '[[Бронкс]]'
end
elseif field=='opened' then
return x.opened
elseif field=='closed' then
return x.closed
elseif field=='struc' then
if x.struc then
return x.struc
else
return 'эстакадная'
end
end
end
end
end
function p.station_eng(frame)
station=getArgs(frame)[1]
period=getArgs(frame)[2]
if period=='future' then
for n,x in pairs(stations_future) do
if x.station==station then
return x.eng
end
end
return ''
elseif period=='former' then
for n,x in pairs(stations_former) do
if x.station==station then
return x.eng
end
end
return ''
end
local tw=twins[station]
if tw then
return tw.eng
end
for n0,x0 in pairs(station_parts(station)) do
csta=x0
for n,x in pairs(stations) do
if x.station==csta then
return x.eng
end
end
end
end
function p.complex_ridership(frame)
article=getArgs(frame)[1]
local tmp
for n00,x00 in pairs(station_complexes) do
if x00.article==article then
if alt_ok(x00) then
csta=x00.station
for n,x in pairs(stations) do
if x.station==csta then
tmp=rider(x,frame,'complex')
if tmp~='ERROR' then
return tmp
end
end
end
end
end
end
return tmp
end
function p.station_ridership(frame)
station=getArgs(frame)[1]
for n0,x0 in pairs(station_parts(station)) do
csta=x0
for n,x in pairs(stations) do
if x.station==csta then
return rider(x,frame,'station')
end
end
end
end
function p.route_descr(frame)
route=getArgs(frame)[1]
return routes[route].descr
end
function p.route_color(frame)
route=getArgs(frame)[1]
return routes[route].color
end
function p.route_schedule(frame)
route=getArgs(frame)[1]
local r=routes[route]
if r then
local rtn=r.schedule
if rtn then
return 'https://new.mta.info/document/'..rtn
else
return ''
end
else
return ''
end
end
function p.station_connections(frame)
station=getArgs(frame)[1]
period=getArgs(frame)[2]
if period=='future' then
for n,x in pairs(stations_future) do
if x.station==station then
return x.conn
end
end
return ''
elseif period=='former' then
for n,x in pairs(stations_former) do
if x.station==station then
return x.transfer
end
end
return ''
end
local tw=twins[station]
if tw then
station=tw.station1
end
sta_ext=station
alt_on=alt_exist()
for n,x in pairs(station_complexes) do
if x.section~='' then
if alt_ok(x) then
if x.station==station then
return '' --для станций, входящих в узел, на уровне станции не показываем ничего
elseif x.article==station then
sta_ext=x.station --если передан узел, для внешних пересадок берём данные из одной из его станций
break
end
end
end
end
local s=station_connections(sta_ext)
local t=''
local found=false
for n,x in pairs(station_complexes) do
if alt_ok(x,true) and x.section=='' then
if x.station==station then
if string.len(x.article)==1 then
for nn,xx in pairs(station_complexes) do
if xx.article==x.article and xx.station~=x.station then
t=t..one_conn(t,xx.station,xx.alt,xx.periods,frame)
end
end
else
t=t..one_conn(t,x.article,x.alt,x.periods,frame)
end
found=true
elseif x.article==station then
t=t..one_conn(t,x.station,x.alt,x.periods,frame)
found=true
end
if found then
break
end
end
end
if s~='' and t~='' then
return s..'<br>'..t
else
return s..t
end
end
function one_conn(t,sta,alt,periods,frame)
local rtn=t
if t~='' then
rtn=rtn..'<br>'
end
rtn=rtn..netto(sta,'link')
if periods==nil then
rtn=rtn..frame:preprocess(metrocard)
end
rtn=rtn..alt_text(alt,'+','<br>(',')','',frame)
if periods then
rtn=rtn..'<sup>'..icons[periods]('icon',8)..'</sup>'
end
return rtn
end
function p.all_stations(frame)
local pics={}
odd=true
for n,x in pairs(getArgs(frame)) do
if odd then
sta=x
else
pics[sta]=x
end
odd=not odd
end
local list={}
for n,x in pairs(stations) do
found=false
sta=x.station
for n0,x0 in pairs(multiline_stations) do
if x.station==x0.part then
found=true
sta=x0.full
end
end
rtn1='| <b>'..netto(sta,'link')..'</b><br>[[английский язык|англ.]] <i>'..x.eng..'</i>\r\n|'..acc_cell(x.acc)..'\r\n'
local arr={}
if found then
rtn2=''
for n0,x0 in pairs(multiline_stations) do
if sta==x0.full then
if rtn2~='' then
rtn2=rtn2..'<br>'
end
rtn2=rtn2..line(x0.part)
for n00,x00 in pairs(stations) do
if x00.station==x0.part then
arr=station_list_once_given(arr,x0.part,nil,nil,nil,x00.segment,x00.type,x00.sep)
end
end
end
end
else
rtn2=line(sta)
arr=station_list_once_given(arr,sta,nil,nil,nil,x.segment,x.type,x.sep)
end
rtn3='| '..arr_text(arr,'full')..'\r\n'
s=station_transfers(sta,'full small',nil,frame,nil,true)
if x.conn then
t=x.conn
else
t=''
end
if s=='' then
if t=='' then
rtn3=rtn3..'| —\r\n'
else
rtn3=rtn3..'| style="text-align:left;" |'..t..'\r\n'
end
else
rtn3=rtn3..'| style="text-align:left;" |\r\n'..inner_table('',s,t)..'\r\n'
end
if x.orig then
rtn3=rtn3..'| '..x.orig..'<br><small><span class="nowrap">(в составе метро</span> <span class="nowrap">с '..x.opened..')</span></small>'
else
rtn3=rtn3..'| '..x.opened
end
rtn3=rtn3..'\r\n| '..rider(x,frame,'list')..'\r\n| '
if pics[sta] then
rtn3=rtn3..pics[sta]..'\r\n'
else
rtn3=rtn3..badparams..'\r\n'
end
pos=string.find(sta,' ',1,true)
if string.find(sta,'-я',1,true)==3 then
key='0'..sta
elseif string.find(sta,'Первая ',1,true)==1 then
key='001-я'..string.sub(sta,pos,string.len(sta))
elseif string.find(sta,'Вторая ',1,true)==1 then
key='002-я'..string.sub(sta,pos,string.len(sta))
elseif string.find(sta,'Третья ',1,true)==1 then
key='003-я'..string.sub(sta,pos,string.len(sta))
elseif string.find(sta,'Четвёртая ',1,true)==1 then
key='004-я'..string.sub(sta,pos,string.len(sta))
elseif string.find(sta,'Пятая ',1,true)==1 then
key='005-я'..string.sub(sta,pos,string.len(sta))
elseif string.find(sta,'Шестая ',1,true)==1 then
key='006-я'..string.sub(sta,pos,string.len(sta))
elseif string.find(sta,'Седьмая ',1,true)==1 then
key='007-я'..string.sub(sta,pos,string.len(sta))
elseif string.find(sta,'Восьмая ',1,true)==1 then
key='008-я'..string.sub(sta,pos,string.len(sta))
elseif string.find(sta,'Девятая ',1,true)==1 then
key='009-я'..string.sub(sta,pos,string.len(sta))
else
key=sta
end
list[sta]={key=key,bkg=arr_text(arr,'bkg'),row=rtn1..'| '..rtn2..'\r\n'..rtn3}
end
list0={}
for n,x in pairs(list) do
table.insert(list0, x)
end
table.sort(list0, function(a,b) return a.key<b.key end)
rtn1=''
rtn2=''
rtn3=''
num=0
part=1
for n,x in pairs(list0) do
num=num+1
delta='|- style="background-color:#'..x.bkg..'"\r\n| <b>'..num..'</b>\r\n| '..x.row
if part==1 then
rtn1=rtn1..delta
if string.len(rtn1)>260000 then
part=2
end
elseif part==2 then
rtn2=rtn2..delta
if string.len(rtn2)>260000 then
part=3
end
else
rtn3=rtn3..delta
end
end
return rtn1..rtn2..rtn3
end
function p.station_prose0(frame)
station=getArgs(frame)[1]
local tw=twins[station]
return station_prose0(station,tw)
end
function station_prose0(station,tw)
local list={}
cou=0
for n,x in pairs(multiline_stations) do
if x.full==station then
list[x.part]=x.part
cou=cou+1
end
end
if cou==0 then
list[station]=station
end
rtn1=''
rtn2='линиях'
num=1
for n0,x0 in pairs(list) do
if tw then
rtn1='<b>«'..netto(station,'text')..'»</b> ([[английский язык|англ.]] <i>'..tw.eng..'</i>) — две станции [[Нью-Йоркский метрополитен|Нью-Йоркского метрополитена]], расположенные на двух ветках '
else
for n,x in pairs(stations) do
if x.station==x0 and rtn1=='' then
rtn1='<b>«'..netto(station,'text')..'»</b> ([[английский язык|англ.]] <i>'..x.eng..'</i>) — станция [[Нью-Йоркский метрополитен|Нью-Йоркского метрополитена]], расположенная на '
end
end
end
if rtn1=='' then
return nostation
end
l=line_netto(x0)
if cou==0 then
return rtn1..line_link(l,'линии ')..'.'
end
rtn2=rtn2..' '..line_link(l,'')
if num==cou then
rtn2=rtn2..'.'
else
rtn2=rtn2..','
end
if num==cou-1 then
rtn2=rtn2..' и'
end
num=num+1
end
return rtn1..rtn2
end
function p.segment_regimes(frame)
local aa=getArgs(frame)
seg=aa[1]
title=aa[2]
exptracks='-пути'
if aa[3] then
exptracks='-путь'
end
exp={}
lcl={}
sks={}
note=false
noteplus=false
for n,x in pairs(routes_periods) do
if x.segment==seg then
if alt_ok(x) then
txt=routes[x.route]('bullet',20)
if x.dir=='1' or x.dir=='2' then
subp=subperiod1(x.period,x.dir)
if subp then
txt=txt..subp
end
end
if x.how=='x' then
if x.dir=='peak' then
exp[x.period]=add2elem(exp[x.period],txt)..markpeak
lcl[x.period]=add2elem(lcl[x.period],txt)..markback
note=true
elseif x.dir=='peak+' then
exp[x.period]=add2elem(exp[x.period],txt)..asterisk
noteplus=true
elseif x.dir=='peakonly' then
exp[x.period]=add2elem(exp[x.period],txt)..markpeak
note=true
elseif x.dir=='notpeakonly' then
exp[x.period]=add2elem(exp[x.period],txt)..markback
note=true
else
exp[x.period]=add2elem(exp[x.period],txt)
end
elseif x.how==nil then
if x.dir=='peak+' then
lcl[x.period]=add2elem(lcl[x.period],txt)..asterisk
noteplus=true
elseif x.dir=='peakonly' then
lcl[x.period]=add2elem(lcl[x.period],txt)..markpeak
note=true
elseif x.dir=='notpeakonly' then
lcl[x.period]=add2elem(lcl[x.period],txt)..markback
note=true
else
lcl[x.period]=add2elem(lcl[x.period],txt)
end
else
if x.dir=='peak' then
sks[x.period]=add2elem(sks[x.period],txt)..markpeak
lcl[x.period]=add2elem(lcl[x.period],txt)..markback
note=true
elseif x.dir=='peak+' then
sks[x.period]=add2elem(sks[x.period],txt)..asterisk
noteplus=true
elseif x.dir=='peakonly' then
sks[x.period]=add2elem(sks[x.period],txt)..markpeak
note=true
elseif x.dir=='notpeakonly' then
sks[x.period]=add2elem(sks[x.period],txt)..markback
note=true
else
sks[x.period]=add2elem(sks[x.period],txt)
end
end
end
end
end
eq1=qq(exp['rh'],exp['md']) and qq(lcl['rh'],lcl['md']) and qq(sks['rh'],sks['md'])
eq2=qq(exp['md'],exp['ev']) and qq(lcl['md'],lcl['ev']) and qq(sks['md'],sks['ev'])
eq3=qq(exp['ev'],exp['we']) and qq(lcl['ev'],lcl['we']) and qq(sks['ev'],sks['we'])
eq4=qq(exp['we'],exp['ln']) and qq(lcl['we'],lcl['ln']) and qq(sks['we'],sks['ln'])
local rtn=tab..' class="standard" style="'..whiteback..'"\r\n|-\r\n!style="line-height:80%;"|'
if title=='auto' then
first=''
last=''
for n,x in pairs(stations) do
if x.segment==seg then
if first=='' then
first=x.station
end
last=x.station
end
end
rtn=rtn..'<small>'..netto(first,'text')
if first~=last then
rtn=rtn..' —<br>'..netto(last,'text')
end
rtn=rtn..'</small>'
elseif title~=nil and title~='' then
rtn=rtn..'<small>'..title..'</small>'
end
rtn=rtn..'\r\n!'..period_captions(eq1,eq2,eq3,eq4)..'\r\n'
if exp.rh~=nil or exp.md~=nil or exp.ev~=nil or exp.we~=nil or exp.ln~=nil then
rtn=rtn..'|-\r\n! Экспресс'..exptracks..'\r\n'..period_cells(eq1,eq2,eq3,eq4,exp,'',true)
else
for n,x in pairs(stations) do
if x.segment==seg and x.type=='o' then
rtn=rtn..'|-\r\n! Экспресс'..exptracks..'\r\n'..period_cells(eq1,eq2,eq3,eq4,exp,'',true)
break
end
end
end
if sks.rh~=nil or sks.md~=nil or sks.ev~=nil or sks.we~=nil or sks.ln~=nil then
rtn=rtn..'|-\r\n! Локальные пути в режиме [[скип-стоп]]\r\n'..period_cells(eq1,eq2,eq3,eq4,sks,'',true)
rtn=rtn..'|-\r\n! Локальные пути со всеми остановками\r\n'..period_cells(eq1,eq2,eq3,eq4,lcl,'',true)
else
rtn=rtn..'|-\r\n! Локальные пути\r\n'..period_cells(eq1,eq2,eq3,eq4,lcl,'',true)
end
if note or noteplus then
rtn=rtn..'|-\r\n|colspan='..(span_count(eq1,eq2,eq3,eq4)+1)..'| <small>'
if note then
rtn=rtn..markpeak..' — в [[Список маршрутов Нью-Йоркского метрополитена#Терминология|пиковом направлении]]; '..markback..' — в обратном пиковому'
end
if noteplus then
if note then
rtn=rtn..';<br>'..asterisk..' — в пиковом направлении, часть рейсов'
else
rtn=rtn..asterisk..' — в [[Список маршрутов Нью-Йоркского метрополитена#Терминология|пиковом направлении]], часть рейсов'
end
end
rtn=rtn..'</small>\r\n'
end
return rtn..'|}'
end
function p.station_expressinuse(frame)
local aa=getArgs(frame)
local station=aa[1]
local ifyes=aa[2]
if ifyes==nil then
ifyes=''
end
local ifno=aa[3]
if ifno==nil then
ifno=''
end
if station=='+' then
return ifyes
end
if station=='-' then
return ifno
end
local seg=''
for n,x in pairs(stations_all()) do
if x.station==station then
seg=x.segment
end
end
if seg=='' then
return ifno..badparams
end
for n,x in pairs(routes_periods) do
if x.how=='x' and x.segment==seg then
return ifyes
end
end
return ifno
end
function p.station_terminalinuse(frame)
local aa=getArgs(frame)
local station=aa[1]
local ifyes=aa[2]
if ifyes==nil then
ifyes=''
end
local ifno=aa[3]
if ifno==nil then
ifno=''
end
if station=='+' then
return ifyes
end
if station=='-' then
return ifno
end
arr={}
for n,x in pairs(station_parts(station)) do
arr=station_list_once(arr,x)
multiline=x~=station
end
if arr==nil then
return ifno..badparams
end
arrarr_n={}
arrarr_s={}
for n,x in pairs(arr) do
fill_terminals(x.route,arrarr_n,arrarr_s,station,multiline)
end
if aa[4]=='n' then
if arrarr_n[station] then
return ifyes
else
return ifno
end
elseif aa[4]=='s' then
if arrarr_s[station] then
return ifyes
else
return ifno
end
else
if arrarr_n[station]~=nil or arrarr_s[station]~=nil then
return ifyes
else
return ifno
end
end
end
function p.station_terminalonly(frame)
local aa=getArgs(frame)
local station=aa[1]
arr={}
for n,x in pairs(station_parts(station)) do
arr=station_list_once(arr,x)
multiline=x~=station
end
if arr==nil then
return ''
end
local a=arr_text(arr,'full')
arrarr_n={}
arrarr_s={}
for n,x in pairs(arr) do
fill_terminals(x.route,arrarr_n,arrarr_s,station,multiline)
end
local n=''
if arrarr_n[station] then
n=arr_text(arrarr_n[station].arr,'full')
end
local s=''
if arrarr_s[station] then
s=arr_text(arrarr_s[station].arr,'full')
end
if a==n then
return 'n'
elseif a==s then
return 's'
else
return ''
end
end
function p.legend(frame)
local icons0={}
for n,x in pairs(icons) do
if x.num then
table.insert(icons0, x)
end
end
table.sort(icons0, function(a,b) return a.num<b.num end)
local rtn=''
for n,x in pairs(icons0) do
rtn=rtn..': [[Файл:NYCS-SSI-'..x.icon..'.svg|link=]] '
if x.legend then
rtn=rtn..x.legend..'\r\n'
else
rtn=rtn..x.tooltip..'\r\n'
end
end
return rtn
end
function p.seg2color(frame)
local aa=getArgs(frame)
local seg1=aa[1]
local seg2=aa[2]
local rtn
local rtn1='000000'
local rtn2='000000'
for n,x in pairs(stations) do
if x.segment==seg1 then
rtn=lines[line_netto(x.station)]
if rtn then
rtn1=rtn.color
end
end
end
if seg2 then
for n,x in pairs(stations) do
if x.segment==seg2 then
rtn=lines[line_netto(x.station)]
if rtn then
rtn2=rtn.color
end
end
end
if rtn1==rtn2 then
return rtn1
else
return '000000'
end
else
return rtn1
end
end
function p.seg_line(frame)
local aa=getArgs(frame)
local seg=aa[1]
local line=aa[2]
if line=='Железная дорога Статен-Айленда' then -- если станции SIR будут добавлены в таблицы, этот кусок надо будет убрать
if seg=='SIR' then
return 'x'
else
return ''
end
end
for n,x in pairs(stations) do
if x.segment==seg then
if line_netto(x.station)==tolower(line) then
return 'x'
end
end
end
return ''
end
function p.seg_route(frame)
local aa=getArgs(frame)
local seg=aa[1]
local route=aa[2]
if seg_route(seg,route,'') then
return 'x'
else
return ''
end
end
function seg_route(seg,route1,period)
local route2=routes[route1].second
if route2==nil then
route2=''
end
for n,x in pairs(routes_periods) do
if x.segment==seg then
if period=='' or x.period==period then
if x.route==route1 or x.route==route2 then
if not(x.period=='also' or (x.period=='ln' and period=='') or (x.period=='rh' and x.dir=='peak+' and period=='') or (x.period=='we' and x.dir=='1' and period=='')) then
if alt_ok(x) then
return true
end
end
end
end
end
end
return false
end
-- local functions
function alt_exist()
for nnn,xxx in pairs(alts) do
if xxx.number then
return true --если один элемент с номером найден
end
end
return false
end
function alt_text(val,prefix,t1,t2,t3,frame)
local rtn=''
for nnn,xxx in pairs(alts) do
if xxx.relevant and (val==prefix..xxx.number or val=='all') then
rtn=rtn..t1..frame:preprocess(xxx.text..'<ref name="'..xxx.refname..'">['..xxx.link..' '..xxx.title..']</ref>')..t2
end
end
if rtn=='' then
return rtn
else
return rtn..t3
end
end
function alt_ok(x,ignore_lastalt)
if x.future and not future_on then
return false
end
local a=x.alt
if a==nil then
return true
end
for nnn,xxx in pairs(alts) do
if a=='+'..xxx.number then
if alt_on and not ignore_lastalt then
xxx.relevant=true
end
return alt_on
elseif a=='-'..xxx.number then
if alt_on and not ignore_lastalt then
xxx.relevant=true
end
return not alt_on
end
end
return false
end
function const(param,frame)
if param=='year' then -- год, в котором последний раз проверено, что скип-стоп только у маршрутов J/Z, а варианты с ромбом только у 6, 7 и F (если это изменится, пройти по статьям и исправить везде, где есть {{NYCS const|year}})
return '2023'
elseif param=='r_year' then -- год, на который приводится пассажиропоток
return '2019'
elseif param=='r_y' then -- годовой пассажиропоток
return '1698 млн чел.'..frame:preprocess(r_link)
elseif param=='r_d' then -- дневной пассажиропоток
return '5,5 млн чел.'..frame:preprocess(r_link)
elseif param=='stations' then -- количество станций, если считать по одной
return '472'
elseif param=='complexes' then -- количество станций, если считать каждый пересадочный узел за одну станцию
return '424'
elseif param=='r_complexes' then -- то же, на год пассажиропотока
return '424'
elseif param=='routes' then -- количество маршрутов
return '29'
elseif param=='lines' then -- количество линий
return '36'
elseif param=='complexes only' then -- количество пересадочных узлов
return '32'
else
return ''
end
end
function rider(x,frame,what)
local o=ridership[x.r_key]
local rtn
if o==nil then
return 'ERROR'
end
local tot=const('r_complexes')-0
if what=='station text' and (x.r_ast or (o.rank>10 and o.rank~=tot)) then
return ''
end
if what=='complex text' and (x.r_ast~=true or (o.rank>10 and o.rank~=tot)) then
return ''
end
datum=tostring(o.r)
rtn=datum:reverse():gsub("%d%d%d", "%1 "):reverse():gsub("^ ", "") -- https://love2d.org/forums/viewtopic.php?f=4&t=1802
if what=='station text' or what=='complex text' then
rtn=' место по пассажиропотоку: <span class="nowrap">'..rtn..'</span>'
if o.rank==tot then
rtn=' занимает последнее'..rtn
else
rtn=' занимает '..o.rank..'-е'..rtn
end
if what=='station text' then
rtn=' На '..const('r_year')..' год станция'..rtn
else
rtn='\r\nНа '..const('r_year')..' год пересадочный узел'..rtn
end
last1=string.sub(datum,-1)
last2=string.sub('0'..datum,-2)
if last1=='1' and last2~='11' then
rtn=rtn..' пассажир'
elseif (last1=='2' and last2~='12') or (last1=='3' and last2~='13') or (last1=='4' and last2~='14') then
rtn=rtn..' пассажира'
else
rtn=rtn..' пассажиров'
end
return rtn..' в год'..frame:preprocess(r_link)..'.'
end
if o.r==0 or o.prev==0 then
elseif o.r>o.prev then
rtn='<span style="color:#0C0;font-size:larger;">▲</span>'..rtn
elseif o.r<o.prev then
rtn='<span style="color:#F00;font-size:larger;">▼</span>'..rtn
else
rtn='<span style="color:#0AF;font-size:larger;">▬</span>'..rtn
end
if x.r_ast then
if what=='station' then
return ''
end
if what~='complex' then
rtn=rtn..asterisk
end
end
if what~='list' then
rtn=rtn..'<br>('..o.rank..' из '..const('r_complexes')..')'
end
if what=='station' or what=='complex' then
rtn=rtn..frame:preprocess(r_link)
end
if o.r==0 then
ref='Станция весь год была закрыта.'
elseif o.prev==0 then
ref='Новая станция, по предыдущему году данных нет.'
else
ref=''
end
if o.comment then
if ref=='' then
ref=o.comment
else
ref=ref..' '..o.comment
end
end
if ref~='' then
rtn=rtn..frame:preprocess('<ref name="'..ref..'">'..ref..'</ref>')
end
return '<span class="nowrap">'..rtn..'</span>'
end
function add2elem(elem,txt)
if elem then
txt=elem..' '..txt
end
return txt
end
function two_segments(seg1,seg2,seg2a,fmt,ifno,withsta,typ1,typ2,typ2a)
if seg2a=='x' or seg2a=='o' then
seg2how=seg2a
seg2a=''
else
seg2how=nil
end
if withsta==nil then
typ1='x'
typ2='x'
typ2a='x'
end
arr={}
for nn,xx in pairs(routes_sorted()) do
for n,x in pairs({'rh','md','ev','we','ln'}) do
how1=nil
how2=nil
how2a=nil
for n0,x0 in pairs(routes_periods) do
if x0.route==xx.id and x0.period==x then
if alt_ok(x0) then
if x0.segment==seg1 then
how1=howstops(x0.how,x0.dir,typ1,x)
end
if seg2how=='x' then
if x0.segment==seg2 and x0.how=='x' then
how2=howstops(x0.how,x0.dir,typ2,x,'x')
end
elseif seg2how=='o' then
if x0.segment==seg2 and (x0.how~='x' or x0.dir=='peak') then
how2=howstops(x0.how,x0.dir,typ2,x,'o')
end
else
if x0.segment==seg2 then
how2=howstops(x0.how,x0.dir,typ2,x)
end
end
if x0.segment==seg2a then
how2a=howstops(x0.how,x0.dir,typ2a,x)
end
end
end
end
for n0,x0 in pairs({how2,how2a}) do
if how1==nil or x0==nil then
how=nil
elseif how1==x0 or x0=='' then
how=how1
elseif how1=='' then
how=x0
elseif (how1=='peak' and x0=='some peak') or (x0=='peak' and how1=='some peak') then
how='some peak'
elseif (how1=='1' and x0=='2') or (how1=='2' and x0=='1') then
how=nil
elseif how1=='1' or x0=='1' then
how='1'
elseif how1=='2' or x0=='2' then
how='2'
end
if how then
arr_add(arr,xx.id,x,how)
end
end
end
end
rtn=arr_text(arr,fmt)
if rtn=='' then
return ifno
else
return rtn
end
end
function fill_terminals(route,arrarr_n,arrarr_s,cursta,multiline)
for nn,xx in pairs(subperiods) do
period=xx.period
subperiod=xx.subperiod
seg_n=nil
seg_s=nil
dir_n=nil
dir_s=nil
how_n=''
how_s=''
fork_n=''
for n,x in pairs(routes_periods) do
if x.route==route and x.period==period then
if alt_ok(x) then
if subperiod_ok(subperiod,x.dir) then
if x.fork=='south' then
add_terminal(arrarr_n,route,period,seg_n,how_n,false,dir_n,subperiod,cursta,multiline)
add_terminal(arrarr_s,route,period,seg_s,how_s,true,dir_s,subperiod,cursta,multiline)
end
if seg_n==nil then
seg_n=x.segment
dir_n=x.dir
how_n=x.how
end
seg_s=x.segment
dir_s=x.dir
how_s=x.how
fork_s=x.fork
if x.fork=='north' then
add_terminal(arrarr_n,route,period,seg_n,how_n,false,dir_n,subperiod,cursta,multiline)
-- add_terminal(arrarr_s,route,period,seg_s,how_s,true,dir_s,subperiod,cursta,multiline)
fork_n='north'
seg_n=nil
seg_s=nil
dir_n=nil
dir_s=nil
how_n=''
how_s=''
end
end
end
end
end
if fork_s=='uturn' then
if fork_n~='north' then
add_terminal(arrarr_n,route,period,seg_s,how_s,true,dir_s,subperiod,cursta,multiline)
end
add_terminal(arrarr_s,route,period,seg_n,how_n,false,dir_n,subperiod,cursta,multiline)
else
add_terminal(arrarr_n,route,period,seg_n,how_n,false,dir_n,subperiod,cursta,multiline)
add_terminal(arrarr_s,route,period,seg_s,how_s,true,dir_s,subperiod,cursta,multiline)
end
end
end
function text_terminals(arrarr,total_periods,small)
cou=0
for n,x in pairs(arrarr) do
cou=cou+1
end
rtn=''
for n,x in pairs(arrarr) do
if rtn~='' then
rtn=rtn..'<br>'
end
rtn=rtn..netto(x.station,'link')
arrtext=arr_text(x.arr,'when')
if arrtext~='' and (arrtext~=total_periods or cou>1) then
if small then
rtn=rtn..' <small>('..arrtext..')</small>'
else
rtn=rtn..' ('..arrtext..')'
end
end
end
return rtn
end
function build_route(route,route2,action,frame,article,period)
local icon
route_color=routes[route].color
b1=routes[route]('bullet',20)
if route2 then
b2=routes[route2]('bullet',20)
end
if action=='lines list' or action=='lines lead' then
rtn1=''
rtn2=''
pos1=0
pos2=0
if action=='lines lead' then
delim=', '
dot='.'
prefix='линиям '
cou=0
else
delim='; '
dot=''
prefix=''
end
elseif action=='regimes' then
segs={}
minseg=1000
maxseg=0
segs_empty=true
else
rtn1='|-\r\n'
rtn2=''
if action=='navtext' then
rtn1='|- valign=top\r\n|'..b1..'\r\n|'
elseif action=='nav' then
rtn1=rtn1..'!nowrap style="font-size:90%" colspan='
if route2 then
rtn1=rtn1..'5|'..b1..b2..'\r\n'
else
rtn1=rtn1..'4|'..b1..'\r\n'
end
end
end
updown=false
first=true
pattern='o'
if action=='route' then
seg_first=''
for n0,x0 in pairs(routes_periods) do
if x0.route==route and (x0.period=='rh' or x0.period=='also') and not x0.except then
if alt_ok(x0) then
if seg_first=='' then
seg_first=x0.segment
end
seg_last=x0.segment
end
end
end
if route2 then
first2=''
for n0,x0 in pairs(routes_periods) do
if x0.route==route2 and (x0.period=='rh' or x0.period=='also') and not x0.except then
if alt_ok(x0) then
for n00,x00 in pairs(stations_all()) do
if x00.segment==x0.segment then
icon2=station_list_full(x00.station,'icons','eq',route2,nil)
if icon2~='' then
if first2=='' then
first2=x00.station
end
last2=x00.station
end
end
end
end
end
end
route2_active=false
end
end
for n0,x0 in pairs(routes_periods) do
if x0.route==route then
if alt_ok(x0) then
if (x0.period=='rh' or x0.period=='also') and not x0.except then
if action=='route' then
if x0.pattern then
pattern=x0.pattern
end
if first then
if pattern~='o' then
rtn1=rtn1..'! colspan=2 |\r\n'
else
rtn1=rtn1..'!\r\n'
end
if route2 then
rtn1=rtn1..'!'..b1..'\r\n!'..b2..'\r\n!Станция\r\n!'..acc_cell('yes')..'\r\n!Пересадки для '..b1..'\r\n!Пересадки для '..b2..'\r\n'
else
rtn1=rtn1..'!'..b1..'\r\n!Станция\r\n!'..acc_cell('yes')..'\r\n!Пересадки\r\n'
end
first=false
end
end
sta_first=''
for n,x in pairs(stations_all()) do
if x.segment==x0.segment then
if sta_first=='' then
sta_first=x.station
end
sta_last=x.station
end
end
if action=='regimes' then
if x0.fork=='south' then
if segs_empty then
segs_empty=false
elseif updown then
minseg=minseg-1
else
maxseg=maxseg+1
end
if updown then
segs['before '..x0.segment]={key=minseg}
else
segs['before '..x0.segment]={key=maxseg}
end
end
if segs_empty then
segs_empty=false
elseif updown then
minseg=minseg-1
else
maxseg=maxseg+1
end
local tt=false
if sta_first==sta_last then
for nn,xx in pairs(stations) do
if xx.station==sta_first then
tt=xx.subtype=='tt'
end
end
end
if x0.fullsta then
sta_first=from_part(sta_first)
sta_last=from_part(sta_last)
end
if updown then
segs[x0.segment]={key=minseg,sta_first=sta_last,sta_last=sta_first,tt=tt}
else
segs[x0.segment]={key=maxseg,sta_first=sta_first,sta_last=sta_last,tt=tt}
end
else
if x0.fork=='south' then
rtn1=rtn1..wide_cell(action,route2)
end
for n,x in pairs(stations_all()) do
if x.segment==x0.segment then
tmp=''
sta=x.station
sta_real=from_part(sta)
if x0.fullsta~=nil and action=='route' then
sta=sta_real
end
if period then
icon=icon_nostop
icon2=icon_nostop
for n00,x00 in pairs(routes_periods) do
if x00.segment==x.segment and x00.period==period then
if x00.route==route then
icon=howstops2pic(howstops(x00.how,x00.dir,x.type,period),period)
elseif x00.route==route2 then
icon2=howstops2pic(howstops(x00.how,x00.dir,x.type,period),period)
end
end
end
else
icon=station_list_full(sta,'icons','eq',route,nil)
if route2 then
icon2=station_list_full(sta,'icons','eq',route2,nil)
end
end
if icon~='' or action=='route' then
if action=='lines list' or action=='lines lead' then
tmp=line_netto(sta)
if action=='lines lead' then
lookfor='[['..tmp..'|'
else
lookfor='[['..tmp..']]'
end
if string.find(rtn1,lookfor,1,true)~=nil or string.find(rtn2,lookfor,1,true)~=nil then
tmp=''
elseif action=='lines lead' then
cou=cou+1
if cou==1 then
tmp_only=tmp
end
tmp=line_link(tmp,'')
else
color=''
xx=lines[tmp]
if xx then
color=xx.color
end
tmp='[['..tmp..']]'
if color==route_color then
tmp='<span style="background-color:#'..color..'; border:1px solid #A9A9A9;"> </span> '..tmp
end
end
elseif action=='navtext' then
tmp=tmp..' <span class="nowrap"><sup>'..icon..'</sup>'
sta1=from_part(sta)
sta2=to_complex(sta1)
if sta2==article then
tmp=tmp..'<b>'..netto(sta,'text')..'</b></span>'
else
tmp=tmp..'[['..sta2..to_complex_sec(sta1)..'|'..netto(sta,'text')..']]</span>'
end
else
if x.future then
tmp=tmp..'|- style="'..grayback..'"\r\n'
a3=x.conn
else
tmp=tmp..'|-\r\n'
a3=station_connections(sta_real)
end
if icon=='' or icon==icon_nostop then
ith=1
else
if period then
filter=period
else
filter=station_list_full(sta_real,'periods','eq',route,nil)
end
ith=station_transfers_count(sta_real,filter)
if x.future then
if x.conn then
ith=ith+1
end
else
if station_list_full(sta_real,'count letters full','ne',route,filter)~=0 then
ith=ith+1
end
if a3~='' then
ith=ith+1
end
end
end
if route2 then
if icon2=='' or icon2==icon_nostop then
ith2=1
else
if period then
filter2=period
else
filter2=station_list_full(sta_real,'periods','eq',route2,nil)
end
ith2=station_transfers_count(sta_real,filter2)
if station_list_full(sta_real,'count letters full','ne',route2,filter2)~=0 then
ith2=ith2+1
end
if a3~='' then
ith2=ith2+1
end
if ith2>ith then
ith=ith2
end
end
end
icontoshow=icon
if action=='route' then
novert_n=sta==sta_first and (x0.novert_n~=nil or x0.segment==seg_first)
novert_s=sta==sta_last and (x0.novert_s~=nil or (x0.segment==seg_last and x0.fork~='uturn'))
circletoshow='O'
if icon=='' or icon==icon_nostop then
icontoshow=icon_nostop
if icon2=='' or icon2==icon_nostop or route2==nil then
circletoshow='OO'
end
end
if x.note then
icontoshow='<span class="nowrap">'..icon..x.note..'</span>'
end
tmp=tmp..twomosaics(pattern,route_color,circletoshow,ith,novert_n,novert_s)
end
if period then
cellalign='|'
others_format='one period'
else
cellalign='|align=center|'
others_format='full small'
end
tmp=tmp..cellalign..icontoshow..'\r\n'
if route2 then
if sta==first2 then
route2_active=true
end
if icon2=='' or icon2==icon_nostop then
if route2_active then
tmp=tmp..cellalign..icon_nostop..'\r\n'
else
tmp=tmp..'|\r\n'
end
else
tmp=tmp..cellalign..icon2..'\r\n'
end
if sta==last2 then
route2_active=false
end
end
if action=='nav' then
comp=to_complex(sta_real,true)
if comp=='' then
tmp=tmp..'|'..netto(sta_real,'link')..'\r\n'
elseif comp==article then
tmp=tmp..'|<b>'..netto(sta_real,'text')..'</b>\r\n'
else
tmp=tmp..'|[['..comp..to_complex_sec(sta_real)..'|'..netto(sta_real,'text')..']]\r\n'
end
tmp=tmp..'|'..acc_cell(x.acc)..'\r\n'
tmp=tmp..'|nowrap|'..station_transfers_including(sta_real,comp,'bullets',route,route2)..'\r\n'
else
tmp=tmp..'|nowrap|'..ita1(x.future,true,false)..netto(sta,'link')..ita2(x.future)..'\r\n'
tmp=tmp..'|'..acc_cell(x.acc)..'\r\n'
if icon=='' or icon==icon_nostop then
tmp=tmp..'|\r\n'
else
a1=station_list_full(sta_real,others_format,'ne',route,filter)
a2=station_transfers(sta_real,others_format,filter,frame)
if action=='route' then
tmp=tmp..'| style="padding:0;margin:0;"|\r\n'..inner_table(a1,a2,a3)
else
tmp=tmp..'|\r\n'..inner_table(a1,a2,a3)
end
end
if route2 then
if icon2=='' or icon2==icon_nostop then
tmp=tmp..'|\r\n'
else
a1=station_list_full(sta_real,others_format,'ne',route2,filter2)
a2=station_transfers(sta_real,others_format,filter2,frame)
if action=='route' then
tmp=tmp..'| style="padding:0;margin:0;"|\r\n'..inner_table(a1,a2,a3)
else
tmp=tmp..'|\r\n'..inner_table(a1,a2,a3)
end
end
end
end
end
end
if action=='lines list' or action=='lines lead' then
if tmp~='' then
if updown then
if rtn2=='' then
rtn2=tmp
elseif rtn2~='' then
if pos2==0 then
pos2=string.len(tmp)
else
pos2=pos2+string.len(tmp..delim)
end
rtn2=tmp..delim..rtn2
end
else
if rtn1=='' then
rtn1=tmp
elseif rtn1~='' then
pos1=string.len(rtn1)
rtn1=rtn1..delim..tmp
end
end
end
else
if updown then
rtn2=tmp..rtn2
else
rtn1=rtn1..tmp
end
end
end
end
end
if x0.joint then
updown=true
elseif x0.fork=='north' then
if action=='regimes' then
if segs_empty then
segs_empty=false
elseif updown then
minseg=minseg-1
else
maxseg=maxseg+1
end
if updown then
segs['after '..x0.segment]={key=minseg}
else
segs['after '..x0.segment]={key=maxseg}
end
else
rtn1=rtn1..wide_cell(action,route2)
end
end
if x0.shape~=nil and action=='route' then
rtn1=rtn1..'|-\r\n'
if x0.shape=='|\\' then
rtn1=rtn1..mosaic(route_color,'N-SE',0,'r')
rtn1=rtn1..mosaic(route_color,'SW',0,'l')
elseif x0.shape=='|/' then
rtn1=rtn1..mosaic(route_color,'S-NE',0,'r')
rtn1=rtn1..mosaic(route_color,'NW',0,'l')
elseif x0.shape=='\\|' then
rtn1=rtn1..mosaic(route_color,'NE',0,'r')
rtn1=rtn1..mosaic(route_color,'S-NW',0,'l')
elseif x0.shape=='/|' then
rtn1=rtn1..mosaic(route_color,'SE',0,'r')
rtn1=rtn1..mosaic(route_color,'N-SW',0,'l')
end
if route2 then
rtn1=rtn1..'|colspan=6|\r\n'
else
rtn1=rtn1..'|colspan=4|\r\n'
end
end
end
if action=='regimes' and x0.period~='also' and not x0.except then
if x0.segment_subst then
seg=x0.segment_subst
else
seg=x0.segment
end
if segs[seg] then
segs[seg][x0.period]=how_descr(x0,route,segs[seg].tt)
end
end
end
end
if action=='regimes' and x0.route==route2 and x0.period~='also' and not x0.except then
if alt_ok(x0) then
if x0.segment_subst then
seg=x0.segment_subst
else
seg=x0.segment
end
if segs[seg] then
segs[seg][x0.period..'2']=how_descr(x0,route2,segs[seg].tt)
end
end
end
end
if action=='lines list' or action=='lines lead' then
if action=='lines lead' and cou==1 then
return line_link(tmp_only,'линии ')..dot
else
if rtn1=='' or rtn2=='' then
if pos2>0 then
pos1=pos2
end
rtn1=rtn1..rtn2..dot
else
if pos2>0 then
pos1=pos2+string.len(rtn1..delim)
else
pos1=string.len(rtn1)
end
rtn1=rtn1..delim..rtn2..dot
end
if action=='lines lead' then
rtn1=string.sub(rtn1,1,pos1)..', и '..string.sub(rtn1,pos1+3,string.len(rtn1))
end
return prefix..rtn1
end
elseif action=='regimes' then
segs0={}
for n,x in pairs(segs) do
table.insert(segs0, x)
end
table.sort(segs0, function(a,b) return a.key<b.key end)
finger=nil
for n,x in pairs(segs0) do
equal=false
if finger then
equal=x.rh==finger.rh and x.md==finger.md and x.ev==finger.ev and x.we==finger.we and x.ln==finger.ln
if route2 then
equal=equal and x.rh2==finger.rh2 and x.md2==finger.md2 and x.ev2==finger.ev2 and x.we2==finger.we2 and x.ln2==finger.ln2
end
end
if equal then
finger.sta_last=x.sta_last
x.ignore=true
else
finger=x
end
end
eq1=true
eq2=true
eq3=true
eq4=true
eq5=true
eq6=true
eq7=true
eq8=true
for n,x in pairs(segs0) do
if x.ignore==nil then
if not qq(x.rh,x.md) then eq1=false end
if not qq(x.md,x.ev) then eq2=false end
if not qq(x.ev,x.we) then eq3=false end
if not qq(x.we,x.ln) then eq4=false end
if route2 then
if not qq(x.rh2,x.md2) then eq5=false end
if not qq(x.md2,x.ev2) then eq6=false end
if not qq(x.ev2,x.we2) then eq7=false end
if not qq(x.we2,x.ln2) then eq8=false end
end
end
end
if route2 then
rtn='!rowspan=2 style="line-height:80%;"| От станции<small><br>включительно</small>\r\n!rowspan=2 style="line-height:80%;"| До станции<small><br>включительно</small>'
span=span_count(eq1,eq2,eq3,eq4)
if span==1 then
rtn=rtn..'\r\n!'..b1
else
rtn=rtn..'\r\n!colspan='..span..'|'..b1
end
span=span_count(eq5,eq6,eq7,eq8)
if span==1 then
rtn=rtn..'\r\n!'..b2
else
rtn=rtn..'\r\n!colspan='..span..'|'..b2
end
rtn=rtn..'\r\n|-\r\n!'
else
rtn='!style="line-height:80%;"| От станции<small><br>включительно</small>\r\n!style="line-height:80%;"| До станции<small><br>включительно</small>\r\n!'
end
rtn=rtn..period_captions(eq1,eq2,eq3,eq4)
if route2 then
rtn=rtn..'\r\n!'..period_captions(eq5,eq6,eq7,eq8)
end
rtn=rtn..'\r\n'
for n,x in pairs(segs0) do
if x.ignore==nil then
rtn=rtn..'|-\r\n'
if x.sta_first then
if x.sta_first==x.sta_last then
rtn=rtn..'!colspan=2|'..ita1(future_on,true,false)..netto(x.sta_first,'link')..ita2(future_on)..'\r\n'
else
rtn=rtn..'!align=left|'..ita1(future_on,true,false)..netto(x.sta_first,'link')..ita2(future_on)..'\r\n'
rtn=rtn..'!align=left|'..ita1(future_on,true,false)..netto(x.sta_last,'link')..ita2(future_on)..'\r\n'
end
rtn=rtn..period_cells(eq1,eq2,eq3,eq4,x,'',false)
if route2 then
rtn=rtn..period_cells(eq5,eq6,eq7,eq8,x,'2',false)
end
else
rtn=rtn..'!colspan=12|\r\n'
end
end
end
return rtn
elseif action=='navtext' then
return rtn1..rtn2..'\r\n'
else
return rtn1..rtn2
end
end
function qq(aa,bb)
local a=nil
if aa then
a=string.gsub(aa,' %(до 23:00%)','')
a=string.gsub(a,'%(до 23:00%)','')
end
local b=nil
if bb then
b=string.gsub(bb,' %(до 23:00%)','')
b=string.gsub(b,'%(до 23:00%)','')
end
return a==b
end
function span_count(eq1,eq2,eq3,eq4)
local span=5
if eq1 then span=span-1 end
if eq2 then span=span-1 end
if eq3 then span=span-1 end
if eq4 then span=span-1 end
return span
end
function period_captions(eq1,eq2,eq3,eq4)
local rtn
if eq2 and eq3 then
if eq1 and eq4 then
rtn=' Круглосуточно'
elseif eq4 then
rtn=' Часы пик\r\n! Остальное время'
elseif eq1 then
rtn='style="line-height:80%;"| <small>День + вечер<br>+ выходные</small>\r\n! Ночь'
else
rtn=' Часы пик\r\n!style="line-height:80%;"| <small>День (кроме часов пик)<br>+ вечер + выходные</small>\r\n! Ночь'
end
else
if eq1 then
rtn=' День'
else
rtn=' Часы пик\r\n! День (кроме часов пик)'
end
if eq3 and eq4 then
rtn=rtn..'\r\n! Остальное время'
else
rtn=rtn..period_caption(eq2,'Вечер','вечер')
rtn=rtn..period_caption(eq3,'Выходные','выходные')
rtn=rtn..period_caption(eq4,'Ночь','ночь')
end
end
return rtn
end
function period_caption(eq,periodU,periodL)
if eq then
return ' + '..periodL
else
return '\r\n! '..periodU
end
end
function period_cells(eq1,eq2,eq3,eq4,a,n,small)
local rtn=''
rtn=rtn..period_cell(eq1,a['rh'..n],small)
rtn=rtn..period_cell(eq2,a['md'..n],small)
rtn=rtn..period_cell(eq3,a['ev'..n],small)
rtn=rtn..period_cell(eq4,a['we'..n],small)
rtn=rtn..period_cell(false,a['ln'..n],small)
return rtn
end
function period_cell(eq,data,small)
if eq then
return ''
elseif data then
if small then
return '|<span class="nowrap"><small>'..data..'</small></span>\r\n'
else
return '|'..data..'\r\n'
end
else
return '| <span title="нет движения поездов">—</span>\r\n'
end
end
function how_descr(x0,route,tt)
local skipstop=false
if x0.how==nil then
s='локальные пути'
elseif x0.how=='x' then
if tt then
s='оборотный путь'
else
s='экспресс'
if (x0.dir=='peak') or (x0.dir=='peakonly' and routes[route].onedir) then
s=s..'-путь'
else
s=s..'-пути'
end
end
else
s='локальные пути в режиме [[скип-стоп]]'
skipstop=true
end
if x0.dir=='peak' then
if skipstop then
s='локальные пути: в пиковом направлении в режиме [[скип-стоп]], в обратном со всеми остановками'
else
s=s..' в пиковом направлении, локальный путь в обратном'
end
elseif x0.dir=='peakonly' then
s=s..'; только в пиковом направлении'
elseif x0.dir=='peak+' then
s=s..'; только в пиковом направлении (часть рейсов)'
elseif x0.dir=='notpeakonly' then
s=s..'; только в направлении, обратном пиковому'
elseif x0.dir=='1' or x0.dir=='2' then
subp=subperiod1(x0.period,x0.dir)
if subp then
s=s..' '..subp
end
end
return s
end
function subperiod1(period,param)
if param=='1' then
if period=='rh' then
return '(часть рейсов)'
elseif period=='ev' then
return '(до 23:00)'
elseif period=='we' then
return '(только летом)'
elseif period=='ln' then
return '(в будни)'
else
return nil
end
else
if period=='rh' then
return '(большинство рейсов)'
elseif period=='ev' then
return '(после 23:00)'
elseif period=='we' then
return '(кроме лета)'
elseif period=='ln' then
return '(в выходные)'
else
return nil
end
end
end
function wide_cell(action,route2)
if action=='nav' then
if route2 then
return '|- style="'..grayback..'"\r\n|colspan=6|\r\n'
else
return '|- style="'..grayback..'"\r\n|colspan=4|\r\n'
end
elseif action=='navtext' then
return ' <b>|</b> '
else
return ''
end
end
function mosaic(route_color,file,ith,openside,novert_n,novert_s)
h20='|- style="height:20px;"\r\n|[[File:SMicon NS.svg|link=]]\r\n'
h10='|- style="height:10px;"\r\n|<div style="padding:0;margin:0;height:10px;overflow-y:hidden;">[[File:SMicon NS.svg|link=]]</div>\r\n'
if openside=='l' then
border=bor0('left')
elseif openside=='r' then
border=bor0('right')
else
border=''
end
if ith==2 then
tmp=h10
tmp_novert='|- style="height:10px;'..whiteback..'"\r\n|\r\n'
elseif ith==3 then
tmp=h20
tmp_novert='|- style="height:20px;'..whiteback..'"\r\n|\r\n'
elseif ith==4 then
tmp=h20..h10
tmp_novert='|- style="height:30px;'..whiteback..'"\r\n|\r\n'
elseif ith==5 then
tmp=h20..h20
tmp_novert='|- style="height:40px;'..whiteback..'"\r\n|\r\n'
elseif ith==6 then
tmp=h20..h20..h10
tmp_novert='|- style="height:50px;'..whiteback..'"\r\n|\r\n'
elseif ith==7 then
tmp=h20..h20..h20
tmp_novert='|- style="height:60px;'..whiteback..'"\r\n|\r\n'
elseif ith==8 then
tmp=h20..h20..h20..h10
tmp_novert='|- style="height:70px;'..whiteback..'"\r\n|\r\n'
elseif ith==9 then
tmp=h20..h20..h20..h20
tmp_novert='|- style="height:80px;'..whiteback..'"\r\n|\r\n'
else
tmp=''
tmp_novert=''
end
if novert_n then
tmp_n=tmp_novert
else
tmp_n=tmp
end
if novert_s then
tmp_s=tmp_novert
else
tmp_s=tmp
end
return '| style="padding:0;margin:0;'..border..'"|\r\n'..tab..' style="background-color:#'..route_color..';padding:0;margin:0;width:0;"\r\n'..tmp_n..'|- style="height:20px;"\r\n|[[File:SMicon '..file..'.svg|link=]]\r\n'..tmp_s..'|}\r\n'
end
function twomosaics(pattern,route_color,pic,ith,novert_n,novert_s)
local tmp=''
if pattern=='o' then
tmp=tmp..mosaic(route_color,pic,ith,'',novert_n,novert_s)
elseif pattern=='o ' then
tmp=tmp..mosaic(route_color,pic,ith,'r',novert_n,novert_s)
tmp=tmp..'| style="'..bor0('left')..'" |\r\n'
elseif pattern==' o' then
tmp=tmp..'| style="'..bor0('right')..'" |\r\n'
tmp=tmp..mosaic(route_color,pic,ith,'l',novert_n,novert_s)
elseif pattern=='o|' then
tmp=tmp..mosaic(route_color,pic,ith,'r',novert_n,novert_s)
tmp=tmp..mosaic(route_color,'NS',ith,'l')
elseif pattern=='|o' then
tmp=tmp..mosaic(route_color,'NS',ith,'r')
tmp=tmp..mosaic(route_color,pic,ith,'l',novert_n,novert_s)
end
return tmp
end
function inner_table(a1,a2,a3)
if a3==nil then
a3=''
end
-- a1 - маршруты, на которые можно пересесть на той же станции (на той же платформе или на других)
-- a2 - строки таблицы по остальным станциям пересадочного узла, где в первой клетке маршруты на станции, а во второй название станции
-- a3 - пересадки вне метрополитена
--if a2=='' and (a1=='' or a3=='') then
-- return '<span class="nowrap">'..a1..a3..'</span>\r\n'
--end
rtn=tab..'\r\n'
if a2=='' then
if a1=='' and a3=='' then
return ''
end
if a1~='' then
rtn=rtn..'|-\r\n|nowrap|'..a1..'\r\n'
end
if a3~='' then
rtn=rtn..'|-\r\n|nowrap style="height:20px;"|'..a3..'\r\n'
end
else
if a1~='' then
rtn=rtn..'|-\r\n|nowrap|'..a1..'\r\n|nowrap|<i><small>на той же станции</small></i>\r\n'
end
rtn=rtn..a2
if a3~='' then
rtn=rtn..'|-\r\n|colspan=2 nowrap style="height:20px;"|'..a3..'\r\n'
end
end
return rtn..'|}\r\n'
end
function periods(route,directions)
arr={}
for n,x in pairs(routes_periods) do
if x.route==route then
if alt_ok(x) then
if not directions then
arr_add(arr,route,x.period,'')
else
arr_add(arr,route,x.period,howstops(x.how,x.dir,'x',x.period))
end
end
end
end
return arr_text(arr,'when')
end
function add_terminal(arrarr,route,period,seg,how,north,dir,subperiod,cursta,multiline)
sta=get_first_station(route,period,seg,how,dir,north,subperiod,false)
for n0,x0 in pairs(sta) do
local term=x0
if multiline then
term=from_part(term)
end
if cursta==nil or cursta==term then
if cursta then
key=cursta
else
key=term
end
if arrarr[key] then
arr=arrarr[term].arr
else
arr={}
end
comment=howstops(how,dir,'x',period)
if comment then
if comment=='' and subperiod~='' then
comment=subperiod
end
arr_add(arr,route,period,comment)
end
arrarr[key]={arr=arr,station=term}
end
end
--return arrarr
end
function netto(article,fmt)
pos=string.find(article,'(',1,true)
if fmt=='text' then
return string.sub(article,1,pos-2)
end
if fmt=='link' then
return '[['..article..'|'..string.sub(article,1,pos-2)..']]'
end
end
function line_netto(station)
pos=string.find(station,'(',1,true)
local rtn=string.sub(station,pos+1,string.len(station)-1)
pos=string.find(rtn,', через',1,true)
if pos then
rtn=string.sub(rtn,1,pos-1)
end
return rtn
end
function line_nowrap(rtn)
pos=string.find(rtn,', ',1,true)
if pos then
return string.sub(rtn,1,pos+1)..'<span class="nowrap">'..string.sub(rtn,pos+2,string.len(rtn))..'</span>'
else
return rtn
end
end
function line_link(line,text)
pos=string.find(line,' ',1,true)
return '[['..line..'|'..text..string.sub(line,pos+1,string.len(line))..']]'
end
function line_routes(line)
arr={}
for n,x in pairs(stations) do
if line_netto(x.station)==line then
arr=station_list_once_given(arr,x.station,nil,nil,nil,x.segment,x.type,x.sep)
end
end
return arr
end
function segment_routes(arr,segment)
for n,x in pairs(routes_periods) do
if x.segment==segment then
if alt_ok(x) then
arr_add(arr,x.route,x.period,howstops(x.how,x.dir,'x',x.period))
end
end
end
return arr
end
function line(station,color)
local rtn=line_netto(station)
text=line_nowrap(rtn)
if color then
return '[['..rtn..'|<span style="color:'..color..'">'..text..'</span>]]'
else
return '[['..rtn..'|'..text..']]'
end
end
function complex_lines(complex,color)
list={}
for n0,x0 in pairs(station_complexes) do
if x0.article==complex and x0.section~='' then
if alt_ok(x0) then
for n,x in pairs(station_parts(x0.station)) do
tmp=line(x,color)
list[tmp]=tmp
end
end
end
end
list0={}
for n0,x0 in pairs(list) do
table.insert(list0, x0)
end
table.sort(list0, function(a,b) return a<b end)
return list0
end
function next_station_list(station,north_param,acc,centered)
arrarr={}
for n0,x0 in pairs(station_parts(station)) do
north=north_param
csta=x0
for n,x in pairs(stations) do
if x.station==csta then
ctype=x.type
cacc=x.acc
if x.north_back then
north=not north_param
end
end
end
for n00,x00 in pairs(subperiods) do
for n,x in pairs(routes_periods) do
cperiod=x00.period
if x.period==cperiod then
if alt_ok(x) then
croute=x.route
csegment=x.segment
chow=x.how
cdir=x.dir
csubperiod=x00.subperiod
if stops_ok(chow,cdir,ctype,cperiod,csubperiod) and acc_ok(north,cacc,acc) then
for nsta,xsta in pairs(next_station(csta,croute,cperiod,csegment,chow,cdir,north,csubperiod,acc)) do
sta=from_part(xsta)
if arrarr[sta] then
arr=arrarr[sta].arr
else
arr={}
end
arr_add(arr,x.route,x.period,x00.subperiod)
arrarr[sta]={arr=arr,station=sta}
end
end
end
end
end
end
for n,x in pairs(unused_connections) do
if x.station==x0 and x.north~=north then
for nn,xx in pairs(unused_connections) do
if xx.station~=x0 and xx.connection==x.connection then
if arrarr[xx.station]==nil then
arr={}
arr['']={route='',periods=''}
arrarr[xx.station]={arr=arr,station=xx.station,small=true}
end
end
end
end
end
for n,x in pairs(unused_tracks) do
if x.station==x0 then
if north then
i=x.index-1
else
i=x.index+1
end
for nn,xx in pairs(unused_tracks) do
if xx.segment==x.segment and xx.index==i then
if arrarr[xx.station]==nil then
arr={}
if x.closed then
arr['']={route='-',periods=''}
elseif xx.closed then
arr['']={route='',periods=xx.closed}
else
arr['']={route='',periods=''}
end
arrarr[xx.station]={arr=arr,station=xx.station,small=true}
end
end
end
end
end
end
arrarr0={}
for n,x in pairs(arrarr) do
table.insert(arrarr0, x)
end
table.sort(arrarr0, function(a,b) return (b.small and not a.small) or (a.small==b.small and a.station<b.station) end)
rtn=''
for n,x in pairs(arrarr0) do
if rtn~='' then
rtn=rtn..'<br>'
end
if x.small then
rtn=rtn..'<small><i>'
end
rtn=rtn..netto(x.station,'link')
if x.small then
local page=mw.title.new(x.station)
if not page.exists then
for nn,xx in pairs(stations_former) do
if xx.station==x.station then
if xx.en then
rtn=rtn..'<sup style="font-style:normal;">[[[:en:'..xx.en..'|en]]]</sup>'
end
end
end
end
end
arrtext=arr_text(x.arr,'full halftext')
if arrtext~='' then
if centered then
rtn=rtn..'<br>('..arrtext..')'
else
rtn=rtn..indent..'('..arrtext..')'
end
end
if x.small then
rtn=rtn..'</i></small>'
end
end
if rtn=='' then
return '<small><i>(конечная)</i></small>'
else
return rtn
end
end
function next_station(station,route,period,segment,how,dir,north,subperiod,acc)
comment=howstops(how,dir,typ,period)
if comment==nil then
return {}
end
sta=station
for n,x in pairs(stations) do
if x.station==sta then
index_this=n
seg=x.segment
typ=x.type
if typ=='-' then
return {}
end
end
end
if seg~=segment then
return {}
end
rtn=''
found=false
for n,x in pairs(stations) do
if x.segment==seg then
if stops_ok(how,dir,x.type,period,subperiod) and acc_ok(north,x.acc,acc) then
if north then
if x.station==sta then
break
else
rtn=x.station
end
else
if x.station==sta then
found=true
elseif found then
rtn=x.station
break
end
end
end
end
end
return station_collection(rtn,route,period,seg,north,sta,subperiod,acc)
end
function get_next_segment(route,period,seg,north)
newseg=''
newhow=''
newdir=''
local list={}
nodetype=nil
node_n=nil
node_s=nil
for n,x in pairs(nodes) do
if x.segment==seg then
nodetype=x.nodetype
node_n=x.node_n
node_s=x.node_s
end
end
if nodetype=='fork' and ((node_n~=nil and north) or (node_s~=nil and not north)) then
for n,x in pairs(nodes) do
if (x.node_s==node_n and north) or (x.node_n==node_s and not north) then
for nn,xx in pairs(routes_periods) do
if xx.segment==x.segment and xx.route==route and xx.period==period then
if alt_ok(xx) then
list[x.segment]={segment=x.segment,how=xx.how,dir=xx.dir,north=north}
end
end
end
end
end
return list
end
if nodetype=='uturn' and ((node_n~=nil and north) or (node_s~=nil and not north)) then
for n,x in pairs(nodes) do
if ((x.node_n==node_n and north) or (x.node_s==node_s and not north)) and x.segment~=seg then
for nn,xx in pairs(routes_periods) do
if xx.segment==x.segment and xx.route==route and xx.period==period then
if alt_ok(xx) then
list[x.segment]={segment=x.segment,how=xx.how,dir=xx.dir,north=not north}
end
end
end
end
end
--return list
end
found=false
for n,x in pairs(routes_periods) do
if x.route==route and x.period==period then
if alt_ok(x) then
if north then
if x.segment==seg then
if x.fork~='south' and newseg~='' then
list[newseg]={segment=newseg,how=newhow,dir=newdir,north=north}
end
break
else
if x.fork=='north' then
newseg=''
newhow=''
newdir=''
else
newseg=x.segment
newhow=x.how
newdir=x.dir
end
end
else
if x.segment==seg then
if x.fork=='north' then
break
end
found=true
elseif found then
if x.fork~='south' then
list[x.segment]={segment=x.segment,how=x.how,dir=x.dir,north=north}
end
break
end
end
end
end
end
return list
end
function get_first_station(route,period,seg,how,dir,north,subperiod,acc)
rtn=''
for n,x in pairs(stations_all()) do
if x.segment==seg then
if stops_ok(how,dir,x.type,period,subperiod) and acc_ok(north,x.acc,acc) then
rtn=x.station
if not north then
break
end
end
end
end
return station_collection(rtn,route,period,seg,north,'',subperiod,acc)
end
function station_collection(rtn,route,period,seg,north,sta,subperiod,acc)
local list={}
if rtn~=sta and rtn~='' then
list[rtn]=rtn
else
for n,x in pairs(get_next_segment(route,period,seg,north)) do
for nn,xx in pairs(get_first_station(route,period,x.segment,x.how,x.dir,x.north,subperiod,acc)) do
list[xx]=xx
end
end
end
return list
end
function complex_sum(complex)
arr={}
for n,x in pairs(station_complexes) do
if x.article==complex and x.section~='' then
if alt_ok(x) then
for nn,xx in pairs(station_parts(x.station)) do
arr=station_list_once(arr,xx)
end
end
end
end
return arr
end
function station_connections(station)
for n0,x0 in pairs(station_parts(station)) do
for n,x in pairs(stations) do
if x.station==x0 then
if x.conn then
return x.conn
else
return ''
end
end
end
end
end
function station_transfers(station,fmt,filter,frame,exclude,ast)
local list
complex=''
rtn=''
virt=false
for n,x in pairs(station_complexes) do
if x.station==station then
if alt_ok(x) then
complex=x.article
if x.section=='' and x.future==nil then
virt=true
end
end
end
end
if complex=='' then
return ''
end
for n,x in pairs(station_complexes) do
if x.article==complex and x.station~=station then
if alt_ok(x) then
if x.station==exclude then
excludefound=true
else
list=station_list_full(x.station,fmt,nil,nil,filter)
if list=='' then
list=icon_nostop
end
rtn=rtn..'|- style="height:20px;"\r\n'
rtn=rtn..'|nowrap|'..list..'\r\n'
rtn=rtn..'|nowrap| '..netto(x.station,'link')
if (x.section=='' or virt) and x.future==nil then
if x.periods then
rtn=rtn..'<sup>'..icons[x.periods]('icon',8)..'</sup>'
elseif ast then
rtn=rtn..asterisk
else
rtn=rtn..frame:preprocess(metrocard)
end
end
rtn=rtn..'\r\n'
end
end
end
end
super=''
for n,x in pairs(station_complexes) do
if x.station==complex and x.periods~=nil then
if alt_ok(x) then
super=x.article
end
end
end
if super~='' then
for n,x in pairs(station_complexes) do
if x.article==super and x.station~=complex then
if alt_ok(x) then
for nn,xx in pairs(station_complexes) do
if xx.article==x.station then
list=station_list_full(xx.station,fmt,nil,nil,filter)
rtn=rtn..'|- style="height:20px;"\r\n'
rtn=rtn..'|nowrap|'..list..'\r\n'
rtn=rtn..'|nowrap| '..netto(xx.station,'link')
rtn=rtn..'<sup>'..icons[x.periods]('icon',8)..'</sup>'
rtn=rtn..'\r\n'
end
end
end
end
end
end
return rtn
end
function station_transfers_count(station,filter,exclude)
local cou
complex=''
for n,x in pairs(station_complexes) do
if x.station==station then
if alt_ok(x) then
complex=x.article
end
end
end
if complex=='' then
return 0
end
cou=0
for n,x in pairs(station_complexes) do
if x.article==complex and x.station~=station and x.station~=exclude then
if alt_ok(x) then
cou=cou+1
end
end
end
super=''
for n,x in pairs(station_complexes) do
if x.station==complex and x.periods~=nil then
if alt_ok(x) then
super=x.article
end
end
end
if super~='' then
for n,x in pairs(station_complexes) do
if x.article==super and x.station~=complex then
if alt_ok(x) then
for nn,xx in pairs(station_complexes) do
if xx.article==x.station then
cou=cou+1
end
end
end
end
end
end
return cou
end
function station_transfers_including(station,complex,fmt,route1,route2)
arr={}
if complex=='' then
for nn,xx in pairs(station_parts(station)) do
arr=station_list_once(arr,xx)
end
else
for n,x in pairs(station_complexes) do
if x.article==complex then
if alt_ok(x) then
for nn,xx in pairs(station_parts(x.station)) do
arr=station_list_once(arr,xx)
end
end
end
end
end
return arr_text(arr,fmt,route1,route2)
end
function station_list_full(station,fmt,cond,route,filter,level)
local arr={}
if level or future_on then
arr=station_list_once(arr,station,cond,route,filter)
else
for n,x in pairs(station_parts(station)) do
arr=station_list_once(arr,x,cond,route,filter)
end
end
if fmt=='count letters' or fmt=='count letters full' then
return arr_text(arr,fmt,nil,nil,level)
end
local parts=''
local term=''
if fmt=='prose' then
for n,x in pairs(multiline_stations) do
if x.full==station then
if x.text then
arr_p={}
arr_p=station_list_once(arr_p,x.part)
arr_p=station_list_once(arr_p,x.part,nil,nil,'skip')
if parts~='' then
if x.detailed then
parts=parts..', '..x.text..' '..arr_text(arr_p,'prose dash')
else
parts=parts..', '..x.text..' '..arr_text(arr_p,'prose dash short')
end
else
if x.detailed then
parts=parts..x.text..' '..arr_text(arr_p,'prose where')
else
parts=parts..x.text..' '..arr_text(arr_p,'prose where short')
end
end
if x.after then
parts=parts..' ('..x.after..')'
end
end
end
end
for n,x in pairs(multiline_stations) do
if x.full==station then
if x.level then
tmp=''
if x.no_exp then
tmp=station_list_full(x.part,'prose lcl',nil,nil,'lcl',x.level)
else
local subt=''
for nn,xx in pairs(stations_all()) do
if xx.station==x.part then
subt=xx.subtype
end
end
if subt=='bidi' then
tmp=station_list_full(x.part,'prose exp 1',nil,nil,'exp',x.level)
else
tmp=station_list_full(x.part,'prose exp 2',nil,nil,'exp',x.level)
end
if tmp~='' and x.no_lcl==nil then
tmp=tmp..'. '..station_list_full(x.part,'prose lcl',nil,nil,'lcl',x.level)
end
end
if tmp~='' then
parts=parts..'. '..tmp
end
end
end
end
if parts~='' then
parts='. '..parts
end
arrarr_n={}
arrarr_s={}
found_all_n=0
found_diff_n=0
found_all_s=0
found_diff_s=0
found_total=0
last_route_n=''
last_route_s=''
for n,x in pairs(arr) do
fill_terminals(x.route,arrarr_n,arrarr_s,station,true)
found_total=found_total+1
end
if arrarr_n[station]~=nil or arrarr_s[station]~=nil then
if arrarr_n[station] then
arr_n=arrarr_n[station].arr
else
arr_n={}
end
if arrarr_s[station] then
arr_s=arrarr_s[station].arr
else
arr_s={}
end
for n,x in pairs(arr) do
periods_all=normalize(x.periods,false)
if arr_n[x.route] then
periods_n=normalize(arr_n[x.route].periods,false)
last_route_n=x.route
else
periods_n=''
end
if arr_s[x.route] then
periods_s=normalize(arr_s[x.route].periods,false)
last_route_s=x.route
else
periods_s=''
end
if periods_n==periods_all then
found_all_n=found_all_n+1
elseif periods_n~='' then
found_diff_n=found_diff_n+1
end
if periods_s==periods_all then
found_all_s=found_all_s+1
elseif periods_s~='' then
found_diff_s=found_diff_s+1
end
end
if found_all_n==0 and found_diff_n==0 and found_all_s==0 and found_diff_s==0 then
term=''
elseif found_all_n>0 and found_diff_n==0 and found_all_s==0 and found_diff_s==0 then
term='. Станция является северной конечной '
if found_all_n~=found_total then
term=term..arr_text(arr_n,'prose for short')
elseif found_all_n==1 then
term=term..'для него'
elseif found_all_n==2 then
term=term..'для обоих маршрутов'
else
term=term..'для всех маршрутов'
end
elseif found_all_n==0 and found_diff_n==0 and found_all_s>0 and found_diff_s==0 then
term='. Станция является южной конечной '
if found_all_s~=found_total then
term=term..arr_text(arr_s,'prose for short')
elseif found_all_s==1 then
term=term..'для него'
elseif found_all_s==2 then
term=term..'для обоих маршрутов'
else
term=term..'для всех маршрутов'
end
elseif found_all_n==0 and found_diff_n==1 and found_all_s==0 and found_diff_s==1 then
if last_route_n~=last_route_s then
term='. Станция является северной конечной для маршрута '..arr_text(arr_n,'full text')..' и южной конечной для маршрута '..arr_text(arr_s,'full text')
elseif found_total==1 then
term='. Станция является конечной для него: северной '..arr_text(arr_n,'when')..' и южной '..arr_text(arr_s,'when')
else
term='. Станция является конечной для маршрута '..arr_text(arr_s,'route')..': северной '..arr_text(arr_n,'when')..' и южной '..arr_text(arr_s,'when')
end
elseif found_all_s==0 and found_diff_s==0 then
term='. Станция является северной конечной '..arr_text(arr_n,'prose for')
elseif found_all_n==0 and found_diff_n==0 then
term='. Станция является южной конечной '..arr_text(arr_s,'prose for')
elseif found_diff_n==0 and found_diff_s==0 then
term='. Станция является северной конечной '..arr_text(arr_n,'prose for short')..' и южной конечной '..arr_text(arr_s,'prose for short')
else
term='. Станция является северной конечной '..arr_text(arr_n,'prose for')..' и южной конечной '..arr_text(arr_s,'prose for')
end
end
end
return arr_text(arr,fmt,nil,nil,level)..parts..term
end
function station_list_once(arr,sta,cond,route,filter)
for nn,xx in pairs(stations_all()) do
if xx.station==sta then
return station_list_once_given(arr,sta,cond,route,filter,xx.segment,xx.type,xx.sep)
end
end
end
function station_list_once_given(arr,sta,cond,route,filter,seg,typ,sep)
comment0={}
if cond=='ne' and sep=='yes' then
for n,x in pairs(routes_periods) do
if x.segment==seg and x.route==route then
if alt_ok(x) then
--filter не проверяем, разные фильтры с 'ne' вроде не используются
comment0[x.period]=howstops(x.how,x.dir,typ,x.period)
end
end
end
end
for n,x in pairs(routes_periods) do
if x.segment==seg then
if alt_ok(x) then
if cond==nil then
mustrun=true
elseif cond=='eq' then
mustrun=x.route==route
elseif cond=='ne' then
mustrun=x.route~=route
else
mustrun=false
end
if filter then
if filter~='skip' and filter~='exp' and filter~='lcl' then
if string.find('+'..filter..'+','+'..x.period..'+',1,true)==nil
and string.find('+'..filter..'+','+'..x.period..'(1)+',1,true)==nil
and string.find('+'..filter..'+','+'..x.period..'(2)+',1,true)==nil then
mustrun=false
end
end
end
if mustrun then
if typ=='-' then
arr_add(arr,x.route,'-','')
else
if filter=='exp' then
comment=howskips(x.how,x.dir,'o',x.period) --попадаем сюда только если typ=='x'
elseif filter=='lcl' then
comment=howstops(x.how,x.dir,'o',x.period) --попадаем сюда только если typ=='x'
elseif filter=='skip' then
comment=howskips(x.how,x.dir,typ,x.period)
else
comment=howstops(x.how,x.dir,typ,x.period)
end
if comment then
if not(cond=='ne' and sep=='yes' and (
((comment=='peak' or comment=='some peak') and comment0[x.period]=='not peak')
or
((comment0[x.period]=='peak' or comment0[x.period]=='some peak') and comment=='not peak')
)) then
if comment0[x.period]=='1' or comment0[x.period]=='2' then
comment=comment0[x.period]
elseif filter then
if string.find('+'..filter..'+','+'..x.period..'(1)+',1,true) then
comment='1'
elseif string.find('+'..filter..'+','+'..x.period..'(2)+',1,true) then
comment='2'
end
end
arr_add(arr,x.route,x.period,comment)
end
end
end
end
end
end
end
return arr
end
function howstops(how,dir,typ,period,track)
-- typ относится к станции, остальное к расписанию
if period=='also' then
return nil
end
if how==typ or how==nil or typ=='x' then
if dir=='peakonly' or (dir=='peak' and track=='x') then
return 'peak'
elseif dir=='peak+' then
return 'some peak'
elseif dir=='notpeakonly' or (dir=='peak' and track=='o') then
return 'not peak'
elseif dir=='1' or dir=='2' then
return dir
else
return ''
end
elseif dir=='peak' then
return 'not peak'
else
return nil
end
end
function howstops2pic(param,period)
if param==nil then
return icon_nostop
elseif param=='peak' then
return markpeak
elseif param=='some peak' then
return asterisk
elseif param=='not peak' then
return markback
elseif param=='1' or param=='2' then
return ' '..subperiod1(period,param)
else
return markyes
end
end
function howskips(how,dir,typ,period)
-- typ относится к станции, остальное к расписанию
if period=='also' then
return nil
end
if how~=typ and typ~=nil and typ~='x' and how~=nil then
if dir=='peakonly' or dir=='peak' then
return 'peak'
elseif dir=='peak+' then
return 'some peak'
elseif dir=='notpeakonly' then
return 'not peak'
elseif dir=='1' or dir=='2' then
return dir
else
return ''
end
else
return nil
end
end
function stops_ok(how,dir,type,period,subperiod)
comment=howstops(how,dir,type,period)
return comment==subperiod or comment=='' or (comment=='peak' and subperiod=='some peak')
end
function acc_ok(north,acc_station,acc_request)
if not acc_request then
return true
else
return acc_station=='yes' or (acc_station=='n' and north) or (acc_station=='s' and not north)
end
end
function acc_cell(cacc)
if cacc=='yes' then
return accicon
elseif cacc=='n' then
return '<span class="nowrap">'..accicon..'<span title="В северном направлении">↑</span></span>'
elseif cacc=='s' then
return '<span class="nowrap">'..accicon..'<span title="В южном направлении">↓</span></span>'
else
return ''
end
end
function subperiod_ok(subperiod,dir)
if dir=='peak' or dir==nil then
return true
elseif subperiod=='peak' then
return dir=='peakonly'
elseif subperiod=='not peak' then
return dir=='notpeakonly'
elseif subperiod=='some peak' then
return dir=='peakonly' or dir=='peak+'
else
return not ((dir=='1' or dir=='2') and subperiod=='')
end
end
function arr_add(arr,route,period,comment)
if comment==nil then
return
end
if comment~='' then
period=period..'('..comment..')'
end
r=''
if routes[route] then
r=route
end
if arr[r]==nil then
arr[r]={route=r,periods=period}
elseif string.find('+'..arr[r].periods..'+','+'..period..'+',1,true)==nil then
arr[r].periods=arr[r].periods..'+'..period
end
--return arr
end
function normalize(param,forfilter)
if param==nil then
return ''
elseif param=='-' then
return '-'
end
a='+'..param..'+'
b=''
for nn,xx in pairs({'rh','md','ev','we','ln'}) do
if string.find(a,'+'..xx..'+',1,true)~=nil
or (string.find(a,'+'..xx..'(peak)+',1,true)~=nil and string.find(a,'+'..xx..'(not peak)+',1,true)~=nil)
or (string.find(a,'+'..xx..'(1)+',1,true)~=nil and string.find(a,'+'..xx..'(2)+',1,true)~=nil) then
b=b..'+'..xx
elseif forfilter then
if string.find(a,'+'..xx..'(1)',1,true) then
b=b..'+'..xx..'(1)'
elseif string.find(a,'+'..xx..'(2)',1,true) then
b=b..'+'..xx..'(2)'
elseif string.find(a,'+'..xx..'(',1,true) then
b=b..'+'..xx
end
else
if string.find(a,'+'..xx..'(peak)+',1,true) then
b=b..'+'..xx..'(peak)'
elseif string.find(a,'+'..xx..'(some peak)+',1,true) then
b=b..'+'..xx..'(some peak)'
end
if string.find(a,'+'..xx..'(not peak)+',1,true) then
b=b..'+'..xx..'(not peak)'
end
if string.find(a,'+'..xx..'(1)+',1,true) then
b=b..'+'..xx..'(1)'
end
if string.find(a,'+'..xx..'(2)+',1,true) then
b=b..'+'..xx..'(2)'
end
end
end
return string.sub(b,2,string.len(b))
end
function arr_text(arr,fmt,exclude1,exclude2,level)
if arr==nil then
if fmt=='all alltimes' then
return true
elseif fmt=='count letters' or fmt=='count letters full' then
return 0
else
return ''
end
end
if string.sub(fmt,1,5)=='prose' then
cou=arr_text(arr,'count letters full')
end
if level then
level=level..' '
else
level=''
end
sum=''
num=0
all_alltimes=true
alltimesfound=false
for nn,xx in pairs(routes_sorted()) do
if xx.id~=exclude1 and xx.id~=exclude2 then
for n,x in pairs(arr) do
if x.route==xx.id then
label=xx.label
link=xx.link
name=xx.name
periods=normalize(x.periods,fmt=='periods')
x0=icons[periods]
if x0==nil then
x0=icon_fun({icon='',tooltip='нет индикатора: '..periods})
if fmt=='check' then
sum='missing description: '..periods
elseif fmt=='one period' or fmt=='color' then
sum=''
else
sum=noperiods
end
end
title=x0.tooltip
comma=x0.comma
ignore=x0.ignore
if x0.alltimes then
alltimesfound=true
else
all_alltimes=false
end
if not (ignore and (fmt=='count letters' or fmt=='letters' or fmt=='bullets' or fmt=='large bullets')) then
num=num+1
end
if periods=='-' and string.sub(fmt,1,5)=='prose' then
title=nil
end
if fmt=='full small' then
sum=sum..together(xx,x0,4)
elseif fmt=='full' then
sum=sum..together(xx,x0,5)
elseif fmt=='full halftext' then
if sum~='' then
sum=sum..' '
end
sum=sum..'[['..link..'|'..name..']]<sup>'..x0('icon',8,title)..'</sup>'
elseif fmt=='full text' then
if sum~='' then
sum=sum..', '
end
sum=sum..xx('bold')..' ('..title..')'
elseif fmt=='when' then
if sum~='' then
sum=sum..'/'
end
sum=sum..title
elseif fmt=='prose' then
if periods=='-' then
elseif level~='' then
sum=prose(cou,num,sum,false,xx,title,comma,'На станции '..level,'останавливается маршрут','останавливаются маршруты')
else
sum=prose(cou,num,sum,false,xx,title,comma,'На станции','останавливается маршрут','останавливаются маршруты')
end
elseif fmt=='prose skip' then
sum=prose(cou,num,sum,false,xx,title,comma,'Станцию','проходит без остановки маршрут','проходят без остановки маршруты')
elseif fmt=='prose skip split' then
sum=prose(cou,num,sum,false,xx,title,comma,'Экспресс-пути, обходящие станцию стороной по спрямлённой трассе, используются','маршрутом','маршрутами')
elseif fmt=='prose skip under' then
sum=prose(cou,num,sum,false,xx,title,comma,'Экспресс-пути, проходящие под станцией, используются','маршрутом','маршрутами')
elseif fmt=='prose tt' then
sum=prose(cou,num,sum,false,xx,title,comma,'Оборотный путь '..level..'используется','маршрутом','маршрутами')
elseif fmt=='prose exp 1' then
sum=prose(cou,num,sum,false,xx,title,comma,'Экспресс-путь '..level..'используется','маршрутом','маршрутами')
elseif fmt=='prose exp 2' then
sum=prose(cou,num,sum,false,xx,title,comma,'Экспресс-пути '..level..'используются','маршрутом','маршрутами')
elseif fmt=='prose lcl' then
sum=prose(cou,num,sum,false,xx,title,comma,'Локальные пути '..level..'используются','маршрутом','маршрутами')
elseif fmt=='prose semishort' then
sum=prose(cou,num,sum,false,xx,title,comma,'','маршрут','маршруты',true)
elseif fmt=='prose short' then -- ignore does not affect this option
sum=prose(cou,num,sum,false,xx,nil,comma,'','маршрут','маршруты')
elseif fmt=='prose semishort plain' then
sum=prose(cou,num,sum,true,xx,title,comma,'','маршрут','маршруты',true)
elseif fmt=='prose short plain' then -- ignore does not affect this option
sum=prose(cou,num,sum,true,xx,nil,comma,'','маршрут','маршруты')
elseif fmt=='prose for' then
sum=prose(cou,num,sum,false,xx,title,comma,'для','маршрута','маршрутов')
elseif fmt=='prose for short' then -- ignore does not affect this option
sum=prose(cou,num,sum,false,xx,nil,comma,'для','маршрута','маршрутов')
elseif fmt=='prose where' then
sum=prose(cou,num,sum,false,xx,title,comma,'','проходят поезда маршрута','проходят поезда маршрутов')
elseif fmt=='prose where short' then -- ignore does not affect this option
sum=prose(cou,num,sum,false,xx,nil,comma,'','проходят поезда маршрута','проходят поезда маршрутов')
elseif fmt=='prose dash' then
sum=prose(cou,num,sum,false,xx,title,comma,'','— маршрута','— маршрутов')
elseif fmt=='prose dash short' then -- ignore does not affect this option
sum=prose(cou,num,sum,false,xx,nil,comma,'','— маршрута','— маршрутов')
elseif fmt=='prose by' then
sum=prose(cou,num,sum,false,xx,title,comma,'','маршрутом','маршрутами')
elseif fmt=='prose by short' then -- ignore does not affect this option
sum=prose(cou,num,sum,false,xx,nil,comma,'','маршрутом','маршрутами')
elseif fmt=='prose complex' then
if sum=='' then
sum='На станциях пересадочного узла останавливаются маршруты:'
else
sum=sum..','
end
sum=sum..'\r\n* '..xx('bold')..' ('..title..')'
elseif fmt=='letters' and not ignore then
if sum~='' then
sum=sum..', '
end
letter=xx.tooltip
pos=string.find(letter,' ',1,true)
if pos then
sum=sum..string.sub(letter,1,pos-1)
else
sum=sum..letter
end
elseif fmt=='check' then
if sum~='' then
sum=sum..'+'
end
sum=sum..xx.id
elseif fmt=='bkg' and not ignore then
if sum=='' then
sum=xx.bkg
elseif sum==xx.bkg then
else
sum='FFFFFF'
end
elseif fmt=='color' and not ignore then
if sum=='' then
sum=xx.color
elseif sum==xx.color then
else
sum='000000'
end
elseif (fmt=='bullets' and not ignore) or fmt=='bullets all' then
sum=sum..xx('bullet',20)
elseif fmt=='large bullets' and not ignore then
sum=sum..xx('bullet',50)
elseif fmt=='one period' then
sum=sum..xx('bullet',20)
pos=string.find(x.periods,'(',1,true)
if pos then
sum=sum..howstops2pic(string.sub(x.periods,pos+1,string.len(x.periods)-1),string.sub(x.periods,1,pos-1))
end
elseif fmt=='icons' then
sum=sum..x0('icon',10,title)
elseif fmt=='small icons' then
sum=sum..x0('icon',8,title)
elseif fmt=='route' then
sum=sum..xx('bold')
elseif fmt=='periods' then
sum=sum..periods
elseif fmt=='SL V' and not ignore then
sum=sum..'<br><div style="padding:0;margin:0;width:0;left:-2px;">'
sum=sum..'<div style="position:static;display:inline-block;margin-left:-2px;height:10px;">'
sum=sum..xx('bullet',11)..'</div></div><br>'
elseif fmt=='SL H' and not ignore then
sum=sum..'<span style="padding:0;margin:0;vertical-align:middle;">'
sum=sum..'<span style="display:inline-block;margin-left:-2px;margin-right:-2px;line-height:0;padding:0;margin-top:-2px;height:0;">'
sum=sum..xx('bullet',11)..'</span></span>'
elseif fmt=='colors' and not ignore then
if string.find(sum,'|#'..xx.color,1,true)==nil then
sum=sum..'|#'..xx.color
end
end
end
end
end
end
if sum=='' then
for n,x in pairs(arr) do
if x.route=='' then
if x.periods=='' then
sum='нет сообщения'
else
sum=x.periods
end
end
end
--elseif fmt=='prose' and cou>1 and not alltimesfound then
-- sum=sum..'. Станция работает круглосуточно, хотя обслуживается разными маршрутами в разное время'
end
if fmt=='all alltimes' then
return all_alltimes
elseif fmt=='count letters' or fmt=='count letters full' then
return num
else
sum=string.gsub(sum,'%) %(',', ')
return sum
end
end
function prose(cou,num,sum,nolink,xx,title,comma,text0,text1,text2,semishort)
if text0=='' then
prefix=''
else
prefix=text0..' '
end
if cou==1 then
tmp=prefix..text1..' '
elseif cou==2 then
if sum=='' then
tmp=prefix..text2..' '
else
if lastcomma and semishort then
tmp=sum..', и '
else
tmp=sum..' и '
end
end
else
if sum=='' then
if title then
tmp=prefix..text2..': '
else
tmp=prefix..text2..' '
end
elseif num==cou then
if lastcomma and semishort then
tmp=sum..', и '
else
tmp=sum..' и '
end
else
tmp=sum..', '
end
end
if nolink then
tmp=tmp..xx.tooltip
else
tmp=tmp..xx('bold')
end
lastcomma=comma
if title then
if semishort then
return tmp..' '..title
else
return tmp..' ('..title..')'
end
else
return tmp
end
end
function together(xx,x0,size)
local tt=xx.tooltip..' — '..x0.tooltip
local rtn='<span class="nowrap">'..xx('bullet',size*5,tt)
rtn=rtn..'<span style="position:relative;display:inline-block;margin-left:-'..(size*2)..'px;z-index:1;top:-'..size..'px;">'
rtn=rtn..x0('icon',size*2,tt,xx.link)..'</span></span>'
return rtn
end
function station_parts(station)
local list={}
found=false
for n,x in pairs(multiline_stations) do
if x.full==station then
list[x.part]=x.part
found=true
end
end
if not found then
list[station]=station
end
return list
end
function from_part(sta,empty_if_no)
for n,x in pairs(multiline_stations) do
if x.part==sta then
return x.full
end
end
if empty_if_no then
return ''
else
return sta
end
end
function to_complex(sta,empty_if_no)
for n,x in pairs(station_complexes) do
if x.station==sta and x.section~='' then
if alt_ok(x) then
return x.article
end
end
end
if empty_if_no then
return ''
else
return sta
end
end
function to_complex_sec(sta)
for n,x in pairs(station_complexes) do
if x.station==sta and x.section~='' then
if alt_ok(x) then
return '#'..x.section
end
end
end
return ''
end
function routes_sorted()
local list0={}
for n0,x0 in pairs(routes) do
if x0.future==nil or future_on then
table.insert(list0, x0)
end
end
table.sort(list0, function(a,b) return a.label<b.label end)
return list0
end
function stations_all()
if not future_on then
return stations
end
local stations0={}
for n0,x0 in pairs(stations) do
table.insert(stations0, x0)
end
for n0,x0 in pairs(stations_future) do
x=x0
x.future=true
table.insert(stations0, x)
end
return stations0
end
function ita1(future,icon_fu,icon_fo,fo_saved)
if future then
if icon_fu then
return constricon..'<i>'
elseif icon_fo then
if fo_saved then
return closedicon..' <i>'
else
return demolicon..' <i>'
end
else
return '<i>'
end
else
return ''
end
end
function ita2(future)
if future then
return '</i>'
else
return ''
end
end
function tolower(s)
if string.sub(s,1,2)=="Л" then
return "л"..string.sub(s,3,string.len(s))
elseif string.sub(s,1,2)=="Ч" then
return "ч"..string.sub(s,3,string.len(s))
else
return s
end
end
function toupper(s)
if string.sub(s,1,2)=="л" then
return "Л"..string.sub(s,3,string.len(s))
elseif string.sub(s,1,2)=="ч" then
return "Ч"..string.sub(s,3,string.len(s))
else
return s
end
end
function stub_spur(code,text,border)
local right ='|[[Файл:U+2192.svg|20px|link=]]\r\n'
local left ='|[[Файл:U+2190.svg|20px|link=]]\r\n'
local s='|- style="'..grayback
if border then
s=s..bor('left')..bor('right')..'"\r\n'
else
s=s..'"\r\n'
end
s=s..'|colspan=5 align=center|<i>'..text..'</i>\r\n'
s=s..'|colspan=2|\r\n'
s=s..tab..' align=left style="line-height:0;"\r\n'
s=s..'|-\r\n|\r\n'
s=s..tab..' align=center style="line-height:0;"\r\n'
if code=='+w' then
s=s..'| \r\n'..onearrow..'|-\r\n'..right..onefile('S-NW')..'|-\r\n| \r\n'..onearrow
elseif code=='+e' then
s=s..onearrow..'| \r\n|-\r\n'..onefile('S-NE')..left..'|-\r\n'..onearrow..'| \r\n'
elseif code=='-e' then
s=s..onearrow..'| \r\n|-\r\n'..onefile('N-SE')..right..'|-\r\n'..onearrow..'| \r\n'
elseif code=='-w' then
s=s..'| \r\n'..onearrow..'|-\r\n'..left..onefile('N-SW')..'|-\r\n| \r\n'..onearrow
elseif code=='nw' then
s=s..onefile('O')..onearrow..'|-\r\n'..onefile('NE')..onefile('S-NW')..'|-\r\n| \r\n'..onearrow
elseif code=='ne' then
s=s..onearrow..onefile('O')..'|-\r\n'..onefile('S-NE')..onefile('NW')..'|-\r\n'..onearrow..'| \r\n'
elseif code=='sw' then
s=s..'| \r\n'..onearrow..'|-\r\n'..onefile('SE')..onefile('N-SW')..'|-\r\n'..onefile('O')..onearrow
elseif code=='se' then
s=s..onearrow..'| \r\n|-\r\n'..onefile('N-SE')..onefile('SW')..'|-\r\n'..onearrow..onefile('O')
end
s=s..'|}\r\n|}\r\n'
return s
end
function onefile(what)
return '|align=center style="width:0;background-color:black;"|[[Файл:SMicon '..what..' lightgrey.svg|20px|link=]]\r\n'
end
function bor(where)
return 'border-'..where..':2px solid black;'
end
function bor0(where)
return 'border-'..where..':0px none transparent;'
end
--
return p
-- =p.station_full{args={'57-я улица (линия Шестой авеню, Ай-эн-ди)'}}
- 2020-12-04
- 1