Как проложить маршрут андроид

Маршруты на картах Google в Android-приложении

Недавно у меня возникла необходимость отображать маршрут между двумя точками на карте Google в моем приложении. На Хабре уже были публикации на эту тему. Например, «Маршруты на картах Google в вашем Android-приложении». Однако этим материалам уже довольного много времени и они не используют новых возможностей. Хочу показать еще один способ рисования маршрутов, может быть, кому-то он окажется полезен.

Я опущу процесс интеграции Google карт в приложение, интересующиеся могут найти всю информацию в подробном руководстве от Google. Весь процесс отображения маршрутов состоит из нескольких этапов:

  • Получение информации о маршруте;
  • Обработка полученного ответа;
  • Рисование маршрута на карте.

Рассмотрим эти этапы.

Получение маршрута

Для получения информации о маршруте мы должны выполнить запрос к службе маршрутов Google. Полное описание запросов и возвращаемых запросов доступны на сайте Google. Я лишь отмечу, что для получения маршрута мы должны выполнить запрос вида:

В качестве output мы можем выбрать XML, либо (в нашем случае) JSON. К числу обязательных параметров относятся origin и destination — их можно указать в виде текстового представления адреса, либо в виде значений широты и долготы, разделенных запятой. Третий обязательный параметр sensor указывает на то, исходит ли запрос от устройства с датчиком положения, либо нет — в нашем случае всегда будет равен true.

После того, как мы разобрались с форматом запроса, необходимо выбрать способ, которым мы будем выполнять наш запрос к службе маршрутов Google и получать ответ. Я использую библиотеку Retrofit, которая позволят выполнять формировать запросы к REST-сервисам буквально в пару строк.

Для использования Retrofit необходимо подключить библиотеку к вашему проекту. С использованием gradle это делается добавлением одной строки зависимости в ваш gradle-файл:

Далее нам необходимо описать API службы маршрутов Google. Для этого мы создаем новый Java-интерфейс, где мы создаем некоторое количество методов и при помощи аннотаций Retrofit сопоставляем их с различными методами на сервере. Так как мы будем получать только информацию, нам нужно описать только один метод для GET-запроса:

Аннотация GET в качестве аргумента принимает директорию на сервере, к которой должен выполняться запрос, а уже в самом методе аннотируем каждый его параметр аннотацией Query. Как аргумент для каждой аннотации имя параметра, который мы включаем в запрос. В данном случае для параметров origin и destination я устанавливаю свои значения для флага encodeValue, при помощи которого я сообщаю Retrofit, чтобы он не кодировал запятую, которая разделяет значения широты и долготы в моем запросе. Также я добавляю еще один параметр language для того, что бы ответ от сервера приходил на русском языке. Наш REST-метод должен возвращать некий объект, назовем его RouteResponse. Его мы опишем позже, а пока просто создадим еще один класс с именем RouteResponse.

После того, как мы описали API нашей службы, мы можем выполнить запрос. Для этого нам надо создать RestAdapter, создать сервис, представляющий удаленную службу и вызвать у него метод нашего API:

Вот и все, что нужно, чтобы получить маршрут от службы маршрутов Google. Добавив в конструктор RestAdapter строку , вы можете выполнить запрос, и увидеть у себя в логе ответ от сервера. Но мы на этом не останавливаемся.

Читайте также:  Acct что это андроид

Обработка полученного ответа

В результате выполнения запроса мы получим объект RouteResponse. На самом деле, поскольку от сервера мы запросили JSON, то и ответ от сервера придет в JSON-формате. Retrofit, получив ответ от сервера, самостоятельно запускает парсинг JSON с использованием парсера от Google GSON, а уж тот парсит JSON в объект RouteResponse. При желании можно выбрать другой парсер — Jackson, либо JSON-парсер от Instagram, но я предпочитаю пользоваться GSON. GSON идет в комплекте с Retrofit, поэтому никаких дополнительных зависимостей для его использования нам в проект включать не надо.

