Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[transit] GTFS converter. #12946

Merged
merged 3 commits into from May 25, 2020
Merged

Conversation

mesozoic-drones
Copy link
Contributor

@mesozoic-drones mesozoic-drones commented Apr 14, 2020

@bykoianko @darina @maksimandrianov PTAL

Описание утилиты для генерации json с необходимыми данными из GTFS-фидов

Исполняемый файл gtfs_converter. Параметры:

  • path_mapping - путь к мапингу сущностей GTFS на константные, не меняющиеся при перезапуске id из интервала FakeFeatureIds::IsTransitFeature(). Файл нужен, чтобы при перегенерации json'ов id не менялись, и у пользователя с разными версиями карт ничего бы не сломалось.
  • path_gtfs_feeds - путь к директории с поддиректориями, содержащими фиды.
  • path_directory_json - путь к директории для сохранения json'ов.
  • path_resources_dir - путь к omim/data. Нужен для работы color picker'а, притягивающего цвет route к ближайшему цвету из data/transit_colors.txt.
  • start_feed - опциональный параметр. С какого фида продолжить работу. Указывается название директории с фидом. Все фиды до данного пропускаются.
  • stop_feed - опциональный параметр. на каком фиде остановить работу. Все фиды после данного не обрабатываются.

Пример запуска для обработки всех фидов в path_gtfs_feeds:
./gtfs_converter --path_gtfs_feeds=feeds --path_json=jsons_for_generator --path_mapping=mapping.txt --path_resources=omim/data

Пример запуска для обработки только двух фидов - директорий с названиями "10" и "11":
./gtfs_converter --path_gtfs_feeds=feeds --path_json=jsons_for_generator --path_mapping=mapping.txt --path_resources=omim/data --start_feed="10" --stop_feed="11"
В случае запуска с какого-то фида (указан start_feed), происходит дозапись в файлы из path_json. Если же этот параметр не указан, вместо дозаписи файлы полностью перезаписываются.

Новый формат данных для работы с общественным транспортом

Этот реквест реализует пайплайн преобразования директорий с GTFS-фидами (каждый из которых состоит из csv-файлов) в набор line-by-line json'ов.
Путь к директории с результирующими json должен быть прописан для генератора в map_generator.ini вместо SUBWAY_URL. Генератор на основе json подготовит соответствующие mwm-секции для работы с общественным транспортом в приложении.

Планируется переписать для работы с новым форматом общественного транспорта часть генератора, движка отрисовки и транзит роутинга.

Отличия новых json-файлов от старого формата json, в котором поставлялось метро:

  • Несколько файлов вместо единого.
  • Line-by-line json вместо обычного.
  • Замена osm id и внутреннего id на единый TransitId, который сохраняется между перегенерациями карт разных версий. TransitId либо находится в интервале FakeFeatureIds::IsTransitFeature(), и тогда он обозначает сущность из GTFS или метро, либо лежит в интервале обычных OSM id, и тогда обозначает те сущности метро, которые ссылаются на объекты OSM (выходы из метро и тд).

Разбивка по сущностям, отличная от старой. Поля тоже отличаются. Ниже приведена схема, описания файлов и их полей и примеры строк.

jsons

**networks.json** - операторы - id - название оператора. Здесь и далее поля названия представляют собой мапу айди языка - текст. Если в GTFS feed_info.txt отсутствует информаци о языке, то по умолчанию ставится английский.
{"id":4048948901,"title":[{"lang":"en","text":"LA Go Bus"}]}

routes.json - маршруты. Один маршрут может состоять из нескольких lines

  • id
  • id оператора, к которому привязан маршрут
  • цвет линии
  • тип общественного транспорта
  • название маршрута
{"id":4048915470,"network_id":4048915465,"color":"blue","type":"rail","title":[{"lang":"en","text":"Special Event Extra Service"}]}

