Введение 4
1. Существующие подходы к решению задачи 6
1.1. Анализ литературы по теме 6
1.2. Обзор существующих программных решений 8
2. Проектирование приложения 11
2.1. Организация интерфейса 11
2.2. Определение компонентов экрана 13
2.3. Безопасность и разрешения 17
2.4. Использование API 20
2.5. Ограничение API 21
3. Реализация приложения 23
3.1. Структура приложения 23
3.2. Создание основных компонентов 24
3.3. Реализация навигации по приложению 25
3.4. Реализация запросов к API 27
3.5. Реализация главной активности 29
3.6. Реализация фрагмента выбора города 29
3.6.1. Функция автодополнения названий мест 30
3.6.2. Хранение настроек приложения 32
3.7. Реализация фрагмента ввода точек маршрута 33
3.7.1. Функция автодополнения названий городов 34
3.7.2. Передача данных между фрагментами 36
3.8. Реализация фрагмента карты 37
3.8.1. Работа с картой 38
3.8.2. Построение маршрута 38
3.8.3. Вычисление высот 40
3.8.4. Текст загрузки 42
3.9. Инструкция пользователя 44
3.10. Логотип приложения 45
Заключение 46
Список сокращений 48
Список использованных источников 49
Приложения
Здоровый и экологичный образ жизни в современном обществе набирает все большую популярность, в связи с этим количество велосипедистов возрастает. Чтобы облегчить их жизнь и сделать путешествия более приятными и продуманными, пришла идея создать свое приложение, главным отличием которого от аналогов является расчет изменений высот по построенному маршруту. Эта функция может быть полезна не только велосипедистам, но и пешеходам, ведь при пешей прогулке изменения высот тоже имеют существенное значение.
На идею создания Android-приложения для велосипедистов натолкнул личный жизненный опыт. Всем известно, что существуют различные приложения для построения маршрутов. Они удобны для большинства людей: могут построить маршрут для автомобиля, поездки на общественном транспорте или пешей прогулки, учитывая различные параметры. Примерами таких приложений могут служить Google Maps, 2GIS, Яндекс Карты. Однако при использовании большинства приложений для построения маршрута велосипедиста, выявляется один существенный недостаток: отсутствие данных об изменении высот по данному маршруту. Если при поездке на общественном транспорте или автомобиле данный параметр не важен, то при поездке на велосипеде он становится существенным, когда согласно заданному маршруту нужно ехать в крутую гору. В этом случае приходится самостоятельно анализировать ситуацию и искать пути с более подходящим подъемом. Если велосипедист едет в незнакомую местность, он не может знать заранее о перепадах высот на его пути. Тогда данную проблему приходится решать на месте. С опытом, выявляется наиболее оптимальный маршрут. Однако данный процесс требует времени и сил, что не всегда входит в планы и является допустимым.
Было решено создать приложение, которое могло бы, во-первых, строить маршруты и, во-вторых, показывать изменения высот по ним. Для выполнения последнего пункта было решено использовать профиль высот рельефа. Он представляет собой столбчатую диаграмму, каждый столбец которой имеет высоту, соответствующую высоте точки маршрута над уровнем моря. Таким образом, приложение должно просто и наглядно предоставлять пользователю информацию об изменениях высот по проложенному им маршруту. Далее для обозначения карты велосипедистов будет использоваться название приложения: BikeMap.
Платформа Android была выбрана не случайно. По данным NetMarketShare, в начале 2018 года Android занимает лидирующую позицию (70,96%) [28] на глобальном рынке смартфонов. В связи с ее популярностью возможен охват наибольшего количества потенциальных пользователей.
Для реализации основных функций BikeMap было решено использовать Google Maps API. Он предоставляет множество возможностей: от отображения карты до построения маршрутов. Для работы была использована среда разработки Android Studio. Это самый современный и удобный инструмент для разработки Android-приложений на данный момент. Именно эту среду разработки рекомендует использовать Google.
Таким образом, необходимо создать мобильное приложение для ОС Android на языке Java с использованием Google Maps API.
Основные функции приложения:
1. Отображение карты
2. Масштабирование карты
3. Определение местоположения пользователя
4. Построение маршрутов между точками
5. Отображение изменения высот по маршруту
6. Выбор города
7. Автодополнение адресов и названий мест при вводе
В результате работы создано полноценное, работоспособное Android- приложение. Стоит отметить, что на данный момент реализован необходимый минимум функций: построение маршрутов, отображение изменений высот, выбор города, подсказки мест. Основное направление дальнейшей разработки — добавление нового функционала. В дальнейшем планируется внести множество дополнений:
1. Выбор точки отправления и точки прибытия на карте с помощью клика по необходимому месту;
2. Назначение точкой отправления или точкой прибытия текущего местоположения;
3. Прокладывание маршрута через несколько точек, которые также можно либо ввести в виде текста, либо указать на карте;
4. Отображение на графике высот текущего местоположения в виде подсвечивания необходимого столбца другим цветом;
5. Отображение при клике на график высот высоты над уровнем моря для данного столбца;
6. Изменение цвета по линии маршрута в зависимости от высоты (например, более высокие точки отмечать красным, а низкие зеленым с плавным переходом между ними);
7. Подсчет расстояния и времени пути и отображение этой информации;
8. Отображение оставшегося расстояния и времени пути;
9. Ведение статистики по пройденным маршрутам и сохранение в памяти телефона с возможностью очистки истории;
10. Сохранение мест для быстрого доступа и возможности выбора их как точки отправления или точки прибытия;
11. Отображение текущей погоды;
12. Построение маршрутов по определенным параметрам высоты (например, с перепадами высот не более 10 метров);
13. Разбиение маршрута не на фиксированные 256 точек, а на то количество точек, которое будет оптимально, исходя из длины маршрута. То есть для более короткого маршрута меньше точек, а для более длинного больше.
Приложение создано таким образом, чтобы его масштабирование происходило достаточно просто. Добавление новых фрагментов с новым функционалом не составляет труда. Это было отмечено в момент создания инструкции пользователя. В уже готовое приложение была внесена модификация, которая не заняла много времени.
Также стоит отметить, что приложение не рассчитано на большие нагрузки в виде большого количества пользователей, так как бесплатное использование API имеет ограничение на количество запросов. Поэтому в перспективе нужно либо переходить на платную версию API, либо использовать Google-аккаунты пользователей для персонального получения по десять ключей API для каждого. Как уже было отмечено, такого количества ключей хватает для комфортного использования приложения одним человеком. Ключи можно хранить в памяти устройства с помощью Shared Preferences.
Подводя итог, можно сказать, что результат разработки приложения BikeMap удовлетворяет поставленным целям. Был заложен необходимый фундамент для дальнейшего развития. А также в процессе работы были получены новые знания и опыт, что и было основной целью данной работы.
1. Грачев А.С. Интегрирование Google карты для создания приложения, работающего на ОС Android / А.С. Грачев // Успехи современной науки, № 10, 2016 .— С. 125-128.
2. Дейтел П. Android для разработчиков: учебник / Пол Дейтел, Харви Дейтел, Александер Уолд .— 3-е изд., перераб. и доп.— Санкт-Петербург: Изд. «Питер», 2016.— 512 с.
3. Клифтон Я. Проектирование пользовательского интерфейса Android: учебник / Ян Клифтон.— Москва: Изд. «ДМК Пресс», 2017.— 452 с.
4. Кузьмин И. А. Анализ преимуществ и недостатков мобильной навигационной системы «Hudway» и ее конкурентов / И. А. Кузьмин, А.И. Коршунов // Интеллектуальные системы в производстве, № 2, 2017 .— С. 121-125.
5. Матяш Е.А. Устранение утечки памяти в Android приложениях / Е.А. Матяш // Актуальные научные исследования в современном мире, № 15, 2016 .— С. 107-113.
6. Наварич Н. В. Алгоритм обратного геокодирования для поиска кратчайшего маршрута / Н.В. Наварич // Молодой ученый: вызовы и перспективы: сб. ст. по материалам XXII междунар. науч.-практ. конф, № 20 (22), 2016.— С. 311-314.
7. Наварич Н. В. Алгоритм построения маршрута на основе различных геокодеров / Н.В. Наварич // Научная дискуссия: инновации в современном мире: сб. ст. по материалам LIII международной научно-практической конференции, № 9 (52), 2016.— С. 52-55.
8. Скворцов А. В. Геоинформатика: учебное пособие / А.В. Скворцов.— Томск: Изд. «Том. ун-та», 2006.— 336 с.
9. Хижняк Ю. Д. Обзор наиболее популярных картографических сервисов, предоставляющих API для разработчиков / Ю. Д. Хижняк // Novainfo, № 70, 2017.— С. 38-46.
10. Филлипс Б. Android. Программирование для профессионалов: учебник / Билл Филлипс, К. Стюарт, Кристин Марсикано.— Санкт-Петербург: Изд. «Питер», 2017.— 688 с.
11. Шилдт Г. Java 8. Полное руководство: справочное пособие / Герберт Шилдт.— 9-е изд., перераб. и доп.— Москва: Изд. «Вильямс», 2017.— 1376 с.
12. Эккель, Б. Философия Java / Брюс Эккель.—4-е полное изд.— Санкт-Петербург: Изд. «Питер», 2015.— 1168 с.
13. Бесплатная, на общественных началах, картография. Дорожно-навигационное приложение [Электронный ресурс] / www.waze.com— Онлайн- карта.— Режим доступа: www.waze.com. — Дата обращения: 06.04.2018
14. Интеграция карт в ваше Android-приложение [Электронный ресурс] / habr.com— Habr.— Режим доступа:habrahabr.ru/post/131252/.— Дата обращения: 06.04.2018
15. Как легко сделать Navigation Drawer и вкладки, используемые в популярных приложениях от Google [Электронный ресурс] / habr.com— Habr.— Режим доступа: habrahabr.ru/post/236567/. — Дата обращения: 06.04.2018
16. Карты в вашем Android-приложении [Электронный ресурс] / habr.com— Habr.— Режим доступа:habrahabr.ru/post/123403/.— Дата обращения: 06.04.2018
17. Карта городов России [Электронный ресурс] / www.2gis.ru— 2GIS.— Режим доступа: www.2gis.ru. — Дата обращения: 06.04.2018
18. Начало работы [Электронный ресурс] // developers.google.com— Google Developers.— Режим доступа:
developers .google.com/ map s/documentation/ android-api/ start. — Дата обращения: 06.04.2018
19. Начало работы [Электронный ресурс] // developers.google.com— Google Developers.— Режим доступа:
developers. google.com/ map s/documentation/ directions/start. — Дата обращения: 06.04.2018
20. Начало работы [Электронный ресурс] // developers.google.com— Google Developers.— Режим доступа: developers.google.com/maps/documentation/geocoding/start.— Дата обращения: 06.04.2018
21. Немного о Fragment [Электронный ресурс] / habr.com— Habr.— Режим доступа:habrahabr.ru/post/207036/.— Дата обращения: 06.04.2018
22. Программирование под Android [Электронный ресурс] / metanit.com— Metanit.com— сайт о программировании.— Режим доступа: metanit.com/java/android/.— Дата обращения: 06.04.2018
23. Руководство для разработчиков [Электронный ресурс] / developers.google.com— Google Developers.— Режим доступа: developers .google.com/ map s/documentation/ elevation/ intro#PointElevation. — Дата обращения: 06.04.2018
24. Яндекс.Карты [Электронный ресурс] /www.yandex.ru— Яндекс. — Режим доступа: www.yandex.ru/maps. — Дата обращения: 09.05.2018
25. Android runtime permissions. Почему, зачем и как [Электронный ресурс] / habr.com— Habr.— Режим доступа: habrahabr.ru/post/278945/. — Дата обращения: 06.04.2018
26. Google Maps [Электронный ресурс] / www.google.com— Google.— Режим доступа: www.google.ru/maps/. — Дата обращения: 06.04.2018
27. Hudway [Электронный ресурс] / www.hudwayapp.com— Hudway.— Режим доступа: www.hudwayapp.com. — Дата обращения: 06.04.2018
28. Operating system market share [Электронный ресурс] / https://netmarketshare.com— NetMarketShare. — Режим доступа: https://netmarketshare.com/operating-system-market- share.aspx?options=%7B%22filter%22%3A%7B%22%24and%22%3A%5B%7B%2 2deviceType%22%3A%7B%22%24in%22%3A%5B%22Mobile%22%5D%7D%7D %5D%7D%2C%22dateLabel%22%3A%22Trend%22%2C%22attributes%22%3A% 22share%22%2C%22group%22%3A%22platform%22%2C%22sort%22%3A%7B% 22share%22%3A-
1%7D%2C%22id%22%3A%22platformsMobile%22%2C%22dateInterval%22%3A %22Monthly%22%2C%22dateStart%22%3A%222017-
05%22%2C%22dateEnd%22%3A%222018-
04%22%2C%22segments%22%3A%22-1000%22%7D. — Дата обращения: 06.04.2018
29. Place Autocomplete [Электронный ресурс] / developers.google.com — Google Developers. — Режим доступа: developers.google.com/places/web- service/autocomplete. — Дата обращения: 06.04.2018