Для того, чтобы доставать какие-то данные из JSON-ответа, нам нужно создать класс, описывающий эти данные. Мы уже создали класс RouteResponse, осталось наполнить его каким-то содержимым. Общая структура ответа от сервера службы маршрутов Google такова:

Как видим, в ответе нам приходит массив маршрутов Routes, который содержит массив отрезков Legs, состоящий из шагов Steps, составляющих отрезок маршрута, и информации об отрезке. В ранних примерах маршруты строились на основе информации о каждом шаге отрезка, однако уже в объекте Route содержится объект Overview_polyline — это объект с массивом закодированных элементов points, которые представляют приблизительный (сглаженный) путь результирующего маршрута. В большинстве случаев этого сглаженного маршрута будет достаточно. Поэтому для рисования я буду использовать именно его.

На основе этой информации мы пишем наш класс модели для GSON:

Выполнив запрос и получив объект RouteResponse мы можем получить из него строку points. В своем исходном состоянии она нам мало что дает. Для того, чтобы добыть из нее какую-то информацию, нам нужно расшифровать ее. Здесь нам придет на помощь класс PolyUtil из библиотеки Google Maps Android API utility library. Чтобы им воспользоваться, нужно включить следующую зависимость в ваш проект:

PolyUtil содержит метод decode(), принимающий строку Points и возвращающий набор объектов LatLng, узлов нашего маршрута. Этого нам достаточно для того, чтобы нарисовать наш маршрут на карте.

Рисование маршрута на карте

В старых примерах для рисования маршрута использовался Overlay, мы же обойдемся классом Polyline — в этом случае нам не нужно создавать дополнительный класс, наследуемый от Overlay и объем кода, который нам необходимо написать, радикально сокращается. Polyline — это список точек на карте и линия, их соединяющая. Polyline затем можно добавить на карту:

Для начала мы создаем экземпляр класса PolylineOptions и устанавливаем толщину и цвет линии. Затем получаем экземпляр LatLngBuilder для построения ограничивающего прямоугольника, который будет использоваться для того, чтобы масштабировать карту. Дальше мы проходим по списку объектов LatLng, полученному в результате расшифровки ответа от API маршрутов Google и добавляем каждую точку на линию в и LatLngBuilder. Для первого и последнего объекта в списке, которые представляют собой координаты начальной и конечной точки соответственно, мы создаем маркеры и добавляем их на карту. После завершения перебора элементов списка мы добавляем построенную линию на карту вызовом метода addPolyline().

Затем нам нужно масштабировать карту таким образом, чтобы отобразить весь маршрут. Перемещение по карте выполняется при помощи метода moveCamera() класса Camera, который принимает на вход настройки камеры в объекте UpdateCamera. Объект CameraUpdate мы создаем вызовом метода newLatLngBoudns у класса UpdateCameraFactory. Мы пеередаем ему созданный нами объект LatLngBounds, который содержит все точки нашего маршрута и передаем ему ширину нашего экрана и добавляем отступ от краев. После этого мы вызываем метод для передвижения камеры. И всё, маршрут нарисован.

Читайте также:  Андроид как печатать документы

Источник

Как настроить и пользоваться Яндекс.Навигатором на Android

Вам бывает сложно проложить оптимальный автомобильный маршрут даже в своем городе? Приложение Яндекс.Навигатор сделает это за вас. Оно определит кратчайший путь за секунды и автоматически скорректирует маршрут при изменениях дорожных условий.

Обзор функций и интерфейса приложения

Яндекс.Навигатор – бесплатное приложение, предназначенное для построения автомобильных маршрутов. В памяти программы сохранены карты всех стран мира, но упор сделан на СНГ.

Данные о текущих дорожных условиях появляются в приложении благодаря совместным усилиям искусственного интеллекта, сотрудников ООО «Яндекс» и пользователей. Любой человек может добавить информацию о ДТП, ремонтных работах, камерах контроля скорости и засадах ГИБДД.