lines.json - линии маршрута. У двух линий одного и того же маршрута могут не совпадать: полилиния; список остановок; даты работы и дни-исключения в графике работы; расписание работы. То есть линией может быть не только "маршрут от одной конечной до другой" и "в обратную сторону", но и один и тот же отрезок пути, но с совершенно разными расписаниями. Или один и тот же отрезок пути, но с разным списком остановок и разными интервалами.

  • id
  • route id - маршут, к которому относится линия
  • shape id - полилиния для данного line DELETED
  • ShapeLink - "ссылка" на кусок shape, относящейся к этой линии. Состоит из: shape id, start idex, end index. ADDED
  • stop ids - список остановок. Остановки перечислены в порядке следования транспорта по данной линии.
  • название линии
  • интервалы циркуляции транспорта по этой линии. Могут быть не заполнены. Интервал - это пара значений: промежуток в секундах и отрезок дня, для которого он действителен. Отрезок дня - в формате osm opening hours. Таким образом интервал зависит от времени: интервал движения автобуса с 10:00 до 12:00 каждые 15 минут, c 12:01 до 18:00 каждые 10, а c 18:01 до 22:00 каждые 20 минут. UPDATE
  • osmoh::OpeningHours дни работы - в формате osm opening hours хранится информация, по каким дням недели начиная с какого числа и заканчивая каким числом эта линия активна или не активна, учитываются и исключения в расписании.
{"id":4047400409,"route_id":4048911702,"shape":{"id":4048914922,"start_index":0,"end_index":205},"title":[{"lang":"en","text":""}],"stops_ids":[4048915038,4047400615,4047400616,4048915039,4047400617,4047400618,4048915040,4047400620,4048915041,4047400621,4047400622,4048915042,4047400624,4047400625,4047400626,4047400627,4047400628,4047400629,4048915043,4047400631,4047400632,4048915044,4047400634,4047400635,4047400636,4047400637,4047400638,4047400639,4047400640,4047400641,4047400642,4048915045,4047400644,4047400645,4048915046,4048915047,4047400647,4048915048,4047400648,4047400649,4048915049,4047400651,4047400652,4026542873,4048915050,4047400654,4047400655,4048915051,4047400657,4036441623,4048915052,4047400658,4047400659,4048915053,4047400661,4047400662,4047400663],"service_days":"2020 Apr 18-2020 May 29 Sa-Sa; 2020 Apr 18-2020 May 29 Su-Su closed","intervals":[]}

shapes.json - полилинии

  • id
  • вектор m2::PointD точек - полилиния
{"id":4048914807,"points":[{"x":-122.42373600000001,"y":40.775536922248669},{"x":-122.422065,"y":40.774955435607225},{"x":-122.421807,"y":40.774866948826073},{"x":-122.42111981639971,"y":40.774521158122255},{"x":-122.421081,"y":40.774501625714656},{"x":-122.41952658685517,"y":40.77395581671977},{"x":-122.394953,"y":40.873905644937466},{"x":-122.394987,"y":40.87402079957468}]}

stops.json - остановки

  • id
  • lines ids - список линий маршрутов, относящихся к этой остановке DELETED
  • m2::PointD - координата остановки.
  • название остановки - нужно, потому что больше его взять попросту неоткуда. В метро этого поля не было, потому что название подтягивалось из ОСМ.
  • расписание. NEW пары line id - osmoh:: OpeningHours. Для каждой линии, проходящей через остановку, список времен прибытие-отбытие.
{"id":4047401815,"point":{"x":-122.469273,"y":40.765036587936251},"title":[{"lang":"en","text":"Daly City Bart Station"}],"timetable":[{"line_id":4047391414,"arrivals":"05:20-05:20 open"},{"line_id":4047391416,"arrivals":"04:05-04:05 open"}]}

edges.json - ребра дорожного графа по линиям

  • id from_stop
  • id to_stop
  • line id
  • вес - сколько секунд потребуется, чтобы по линии line id добраться от from_stop до to_stop.
  • ShapeLink - "ссылка" на кусок полилинии, описывающий это ребро.
    Состоит из: shape id, start idex, end index. По shape id определяется shape, и внутри ее вектора точек находится отрезок от start idex до end index включительно.
{"line_id":4047391343,"stop_id_from":4048915463,"stop_id_to":4048915464,"weight":59,"shape":{"id":4047391340,"start_index":541,"end_index":545}}

edges_transfer.json - ребра дорожного графа по пересадкам

  • id from_stop
  • id to_stop
  • вес - сколько секунд потребуется, чтобы сделать переход с from_stop к to_stop.
{"stop_id_from":4046917465,"stop_id_to":4046917441,"weight":180}

transfers.json - пересадочные узлы

  • id
  • m2::PointD - координата пересадки.
  • stops ids - список остановок, относящихся к этому пересадочному узлу.
{"id":4046920600,"point":{"x":-117.15321790199999,"y":34.641982917905516},"stops_ids":[4046919060,4048936712]}

