Транспортный справочник
Транспортный справочник - это приложение, которое оперирует базой данных остановок и маршрутов и позволяет получать статистические данные, строить карту маршрутов и находить кратчайший маршрут.
Любые запросы к транспортному справочнику передаются и получаются через JSON-файлы. Для заполнения базы данных транспортного справочника используются запросы base_requests. Для получения данных из транспортного справочника используются запросы stat_requests. Кроме того, для настройки параметров карты используется запрос render_settings, а для настройки параметров движения транспорта - запрос routing_settings.
Запросы base_requests на заполнение базы данных бывают двух типов:
-
"Bus" - информация о маршруте; состоит из названия, списка остановок, типа маршрута (кольцевой/некольцевой).
Пример запроса:
{
"is_roundtrip": false,
"name": "35",
"stops": [
"Gastello",
"TRK Piter"
],
"type": "Bus"
}
-
"Stop" - информация об остановке; состоит из названия, gps-координат, реального расстояния до других остановок.
Пример запроса:
{
"latitude": 55.555871,
"longitude": 37.69087,
"name": "Gastello",
"road_distances": {
"TRK Piter": 1500
},
"type": "Stop"
}
Запросы stat_requests на получение данных бывают следующих типов:
-
"Bus" - информация о маршруте
Пример запроса:
{
"id": 2,
"name": "35",
"type": "Bus"
}
Ответом на такой запрос будут статистические данные о маршруте:
{
"curvature": 0.796523,
"request_id": 2,
"route_length": 10180,
"stop_count": 6,
"unique_stop_count": 5
}
-
"Stop" - информация об остановке
Пример запроса:
{
"id": 3,
"name": "Moskovskaia metro station",
"type": "Stop"
}
Ответом на такой запрос будут статистические данные об остановке:
{
"buses": [
"297",
"35"
],
"request_id": 3
}
-
"Route" - кратчайший маршрут от остановки до остановки, учитывая время в пути и время на пересадки
Пример запроса:
{
"from": "Tipanova",
"id": 5,
"to": "Pochta",
"type": "Route"
}
Ответом на такой запрос будет информация об ожидании на пересадочных остановках и о необходимых маршрутах, а также общее время в пути:
{
"items": [
{
"stop_name": "Tipanova",
"time": 6,
"type": "Wait"
},
{
"bus": "297",
"span_count": 1,
"time": 3.9,
"type": "Bus"
},
{
"stop_name": "Gagarina",
"time": 6,
"type": "Wait"
},
{
"bus": "43",
"span_count": 1,
"time": 3.1,
"type": "Bus"
}
],
"request_id": 5,
"total_time": 19.0
}
-
"Map" - SVG-карта маршрутов и остановок
Пример запроса:
{
"id": 6,
"type": "Map"
}
Ответом на такой запрос будет текстовое представление SVG-файла:
{
"map": "<?xml version="1.0" encoding="UTF-8" ?><svg xmlns="http://www.w3.org/2000/svg" version="1.1"> ... </svg>",
"request_id": 6
}
Пример карты:
В файлах input.json и output.json приведён пример с запросами к транспортному справочнику и ответов на них. В файле output.svg представлена карта данного примера. Другие примеры могут быть высланы по личной просьбе.
ООП, шаблоны, method chaining, стандартные алгоритмы, JSON, SVG, графы.