Функции

Основные функции приложения:

  • Построение оптимальных маршрутов. Если навигатор обнаружит несколько равнозначных вариантов, то укажет все, а итоговый выберете вы.
  • Сопровождение водителя в пути. Благодаря голосовым оповещениям вы не пропустите нужный поворот и успеете снизить скорость перед камерой ГИБДД. Время оповещения подбирается так, чтобы вы спокойно завершили маневр. Озвучиванием приложения занимались Дмитрий Нагиев, Вера Брежнева, Федор Бондарчук и другие известные личности.
  • Оценка дорожной обстановки. Даже если вы хорошо знаете маршрут, изучите информацию о пробках на нужных улицах перед выездом.

Чтобы облегчить поездку, Яндекс.Навигатор предлагает несколько дополнительных функций:

  • Голосовое управление. Достаточно произнести: «Слушай, Алиса», – или нажать на кнопку в виде микрофона, чтобы Яндекс.Навигатор воспринимал голосовые команды.
  • Автокорректировка маршрута. Если дорожная обстановка изменится по ходу езды, программа среагирует и найдет другой путь.
  • В программу добавлена информация о парковках в крупных городах стран СНГ и ближнего зарубежья.

Интерфейс

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

Если не можете найти себя на карте, нажмите на кнопку внизу экрана – и система переведет вас в нужную область.

Яндекс.Навигатор отмечает загруженность улиц тремя цветами:

  • зелёным – дорога свободна;
  • желтым – движение частично затруднено;
  • красным – пробки на маршруте.

Приложение также оценивает среднюю плотность движения на дорожном участке по шкале от 0 до 10, где 0 – свободно, а 10 – многочасовые пробки. Значение отображается в верхнем правом углу экрана на кнопке включения/выключения анализа загруженности дорог.

Дорожные происшествия отмечены значками в красной оправе. Например, на скриншоте ниже под №1 указана камера ГИБДД, №2 – ДТП, №3 – ремонтные работы, №4 – движение перекрыто. Если нажать на значок, система укажет дополнительную информацию, например, данные о количестве полос, перекрытых из-за ДТП.

Если вы запустили движение по маршруту, дополнительно в верхней части экрана появится информация о ближайшем маневре (1), значения текущей (2) и максимально допустимой скорости (3).

Инструкция по работе с навигатором

Чтобы установить приложение, зайдите на его страницу в Play Market.

Первый запуск

После включения приложения:

  1. Прочитайте Лицензионное соглашение программы и нажмите «Далее».
  2. Выберите «Далее» еще 2 раза и разрешите Яндекс.Навигатору доступ к данным о местоположении устройства, чтобы не вводить свой адрес каждый раз вручную.
  3. Отметьте пункт «Далее» в том же месте и разрешите приложению запись аудио, чтобы пользоваться голосовым управлением навигатора.

Выбор карты

Чтобы изменять внешний вид и функции Яндекс.Навигатора, зайдите в раздел «Настройки». Для этого:

  1. Нажмите на кнопку меню в нижнем правом углу экрана.
  2. Откройте раздел «Настройки».
  3. Нажмите «Вид карты».
  4. Для наиболее удобного ориентирования выберите один из 2 видов карт – спутник или схема.
Читайте также:  Реал стил для андроид

Чтобы пользоваться картой без интернета:

  1. Откройте меню.
  2. Нажмите «Загрузка карт».
  3. Выберите необходимую карту из перечня или воспользуйтесь поиском.
  4. Для скачивания нажмите на кнопку в виде вертикальной стрелки в круге.

Карта скачается, даже если вы перейдете на другую страницу навигатора. Её вес – 110-170 МБ для средних по площади областей.

Построение маршрута

Для построения маршрута выберите начальную, конечную и промежуточные точки. При включенной функции геолокации на смартфоне ваше текущее местоположение автоматически устанавливается как пункт отправления.