gates.json - входы/выходы

  • id
  • is exit
  • is entrance
  • пары id остановки - вес UPDATED- сколько секунд потребуется, чтобы пройти расстояние от gate до остановки. Список остановок и их весов.
{"id":4048918257,"weights":[{"stop_id":4048918228,"time_to_stop":198},{"stop_id":4048918218,"time_to_stop":198},{"stop_id":4048918215,"time_to_stop":198},{"stop_id":4048918210,"time_to_stop":198}],"exit":true,"entrance":true,"point":{"x":-74.061300000000003,"y":44.671850577887199}}

Особенности реализации

  • В 99% фидов отсутствуют подсказки о матчинге последовательности остановок на полилинию маршрута. Поэтому в методе WorldFeed::ModifyShapes() реализован алгоритм, который по полилинии маршрута, последовательности остановок и их координатам проецирует остановки на ближайший участок маршрута. При необходимости добавляет точку-проекцию в полилинию маршрута и обновляет соответствующие ссылки на данную полилинию (edges, lines).

  • В фидах присутствуют полилинии, которые целиком включены в другие, более длинные полилинии. Чтобы не дублировать данные, метод WorldFeed::ModifyLinesAndShapes() удаляет такие shape, и обновляет ссылки из элементов line на shape.

  • В нашей 3party реализации opening hours отсутствует возможность задавать тип Event вместо интервала (то есть единственное время или единственную дату вместо пары начало-конец). Поэтому в расписании прибытия транспорта на остановку всегда присутствует начало-конец, даже если они совпадают.

  • Почти во всех фидах отсутствует прямое указание языка фида (оно должно быть в feed_info.txt). В методе WorldFeed::SetFeedLanguage() за язык по умолчанию считается "default", который есть в languages.txt и означающий язык, используемый в данной местности. Если в фиде указан язык, он ищется в нашем списке поддерживаемых языков. Если его там нет, язык фида сбрасывается в "default".

@mesozoic-drones
Copy link
Contributor Author

@maksimandrianov интересует твой апрув дескрипшена реквеста - нет ли какой лажи в формате json'ов для генератора. Исходники реквеста пока не надо)

