Когда вы пользуетесь навигатором, вы указываете точку А и точку Б, и дальше навигатор как-то сам строит маршрут. Сегодня посмотрим, что лежит в основе алгоритма, который это делает. Просто ради интереса.
Графы и «задача коммивояжёра»
Ещё до появления навигаторов у людей была такая же проблема: как найти кратчайший путь из одного места в другое, если есть ограниченное количество промежуточных точек? Или как объехать ограниченное количество точек, затратив минимальные усилия. В общем виде это называется «задачей коммивояжёра», и мы уже рассказывали, в чём там идея:
- есть несколько городов, и мы знаем расстояния между двумя любыми городами;
- в классической задаче нельзя дважды заезжать в один и тот же город, но в жизни — можно;
- если городов мало, то компьютер справится с задачей простым перебором, а если их больше 66 — то уже нет;
- кроме расстояния, иногда важно учесть время, комфорт и общую длительность поездки;
- есть много приблизительных алгоритмов, которые дают более-менее точный результат.
Если взять просто города и расстояния между ними, то с точки зрения математики это называется графом: города будут вершинами графа, а дороги между ними — рёбрами графа. Если мы знаем длину каждой дороги, то это будет значением (весом) рёбер графа. Этой теории нам уже хватит, чтобы понять, как работает навигатор в машине.
Алгоритм Дейкстры — ищем самый быстрый путь
Как только появилось решение полным перебором, математики стали искать другой подход, который работал бы гораздо быстрее и не требовал бы вычисления такого огромного объёма данных. В 1959 году Эдсгер Дейкстра придумал свой алгоритм, которым пользуются до сих пор. Идея его в том, чтобы не перебирать все варианты, а находить самый короткий путь только между соседними графами — и так, шаг за шагом, продвигаться к конечной точке.
Допустим, у нас есть улицы, перекрёстки и мы знаем время пути между ними. Нарисуем это в виде графа, а чтобы было проще ориентироваться — сделаем визуально всё одинаковой длины:
Чтобы найти самый быстрый путь из А в Б, мы смотрим сначала, какие пути у нас выходят из точки А. Видно, что поехать вниз будет быстрее, чем поехать направо:
Значит, выбираем путь вниз. Теперь делаем то же самое для этой точки — смотрим, где быстрее: справа или внизу. Вниз быстрее (1 меньше, чем 4), поэтому едем по ней:
При этом мы не отбрасываем уже сделанные вычисления (всё равно уже посчитали), а запоминаем их на всякий случай. Из нижней точки есть только одна дорога — направо, поэтому едем по ней:
А теперь у нас получилась интересная ситуация: в центральную точку мы можем попасть как сверху, так и снизу, при этом и там, и там у нас одинаковое время — 3 минуты. Значит, посчитаем оба варианта — вдруг сверху будет быстрее и нам нужно будет перестроить маршрут заново:
Оказывается, снизу ехать до центра быстрее, чем сверху — 4 минуты вместо 6, поэтому оставляем нижний маршрут. Наконец, из центральной точки до точки Б всего один путь — направо, поэтому выбираем его:
Как видите, нам не пришлось считать все варианты со всеми точками, а до некоторых мы просто не добрались. Это сильно сэкономило время и потребовало меньше ресурсов для вычисления.Такой алгоритм и лежит в основе автомобильных навигаторов — с вычислениями справится даже бюджетный смартфон.
Что ещё учитывает навигатор
Чтобы алгоритм оставался простым и работал только со временем, все остальные параметры дорог тоже привязывают ко времени. Покажем, как это работает, на паре примеров.
Комфорт. Если нам нужно построить не самый быстрый, а самый комфортный маршрут, то мы можем отдать предпочтение автомагистралям и дорогам с несколькими полосами — на них обычно и асфальт получше, и резких поворотов поменьше. Чтобы навигатор выбирал именно такие дороги, им можно присвоить коэффициент 0,8 — это виртуально сократит время на дорогу по ним на 20%, а навигатор всегда выберет то, что быстрее.
С просёлочными и грунтовыми дорогами ситуация обратная. Они редко бывают комфортными, а значит, им можно дать коэффициент 1,3, чтобы они казались алгоритму более долгими и он старался их избегать. А лесным дорогам можно поставить коэффициент 5 — навигатор их выберет, только если это единственная дорога то точки назначения.
Сложность маршрута и реальное время. Маршрут из А в Б почти никогда не бывает прямым — на нём всегда есть повороты, развороты и съезды, которые отнимают время. Чтобы навигатор это учитывал, в графы добавляют время прохождения поворота — либо коэффициентом, либо отдельным параметром. Из-за этого алгоритм будет искать действительно быстрый маршрут с учётом геометрии дорог.
Пробки. Если есть интернет, то всё просто: навигатор получает данные о состоянии дорог и добавляет разные коэффициенты в зависимости от загруженности. Иногда навигатор ведёт дворами, когда трасса свободна — это не ошибка навигатора, а его прогноз на время поездки: если через 10 минут в этом месте обычно собираются пробки, то там лучше не ехать, а заранее поехать в объезд.
Если интернета нет, то алгоритм просто использует усреднённую модель пробок на этом участке. Эта модель скачивается заранее и постоянно обновляется в фоновом режиме.
Как построить маршрут по всей России
Если нам нужно построить маршрут из Брянска в Тулу, то с точки зрения компьютера это безумно сложная задача: ему нужно перебрать десятки тысяч улиц и миллионы перекрёстков, чтобы понять, какой путь выбрать. С этим плохо справляется даже обычный компьютер, не говоря уже о телефоне.
Если мы в Яндекс Картах построим такой маршрут, то навигатор нам предложит сразу 4 варианта:
Но мы не ждали полчаса, пока сервер на той стороне посчитает все перекрёстки, а получили результат через пару секунд. Хитрость в том, что алгоритм использует уже заранее просчитанные варианты маршрутов и подставляет их для ускорения.
Например, если мы поедем в Тулу не из Брянска, а из Синезёрок, то поменяется только начальный маршрут по трассе М3, а всё остальное останется прежним:
Получается, что навигатору не нужно всё пересчитывать — он находит только ключевые точки пути, а маршрут между ними уже просчитан до этого. Этот приём работает и при перестроении маршрута во время движения: навигатор смотрит, как нужно поменять путь, чтобы вернуть вас на уже известную дорогу.
Что дальше
Следующий этап — напишем алгоритм Дейкстры сами и посмотрим, как он работает по шагам.
Вёрстка:
Кирилл Климентьев
Как проложить и посмотреть маршрут
На Google Картах можно проложить маршрут для поездки на собственном автомобиле или совместной поездки, для поездки на мотоцикле, велосипеде или общественном транспорте, для пешей прогулки и для перелета на самолете. Лучший маршрут будет отмечен на карте синим цветом, а остальные – серым. Некоторые маршруты на Google Картах находятся в разработке, поэтому доступны не всем пользователям.
Примечание. Двигаясь по маршруту, всегда следите за тем, что происходит вокруг, и принимайте меры, чтобы не подвергать опасности себя и окружающих. Если у вас возникают сомнения при использовании маршрута, соблюдайте правила дорожного движения и смотрите на дорожные знаки.
- Откройте Google Карты на компьютере.
- Нажмите «Как добраться» .
- Выберите пункты отправления и назначения на карте или укажите их названия или адреса.
- Выберите способ передвижения.
Совет. Чтобы выбрать другой маршрут для любого способа передвижения, прикоснитесь к нему на карте. Для каждого варианта вы увидите примерное время в пути.
Маршруты для разных способов передвижения на Google Картах
На Google Картах можно прокладывать маршруты для разных способов передвижения. Ниже рассказывается о том, какие функции и настройки для них доступны.
На автомобиле
- Маршруты для передвижения на автомобиле могут включать дороги, движение по которым разрешено только на автомобилях. Если вы передвигаетесь на мотоцикле или велосипеде с мотором, возможно, вам следует исключить скоростные шоссе и платные дороги.
- Чтобы изменить маршрут, нажмите на траекторию и перетащите ее на нужное место.
На общественном транспорте
- Информация о маршрутах общественного транспорта доступна не для всех городов. Это зависит от того, добавили ли местные транспортные агентства информацию о своих маршрутах на Карты.
Пешком
Служба заказа поездок
- Если там, где вы находитесь, доступны такси и службы заказа поездок, вы можете сравнить их маршруты с вариантами для пешеходов и общественного транспорта. Узнайте, как заказать поездку.
На велосипеде
- В некоторых странах и регионах доступны специальные маршруты для поездок на велосипеде . Узнайте, как прокладывать маршруты для езды на велосипеде.
На самолете
- Для общественного транспорта или самолета нельзя построить маршрут с несколькими пунктами назначения или путевыми точками.
- О том, как найти подходящий авиарейс, рассказывается в этой статье.
Как добавить несколько пунктов назначения
Маршруты с несколькими остановками можно строить для всех способов передвижения, кроме общественного транспорта и самолетов.
Примечание. Вы можете искать места на проложенном маршруте.
Чтобы изменить порядок остановок, выполните следующие действия:
- Найдите остановку.
- Перетащите ее на нужное место.
Маршруты в Просмотре улиц
Важно! Чтобы проложить маршрут в Просмотре улиц, нажмите на значок . Затем укажите начальную и конечную точки маршрута.
- На компьютере под нужным маршрутом нажмите По шагам.
- Чтобы посмотреть подробный маршрут, нажмите «Развернуть» .
- Наведите указатель на шаг маршрута. Если для него доступен Просмотр улиц, откроется фотография.
- Нажмите на нее, чтобы перейти в Просмотр улиц.
- Для просмотра улиц на других шагах внизу слева нажмите Предыдущий шаг или Следующий шаг.
- Чтобы выйти из режима просмотра, справа вверху нажмите на значок .
Как настроить маршрут
Как исключить скоростные шоссе и платные дороги
- Откройте Google Карты на компьютере.
- Нажмите «Как добраться» .
- Выберите пункты отправления и назначения на карте или укажите их названия или адреса.
- Выберите Параметры.
- Установите флажок «Шоссе» или «Платные дороги».
Как изменить время отправления или прибытия
Чтобы выбрать лучший маршрут с учетом загруженности дорог и доступности общественного транспорта, можно поменять дату и время предстоящей поездки. Этот способ действует только для маршрутов с одним пунктом назначения.
- Откройте Google Карты на компьютере.
- Проложите маршрут.
- После того как вы проложили маршрут, нажмите Отправление сейчас.
- Чтобы изменить дату и время поездки, выберите Отправление или Прибытие.
Как мы ранжируем варианты маршрутов
Когда вы указываете в Google Картах пункт назначения, мы предлагаем маршруты с разными способами передвижения: например, на автомобиле, на велосипеде или пешком.
Иногда эти маршруты ранжируются с учетом объективных факторов, чтобы вам было проще найти оптимальный вариант. В частности, мы учитываем время в пути, расстояние, стоимость, ваши предпочтения и то, насколько способ передвижения соответствует вашему запросу. Самыми важными факторами обычно считаются ваши предпочтения и время в пути. Иногда к ним добавляется и цена.
Если это возможно, мы также предлагаем вам общественный транспорт, аренду велосипедов или самокатов и службы заказа поездок. Эти сервисы предоставляются третьими лицами, которые публикуют данные о своем транспорте в общем доступе или заключили с нами партнерское соглашение. Наши партнерские и деловые отношения с поставщиками транспортных услуг не влияют на рейтинг их предложений.
Информация по теме
- Как посмотреть информацию о загруженности дорог или найти места вдоль проложенного маршрута
- Как спланировать регулярный маршрут или поездку
Эта информация оказалась полезной?
Как можно улучшить эту статью?
Проложить маршрут на автомобиле
С помощью онлайн навигатора GeoTree.ru вы можете:
- построить маршрут на карте между населенными пунктами
- проложить маршрут на машине от точки до точки
- узнать расстояние между городами на карте
- рассчитать расстояние на карте между городами или населенными пунктами
- узнать как проехать на автомобиле от и до
- найти дорогу через любой населенный пункт
- показать кратчайший путь на карте
Движение по заранее проложенному маршруту – это способ исключить проблемы, которые могут возникнуть в незнакомой местности, и максимально быстро преодолеть нужный участок дороги. Не упускайте деталей, заранее уточните по карте все сложные дорожные развилки.
Не забывайте несколько простых правил:
- Любому водителю, преодолевающему большие расстояния, требуется отдых. Ваша поездка будет более безопасной и приятной, если, заранее построив маршрут движения, вы определитесь с местами для отдыха. Представленная на сайте карта имеет различные режимы. Воспользуйтесь результатом работы простых интернет-пользователей и обращайтесь к режиму «Народная карта». Возможно, там вы найдете полезную для вас информацию.
- Не превышайте скоростной режим. Предварительный расчет времени и построенный маршрут поездки поможет уложиться в график и не превышать разрешенные значения скорости движения. Таким образом, Вы не будете подвергать опасности себя и других участников дорожного движения.
- Запрещается употребление за рулем веществ, вызывающих алкогольное или наркотическое опьянение, а также психотропных или иных веществ, вызывающих опьянение. Несмотря на отмену нулевого промилле (теперь возможная суммарная допустимая погрешность при измерении уровня алкоголя в крови составляет 0,16 мг на 1 литр выдыхаемого воздуха ), употреблять алкоголь за рулем строго запрещено.
Удачи на дорогах!
Расстояние между городами
Примеры расчета расстояний:
-
Расстояние от Москвы до Киева
-
Расстояние от Москвы до Питера
-
Расстояние от Москвы до Нижнего Новгорода
-
Расстояние от Москвы до Ярославля
-
Расстояние от Москвы до Владивостока
-
Расстояние от Москвы до Минска
-
Расстояние от Москвы до Твери
-
Расстояние от Москвы до Тулы
-
Расстояние от Москвы до Казани
-
Маршрут Воронеж — Москва
-
Маршрут Екатеринбург — Москва
-
Маршрут Ростов-на-Дону — Москва
-
Маршрут Рязань — Москва
-
Маршрут Кострома — Москва
-
Маршрут Владимир — Москва
-
Маршрут Смоленск — Москва
-
Маршрут Самара — Москва
-
Маршрут Калуга — Москва
Когда может пригодиться расчет расстояний?
Бесплатный расчет расстояний между городами показывает точное расстояние между городами и считает кратчайший маршрут с расходом топлива.
Он может быть востребован в следующих случаях:
- Сервис расчета расстояний помогает проложить маршрут автопутешественнику, например, для летнего отдыха с семьей
или при планировании деловой поездки на автомобиле.
Зная расход бензина и среднюю цену за литр топлива, нетрудно рассчитать обязательные финансовые затраты в поездке. - Водителю-дальнобойщику расчет расстояния между городами позволяет проложить маршрут на карте при
подготовке к дальнему рейсу. - Калькулятор расстояний пригодится грузоотправителю, чтобы определить километраж и в соответствии
с тарифами транспортной компании оценить стоимость грузоперевозки.
Как пользоваться расчетом расстояний?
Для того чтобы рассчитать маршрут между городами,
начните вводить в поле «Откуда» название начального пункта маршрута.
Из выпадающей контекстной подсказки выберите нужный город.
По аналогии заполните поле «Куда» и нажмите кнопку «рассчитать».
На открывшейся странице на карте будет проложен маршрут, красными маркерами будут обозначены начальный и конечный
населенные пункты, а красной линией будет показан путь по автодороге.
Над картой будут указаны суммарная длина маршрута, продолжительность пути и расход топлива.
Под этой информацией будет размещена сводная таблица с подробными данными о маршруте и об участках пути: тип дороги,
расчетная длина и продолжительность каждого фрагмента маршрута.
Полученный маршрут можно распечатать или, изменив некоторые параметры, повторить расчет.
В дополнительных настройках можно задать транзитные населенные пункты, а также скорректировать расчетную скорость
движения по дорогам каждого типа.
Ниже дополнительных настроек расположены поля ввода данных топливного калькулятора.
Внесите в них актуальный расход горючего вашей машины и среднюю цену 1 литра топлива.
При повторном расчете эти данные будут использованы для подсчета необходимого количества топлива и его стоимости.
Другие методы прокладки маршрута
Пожалуй, самая простая альтернатива — это открыть атлас автодорог и на глаз проложить маршрут по карте.
Затем, прокатив по маршруту курвиметр, можно получить приблизительный километраж.
Оценить время поездки будет сложнее: для этого придется разбить маршрут на фрагменты с одинаковым классом дорог и
измерить сумму длин фрагментов каждого класса.
Далее, зная среднюю скорость для каждого класса дорог, нетрудно рассчитать время, поделив путь на скорость.
Если курвиметра нет под рукой, то можно воспользоваться линейкой.
Приложите нулевую отметку линейки к начальному пункту маршрута и двигайте линейку, плотно примыкая ее к извилинам
дороги.
Рассчитать расстояние между городами также можно с помощью таблиц, которые опубликованы в атласах и
справочниках.
Это достаточно удобно для маршрутов, начинающихся и заканчивающихся в крупных городах.
Мелких населенных пунктов, как правило, нет в таблицах.
Алгоритм расчета расстояния между городами
Расчет маршрута основан на алгоритме поиска кратчайшего пути во взвешенном графе автодорог (алгоритм Дейкстры).
Расстояния определены по точным спутниковым координатам дорог и населенных пунктов.
Расчет является результатом компьютерного моделирования, а модели не бывают идеальными, поэтому при планировании
маршрута поездки не забудьте заложить резерв.
Смотрите также:
Существует несколько подходов к определению расстояния между городами:
- расстояние по автодорогам включает в себя длину автотрассы и соединяющих ее с городом дорог;
- расстояние по прямой, или как его еще называют «по птичьему полету«, характеризуется меньшей протяженностью, но практически менее ценно, т.к. перемещение обычно происходит по дорогам.
В наших расчетах расстояния между городами берутся по автодорогам.