Внести любую точку в маршрут можно 3 способами: с помощью поиска, карты или голосового управления.

С помощью поиска:

  1. Нажмите на кнопку в виде лупы.
  2. Введите адрес в текстовое поле.
  3. Выберите подходящий вариант в появившемся списке.
  4. Если выбираете пункт назначения, нажмите «Поехали».
  5. Если хотите указать промежуточный пункт, выберите «Заехать».
  6. Чтобы отметить пункт отправления, коснитесь синего значка и выберите «Отсюда».

С помощью карты:

  1. Найдите необходимое место на карте. Для изменения масштаба нажимайте на кнопки «+» и «-».
  2. Чтобы поставить точку в нужном месте, задержите на нем палец в течение 1 секунды.
  3. Выберите тип маршрутного пункта из списка:
    • сюда – конечный пункт назначения;
    • через – промежуточный пункт;
    • отсюда – пункт отправления.

С помощью голосового управления:

  1. Нажмите на кнопку в виде микрофона или произнесите: «Слушай, Алиса».
  2. Произнесите команду. Например, «Маршрут до Ленина, 3А».

Установка промежуточных точек маршрута доступна только после определения местоположения старта и финиша.

После выбора всех точек:

  1. Выберите маршрут из предложенных приложением. Для этого нажимайте на вкладки со временем в пути. Они находятся в верхней части экрана. Выбранный вариант на карте обозначен красным, желтым и зеленым цветами, альтернативные пути – синим.
  2. Нажмите «Поехали».

Чтобы построить маршрут в обход платных дорог:

  1. Откройте раздел «Настройки», как мы описывали выше.
  2. Выберите пункт «Избегать платных дорог». При этом переключатель напротив надписи станет синим.

Даже после перезапуска приложение вспомнит незаконченный маршрут.

Движение по маршруту

Во время передвижения Яндекс.Навигатор заранее оповещает о поворотах. Информация отображается на экране и воспроизводится вслух.

В нижней части экрана система указывает расстояние до финиша (1) и примерное время в пути (2).

Использование дополнительных функций

Как найти ближайшую парковку:

  1. Нажмите на значок «P» в верхнем правом углу экрана.
  2. Теперь коснитесь кнопки, появившейся ниже предыдущей.
  3. Следуйте проложенному маршруту.

Как поменять голос оповещений:

  1. В разделе «Настройки» нажмите на кнопку «Голос».
  2. Выберите озвучку из списка «Загруженные».
  3. Если хотите скачать вариант из блока «Доступные для загрузки», нажмите на кнопку левее названия желаемой озвучки.

Как сохранять историю поездок:

  1. Откройте меню кнопкой в правом нижнем углу.
  2. Нажмите «Мои поездки».
  3. Выберите «Сохранять», чтобы система начала запоминать ваши маршруты.

Теперь в этом разделе будет доступна информация о построенных маршрутах.

Как добавить информацию о происшествии на дороге:

  1. Найдите нужное место на карте навигатора.
  2. Удерживайте палец на нем пару секунд.
  3. Нажмите «Установить».
  4. Выберите тип события из списка и нажмите на него. На скриншоте ниже: 1 – неопределенное событие, 2 – ДТП, 3 – дорожные работы, 4 – камера ГИБДД, 5 – внимание, 6 – проезд закрыт.
  5. Введите комментарий к дорожному событию в текстовое поле.
  6. Нажмите «Готово».
  7. Выберите «Установить».

Как проверить штрафы ГИБДД:

  1. В меню выберите пункт «Штрафы ГИБДД».
  2. Укажите номера СТС и водительского удостоверения.
  3. Нажмите «Проверить штрафы».

Яндекс.Навигатор установили более 50 миллионов раз. Это доказывает удобство и востребованность приложения. Чтобы уже сегодня начать им пользоваться, следуйте нашим инструкциям.

Источник

Оцените статью