{
TransitId m_routeId = 0;
std::vector<TransitId> m_stopsIds;
TransitId m_shapeId = 0;
Copy link
Contributor

@darina darina Apr 17, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

То есть в случае метро, скажем, для сокольнической линии, у нас будет продублирована одна и та же полилиния для направления туда и обратно, только точки в ней будут храниться в обратном порядке? Так же для московского метро были отдельные линии не только для направления туда-обратно, но и укороченные версии, когда поезд не доезжает до конечной станции, а уходит раньше в депо. Для таких случаев полилинии тоже будут отдельные?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, получается, что для метро это будут пары - вектор точек и инвертированный вектор. Относительно общего количества полилиний - автобусов, поездов и тд, это очень небольшой процент, поэтому мне показалось избыточным оптимизировать этот кейс.

А можно поподробнее про укороченные версии с депо? Кажется, мы это сейчас не используем. Какие могут быть кейсы отображения пользователю линии метро:
на общей карте (и там показываются самые длинные полилинии),
как участки построенного им пути (и там депо тоже не нужно).

Или есть что-то еще?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А можно поподробнее про укороченные версии с депо?

Действительно в Москве в метро часто делают укороченные ветки, в час пик. Чтоб больше поездов проходило через центр. Я жил на фиолетовой ветки и на зеленой, на северозападе. Тут такие станции Октябрьское поле и Сокол. Т.е. имеет
line 1: Планерная - Котельники
line 2: Котельники - Планерная
line 3: Октябрьское поле - Котельники
line 4 Котельники - Октябрьское поле
и еще 2 с какой-то станции на стороне Котельников. Выхино или Кузьминки, не помню.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Понятно. Тогда предлагаю в lines добавить "ссылку" на shape, такую же, как в edges.json:
EdgeShapeLink - "ссылка" на кусок полилинии. Состоит из: shape id, start index, end index. По shape id определяется shape, и внутри ее вектора точек находится отрезок от start idex до end index включительно.

Это оптимизирует хранение линий, являющихся "под-линиями" других линий.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@darina @bykoianko Такой вариант подойдет?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Реализовано через ссылку на shape, содержащую id полилинии и индексы начала и конца на полилинии.

{
std::set<TransitId> m_linesIds;
m2::PointD m_point;
std::string m_title;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Будет ли это это полной заменой имени, которое мы сейчас достаем из фичи? Если да, то потребуются имена для разных локалей.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Имя нужно для GTFS сущностей, дополнительные данные для которых нельзя достать из ОСМ. Как вариант, для остановок метро можно оставить поле osm id, которое для GTFS будет в не валидном состоянии (max val или 0). Что думаешь?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Как вариант, для остановок метро можно оставить поле osm id, которое для GTFS будет в не валидном состоянии (max val или 0). Что думаешь?

Кажется, что если у нас есть строчное поле, то в него можно запихнуть название остановки и не держать ни какого osm id. Но возникает вопрос с переводами. Думаю, что почти всегда у нас не будет более чем 2-3 языков с названием остановки. Т.е. остановки метро в Москве - это 2 языка. В остановки автобуса МО - один. Если в стране 2 гос языка, то они + английский максимум. Кажется где-то на этапе генерации можно было бы их сформировать и дальше использовать.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

То есть заменить std::string m_title на мапу "айди языка" - текст названия?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Из осмовых фич мы сейчас достаем локализованное имя остановки и иконку для gate. Если переводы имени можно упаковать в json, то как быть с иконками? В mwm для gate будет доступен FeatureType с теми же типами, только c FeatureId в интервале FakeFeatureIds? И тогда согласно стилю для такого FeatureType можно будет достать его иконку?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для сущностей метро, которые приехали из ОСМ, предлагаю в поле id не генерить айди, а использовать айди осма. В рантайме проверять, что !FakeFeatureIds::IsTransitFeature(), и тогда для нее делать все то, что ты описала.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мне ок такой вариант.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

То есть заменить std::string m_title на мапу "айди языка" - текст названия?

Отличный вариант. Только надо так сделать, чтоб id языка было такое же, как у нас в программе везде.

Для сущностей метро, которые приехали из ОСМ, предлагаю в поле id не генерить айди, а использовать айди осма. В рантайме проверять, что !FakeFeatureIds::IsTransitFeature(), и тогда для нее делать все то, что ты описала.

По мне хороший вариант.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Готово.

@bykoianko
Copy link
Contributor

В lines.json хранятся stop ids для каждой линии и в stops.json хранятся line ids линий для данной остановки. Верно? А нам нужно это дублирование на уровне json? Я не сколько о размере думаю, сколько о том, что потребуется согласованность серьезная между ними. Т.е. нужно после парсинга проверять, что если для остановки номер 123 есть линии, 5, 7 и 9, то в этих линия есть остановка 123.

Как вариант, могу предложить получать линии, которые проходят через данную остановку из lines.json

@bykoianko
Copy link
Contributor

edges.json
вес - сколько секунд потребуется, чтобы по линии line id добраться от from_stop до to_stop.

Вес дуги графа? Верно? А как ты планируешь (и планируешь ли) этот вес увязывать с расписанием?

@bykoianko
Copy link
Contributor

gates.json - входы/выходы
вес - сколько секунд потребуется, чтобы пройти расстояние от gate до остановок.

веса?

@bykoianko
Copy link
Contributor

osmoh::RuleSequence расписание - в формате osm opening hours хранится информация, по каким дням недели, с какими перерывами эта линия активна.

Т.е. мы не планируем поддержать расписание, типа: 3 автобуса в 9:00, в 10:00 и в 20:00 по будням и один в 9:30 по выходным?

@bykoianko
Copy link
Contributor

routes.json
цвет линии

Когда линий много, как в больших метро люди начинают путаться? Может нам как-то заложить на не только цвет, но и разные начертания линии? Ну пунктиром там, не знаю. Глянь, где как обозначаются.

@mesozoic-drones
Copy link
Contributor Author

В lines.json хранятся stop ids для каждой линии и в stops.json хранятся line ids линий для данной остановки. Верно? А нам нужно это дублирование на уровне json? Я не сколько о размере думаю, сколько о том, что потребуется согласованность серьезная между ними. Т.е. нужно после парсинга проверять, что если для остановки номер 123 есть линии, 5, 7 и 9, то в этих линия есть остановка 123.

Как вариант, могу предложить получать линии, которые проходят через данную остановку из lines.json

Я оставила эту логику, потому что она действует сейчас для метро. Я бы тоже убрала дублирование на уровне json, и пополняла список линий для каждой остановки на этапе генератора. @maksimandrianov Что скажешь?

@mesozoic-drones
Copy link
Contributor Author

edges.json
вес - сколько секунд потребуется, чтобы по линии line id добраться от from_stop до to_stop.

Вес дуги графа? Верно? А как ты планируешь (и планируешь ли) этот вес увязывать с расписанием?

Да, это вес дуги графа. Для увязки с расписанием в транзитном роутинге нужна работа с полем "osmoh::RuleSequence расписание", привязанном к line. Что-то типа access:conditional, только про расписание) С какого часа по какой работает, в какие дни месяца/недели, есть ли перерывы. И от этого отталкиваться.

@mesozoic-drones
Copy link
Contributor Author

gates.json - входы/выходы
вес - сколько секунд потребуется, чтобы пройти расстояние от gate до остановок.

веса?

Вес, 1 штука. Сейчас для метро так сделано.

@bykoianko
Copy link
Contributor

lines.json

Кажется что линии могут называться на разных языках.

@bykoianko
Copy link
Contributor

Вес, 1 штука. Сейчас для метро так сделано.

А это правильно. Кажется, что часто бывают ситуации когда вход один, а остановок несколько. И требуется разное время, чтоб добраться до каждой их них.

@mesozoic-drones
Copy link
Contributor Author

mesozoic-drones commented Apr 20, 2020

osmoh::RuleSequence расписание - в формате osm opening hours хранится информация, по каким дням недели, с какими перерывами эта линия активна.

Т.е. мы не планируем поддержать расписание, типа: 3 автобуса в 9:00, в 10:00 и в 20:00 по будням и один в 9:30 по выходным?

Ну, это поле нужно, чтобы получить информацию про то, когда и как этот маршрут работает. А чтобы знать расписание конкретных остановок, к остановке можно привязать мапу line id - osmoh::RuleSequence. И в ней для твоего примера получится что-то типа
Mo-Fr 09:00-09:02, 10:00-10:01, Sa-Su 09:30-09:31 open
Поправь, если ошиблась. В этом примере учитывается длительность стоянки, и это хорошо. У нас есть возможность ее забирать из arrival_time, departure_time файла stop_times.txt

Что думаешь?

@bykoianko
Copy link
Contributor

В lines.json хранятся stop ids для каждой линии и в stops.json хранятся line ids линий для данной остановки. Верно? А нам нужно это дублирование на уровне json? Я не сколько о размере думаю, сколько о том, что потребуется согласованность серьезная между ними. Т.е. нужно после парсинга проверять, что если для остановки номер 123 есть линии, 5, 7 и 9, то в этих линия есть остановка 123.
Как вариант, могу предложить получать линии, которые проходят через данную остановку из lines.json

Я оставила эту логику, потому что она действует сейчас для метро. Я бы тоже убрала дублирование на уровне json, и пополняла список линий для каждой остановки на этапе генератора. @maksimandrianov Что скажешь?

Если уж мы взялись переделывать json и transit, то кажется в нем стоит учесть недоделки которые у нас были раньше. По возможности, конечно. Но по любому, мы не часто будем его переделывать.

@darina
Copy link
Contributor

darina commented Apr 20, 2020

routes.json
цвет линии

Когда линий много, как в больших метро люди начинают путаться? Может нам как-то заложить на не только цвет, но и разные начертания линии? Ну пунктиром там, не знаю. Глянь, где как обозначаются.

Возможно, будет полезен паттерн пунктира, цвет линии и цвет ее обводки.

@mesozoic-drones
Copy link
Contributor Author

routes.json
цвет линии

Когда линий много, как в больших метро люди начинают путаться? Может нам как-то заложить на не только цвет, но и разные начертания линии? Ну пунктиром там, не знаю. Глянь, где как обозначаются.

Сейчас у нас в transit_colors.txt лежит около 36 цветов. Даша объяснила, что эти цвета составляли дизайнеры с учетом стиля нашей карты. Кажется, пока хватает. А маршруты наземного транспорта мы не будем показывать по несколько за раз.

Обозначение не только цветом, но и толщиной или типом линии я встречала на картах, где нужно отобразить ВСЕ маршруты общественного транспорта. Это не наш случай.

@darina
Copy link
Contributor

darina commented Apr 20, 2020

Сейчас у нас в transit_colors.txt лежит около 36 цветов. Даша объяснила, что эти цвета составляли дизайнеры с учетом стиля нашей карты. Кажется, пока хватает. А маршруты наземного транспорта мы не будем показывать по несколько за раз.

У нас уже не хватает просто цвета, например, в Москве после добавления линий аэроэкспрессов и мцд стало сложно понять, где метро, а где нет. В планах стоит задача рисовать такие линии по-разному.

@maksimandrianov
Copy link
Contributor

В lines.json хранятся stop ids для каждой линии и в stops.json хранятся line ids линий для данной остановки. Верно? А нам нужно это дублирование на уровне json? Я не сколько о размере думаю, сколько о том, что потребуется согласованность серьезная между ними. Т.е. нужно после парсинга проверять, что если для остановки номер 123 есть линии, 5, 7 и 9, то в этих линия есть остановка 123.
Как вариант, могу предложить получать линии, которые проходят через данную остановку из lines.json

Я оставила эту логику, потому что она действует сейчас для метро. Я бы тоже убрала дублирование на уровне json, и пополняла список линий для каждой остановки на этапе генератора. @maksimandrianov Что скажешь?

я за, давай уберем

Copy link
Contributor

@maksimandrianov maksimandrianov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM
пингани, пожалуйста, в сл или в этом реквесте, когда интеграционные тесты будут

@mesozoic-drones
Copy link
Contributor Author

LGTM
пингани, пожалуйста, в сл или в этом реквесте, когда интеграционные тесты будут

Договорились.
@bykoianko @darina Если вы не против, сделаю это в отдельном реквесте. Подготовлю пару небольших фидов и загружу их на сервак по аналогии с features-2019_07_17__13_39_20 в интеграционных тестах генератора.

@mesozoic-drones
Copy link
Contributor Author

JTALL

1 similar comment
@mesozoic-drones
Copy link
Contributor Author

JTALL

@mesozoic-drones
Copy link
Contributor Author

JTLINUX

6 similar comments
@mesozoic-drones
Copy link
Contributor Author

JTLINUX

@mesozoic-drones
Copy link
Contributor Author

JTLINUX

@mesozoic-drones
Copy link
Contributor Author

JTLINUX

@mesozoic-drones
Copy link
Contributor Author

JTLINUX

@ToshUxanoff
Copy link
Contributor

JTLINUX

@mesozoic-drones
Copy link
Contributor Author

JTLINUX

@mesozoic-drones
Copy link
Contributor Author

JTLINUXGCC

@bykoianko
Copy link
Contributor

У линии есть список остановок. Есть ли какие-то гарантии на порядок этих остановок в списке? Они идут в порядке следования?

world_feed
gflags
)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лишняя?

@mesozoic-drones
Copy link
Contributor Author

У линии есть список остановок. Есть ли какие-то гарантии на порядок этих остановок в списке? Они идут в порядке следования?

Да, есть гарантия, что этот порядок - и есть порядок остановок на линии.

@bykoianko
Copy link
Contributor

У линии есть список остановок. Есть ли какие-то гарантии на порядок этих остановок в списке? Они идут в порядке следования?

Да, есть гарантия, что этот порядок - и есть порядок остановок на линии.

Может напишем про это где-нибудь в коде? Или написано уже?

@bykoianko
Copy link
Contributor

А результирующий json куда пойдет дальше? Где будет обработан?

@bykoianko
Copy link
Contributor

Надо бы по результатам работа с общ транспортом написать статью в confluence.

@mesozoic-drones
Copy link
Contributor Author

У линии есть список остановок. Есть ли какие-то гарантии на порядок этих остановок в списке? Они идут в порядке следования?

Да, есть гарантия, что этот порядок - и есть порядок остановок на линии.

Может напишем про это где-нибудь в коде? Или написано уже?

Добавила комментарий над этим полем (m_stopIds) в LineData.

@mesozoic-drones
Copy link
Contributor Author

А результирующий json куда пойдет дальше? Где будет обработан?

В generator_tool. Это есть в комментариях.

@mesozoic-drones
Copy link
Contributor Author

Надо бы по результатам работа с общ транспортом написать статью в confluence.

Да, когда замержим реквест, перенесу его дескрипшен в новую статью в confluence.

Copy link
Contributor

@bykoianko bykoianko left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@mesozoic-drones
Copy link
Contributor Author

JTALL

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants