Как мы запустили 2гис под carplay и до сих пор расхлёбываем
Содержание:
- Мы ждём от тебя
- Мобильная версия 2ГИС теперь доступна и на iOS
- История двух реджектов
- Собственный источник геопозиции
- The best framework we ever made
- Первая палка в колёса
- Описание 2ГИС — справочник, карта и навигатор
- Полное описание
- То, о чём нельзя говорить
- Добавление объектов
- Проблема одной карты
- Как пользоваться приложением?
- Похожие вакансии
- Преимущества приложения
Мы ждём от тебя
- Отличное знание C++14/17 и опыт коммерческой разработки на нём от 2 лет.
- Сильная алгоритмическая подготовка (знание основных алгоритмов и структур данных, умение оценивать сложность алгоритмов).
- Умение самостоятельно разработать сложное программное решение — от проработки и обсуждения требований до проектирования архитектуры и написания качественного кода.
- Умение работать в команде, работать с чужим кодом.
- Умение писать эффективный и понятный код.
Будет плюсом
- Опыт мобильной/кроссплатформенной разработки на С++.
- Опыт разработки многопоточных приложений.
- Навыки измерения производительности и профилирования графических программ.
- Опыт работы с Jenkins, знание Python, CMake.
Мобильная версия 2ГИС теперь доступна и на iOS
Многие из нас уже давно успели оценить достоинства приложения ДубльГИС как на ПК, так и на смартфонах с ОС Windows Mobile, Symbian и Android. Огромная база организаций и адресов, детализированные карты с возможностью прокладки маршрутов, поддержка GPS, работа мобильных версий в оффлайн, бесплатность — все это позволяет назвать 2ГИС незаменимым помощником для каждого, чей родной город представлен в базе этой программы
Однако владельцы гаджетов на iOS долгое время были лишены этих преимуществ, довольствуясь приложением «Мой город», использующим API и базы 2ГИС, но обладающим двумя «фатальными недостатками» — работой только через онлайн (осторожно, трафик!) и ценой в $0.99. Компания ДубльГИС почти год работала над версией для iOS, и теперь долгожданное приложение наконец-то доступно для бесплатной загрузки в Apple App Store
Версия: 1.0
Русский интерфейс: да
Технические требования: Требуется iOS 4.0 и выше
История двух реджектов
Первый реджект был связан с метадатой. В тексте реджекта говорилось, что у нас в описании (не release notes) не сказано о том, что мы поддерживаем CarPlay. Как вы можете догадаться, ни в review guideline’ах, ни у того же Google Maps такого не было. Мы не стали спорить (потому что это обычно дольше, чем править метадату), скопировали строчку из Release Notes в Description и стали ждали нового ревью.
Второй реджект случился из-за списка городов. У 2ГИСа есть очень крутая фича — полный офлайн-режим работы. Эта фича стрельнула нам в ногу.
При подключении приложения без установленного города к CarPlay, мы не показываем карту, потому что показывать нечего. За это нас и зареджектили. Решение было простым: алерт без кнопок, в котором написано, что нужно скачать город.

Собственный источник геопозиции
В рамках SDK можно использовать произвольный источник геопозиции. Для этого нужно реализовать интерфейс LocationSource.
Чтобы зарегистрировать созданный источник в SDK, нужно вызвать функцию registerPlatformLocationSource().
Основная точка входа в интерфейс — функция . Когда SDK потребуется геопозиция, в эту функцию будет передан объект LocationChangeListener. После этого, чтобы сообщить текущую геопозицию, нужно передать в него массив объектов Location (от более старой позиции к более новой), используя метод .
Чтобы сообщить изменение доступности источника, можно вызвать метод .
Дополнительно можно менять логику определения геопозиции в зависимости от требуемой точности. Требуемая точность передаётся в функцию в виде объекта DesiredAccuracy.
Когда источник геопозиции больше не требуется, будет вызвана функция .
The best framework we ever made
В конце концов, когда всё собралось на реальное устройство, стало понятно, что фиче «2ГИС под CarPlay» точно быть. Настало время делать по красоте.
Проблемы с вьюпортом
Необходимо было настроить вьюпорт карты, чтобы рисовать маршруты в области без лишних контролов, а не просто посередине. Короче говоря, чтобы это выглядело не так:

А так:

Я рассчитывал, что получу какой-нибудь layoutGuide с текущей видимой областью. Чтобы он учитывал и navigationBar, и вьюшку с маршрутом, и контролы на карте. На деле я не получил ничего. До сих пор непонятно, как настраивать вьюпорт, поэтому у нас в коде есть хардкод типа:
Построение проезда не только между двумя точками
В первый релиз мы решили взять наш рубрикатор, сделанный через CPGridTemplate:

Избранное и Дом/Работа через CPListTemplate.

И клавиатурный поиск через CPSearchTemplate:

Код я показывать про темплейты не буду, так как он простой и про него хорошо написана документация (хоть про что-то).
Тестирование и баги
Тестированием занимался artemenko-a-a. Один из первых багов, который он нашёл, мы до сих пор не можем починить.
Дело в том, что при отсоединении телефона от CarPlay-магнитолы спорадически нас прибивает Watchdog — без объяснении причины. Даже syslogs открывали, ничего не понятно. Так что если есть идея, как починить или понять причину, то велкам в комменты.
Следующий баг был в этом же месте, но с особенным поведением. Я писал выше, что метод didDisconnect у CPApplicationDelegate вызывается в момент отсоединения телефона от CarPlay. И в этом методе мы возвращаем карту с экрана магнитолы обратно в основное приложение. Представьте себе, сколько бы мы словили проблем, если бы этот метод не вызывался хотя бы раз из пяти.
Стало понятно, что это проблема iOS, а не конкретно нашего приложения, так как вся система считала, что она подключена к CarPlay.
Я даже зарепортил это как radar (как и все остальные баги). Меня попросили скинуть логи с таким-то профилем, но я не мог ответить поддержке в течение некоторого времени, поэтому они закрыли radar.
Раз Apple делать ничего не планировала, проблему пришлось обходить самостоятельно, так как воспроизводилась она достаточно часто.
И тут я вспомнил, что львиная доля подключений к CarPlay идёт через Lightning. Это значит, что телефон в момент подключения заряжается, а в момент отключения заряжаться перестаёт. А если так, то можно подписаться на состояние батареи и точно узнать, когда телефон перестал заряжаться и отключился от CarPlay.
Схема хиленькая, но выбора у нас не было. Мы пошли этим путём, и всё сработало!
К счастью, этот костыль из кода давно уже удалён: разработчики Apple починили всё в одном из релизов iOS.
Первая палка в колёса
Работа приложения в background’е нас разочаровала. На это было две причины:
- Мы не работаем в background’е. Когда-то оставили это ограничение по техническим причинам и ради энергосбережения.
- Наша карта написана на OpenGL (да, deprecated, да, не Metal, мы всё это знаем), а OpenGL в background state’е не работает. В лучшем случае вы получите чёрную вьюху, а в худшем — краш.
С работой в background’е ещё можно было справиться, но с картой определённо нужно было что-то решать. Тогда-то и пришла идея сделать её через стандартную MKMapView. Пока вы не начали закидывать нас камнями за идею использовать стандартные карты Apple, объясню: мы собирались использовать MKMapView, но не карты Apple.
Дело в том, что MKMapView умеет в загрузку сторонних тайлов. Тайлы — это специальные прямоугольные контейнеры для текстур. У нас как раз оказался сервачок, который умеет отдавать тайлы. На GitHub есть код с реализацией.
Описание 2ГИС — справочник, карта и навигатор
2ГИС — это подробный справочник с картами городов и навигатором. Приложение бесплатное, работает без интернета: достаточно один раз загрузить город. С 2ГИС вы будете как дома даже в незнакомом месте: — быстро найдёте адрес, компанию, телефон, время работы, товар или услугу;— узнаете, как проехать на машине, автобусе, метро или пройти пешком;— найдёте вход в компанию или подъезд. Всё о зданиях. 2ГИС показывает адреса, подъезды, почтовые индексы и организации, которые обслуживают дом: поликлиники, почты, управляющие компании.Подробный справочник. 2ГИС знает телефоны, время работы, соцсети, сайты и входы в организации. Люди добавляют фотографии заведений и пишут отзывы.Точная карта. В 2ГИС отмечены районы, здания, улицы, остановки, станции метро, спортивные площадки, заборы, шлагбаумы и другие объекты.Встроенный навигатор. Учитывает пробки, дорожные знаки, камеры ГИБДД, лежачих полицейских, платные и грунтовые дороги. Строит маршруты между городами.Дорожные события. Пользователи добавляют на карту сообщения о ДТП, перекрытых улицах и камерах ГИБДД. Городской транспорт. 2ГИС знает расписание и маршруты автобусов, троллейбусов, маршруток и трамваев. В 30 городах показывает движение транспорта в реальном времени прямо на карте. Пешие маршруты. Приложение прокладывает путь по тротуарам, дворам, тропинкам, подземным переходам — везде, где можно пройти пешком. Поиск пути для пешеходов работает в 91 городе.Путеводители. В 2ГИС есть подробные гиды по 62 городам России, СНГ, Кипра и ОАЭ. Узнавайте о главных достопримечательностях, лучших кафе и барах.Товары. 2ГИС находит строительные товары и шины из офлайн-магазинов. Помогает сравнить цены на один товар у разных продавцов.Города, которые уже есть в 2ГИС: Абакан, Абу-Даби, Актау, Актобе, Алматы, Альметьевск, Армавир, Архангельск, Астрахань, Атырау, Баку, Барнаул, Белгород, Бийск, Бишкек, Благовещенск, Братск, Брянск, Великий Новгород, Владивосток, Владикавказ, Владимир, Волгоград, Вологда, Воронеж, Грозный, Днепр, Дубай, Екатеринбург, Златоуст, Иваново, Ижевск, Иркутск, Йошкар-Ола, Кавказские Минеральные Воды, Казань, Калининград, Калуга, Каменск-Уральский, Караганда, Кемерово, Киев, Киров, Кокшетау, Комсомольск-на-Амуре, Костанай, Кострома, Краснодар, Красноярск, Курган, Курск, Кызыл, Ленинск-Кузнецкий, Липецк, Магнитогорск, Майкоп, Махачкала, Миасс, Москва, Мурманск, Набережные Челны, Находка, Нижневартовск, Нижний Новгород, Нижний Тагил, Новокузнецк, Новороссийск, Новосибирск, Новый Уренгой, Норильск, Ноябрьск, Нур-Султан, Одесса, Омск, Орёл, Оренбург, Ош, Павлодар, Пенза, Пермь, Петрозаводск, Петропавловск, Петропавловск-Камчатский, Псков, Республика Алтай, Ростов-на-Дону, Рязань, Самара, Санкт-Петербург, Саранск, Саратов, Смоленск, Сочи, Ставрополь, Старый Оскол, Стерлитамак, Сургут, Сыктывкар, Таганрог, Тамбов, Ташкент, Тверь, Тобольск, Тольятти, Томск, Тула, Тюмень, Улан-Удэ, Ульяновск, Уральск, Уссурийск, Усть-Каменогорск, Уфа, Ухта, Хабаровск, Ханты-Мансийск, Харьков, Чебоксары, Челябинск, Чита, Шерегеш, Шымкент, Южно-Сахалинск, Якутск, Ярославль и города Кипра.Facebook — https://facebook.com/2GISRussiaВконтакте — https://vk.com/2gisТвиттер — https://twitter.com/2gisХабр — https://habr.com/ru/company/2gisТелеграм — https://t.me/twogisИнстаграм — https://instagram.com/2gisТехподдержка: dev@2gis.com
Полное описание
С программой 2ГИС на Андроид, вы сможете верно ориентироваться как в неизвестных местах, так и на улицах вашего города. Софт быстро определит местоположение владельца мобильного устройства и поможет найти любой объект на подробной карте.
Имеется возможность узнать адрес, фотографии входа в здание, контактный телефон и часы работы фирмы или заведения. Также можно строить маршруты для проезда на авто, городском транспорте или пешеходной прогулки. Дубль ГИС (2ГИС) показывает время в пути и преодоленное расстояние до нужного места. В базе доступны маршруты общественного транспорта всех видов: автобусы, маршрутки, метро, трамваи.
Стоит отметить, что утилита позволяет скачать карту в память смартфона или компьютера для работы в офлайн-режиме. Есть полезные функции вызова такси, покупки билетов в кинотеатр, заказа столика в ресторане и многое другое.2GIS на Android, наверное, самое удобное приложение для навигации в незнакомом городе, т.к. содержит необходимую информацию не только о крупных торговых центрах, но и тысячах мелких организаций и частных предприятий.
То, о чём нельзя говорить
Перемещение карты жестами
Примерно в это же время вышел навигатор под CarPlay от Google Maps — и там можно было передвигать карту жестами по экрану. Приватные API, подумал я, это очевидно! Ребята из Google просто пришли из соседнего здания и сказали, что им надо. Ведь документация гласит:
Однако я всё-таки решил убедиться и полез гуглить, хоть это и было почти бессмысленно, ведь никаких технических статей про CarPlay Navigation Apps не было. Однако я умудрился найти что-то полезное и, ВНЕЗАПНО, на сайте Apple.
В гайдлайнах я нашел видео, которое говорит, что документация нагло врёт. На видео видно, как карту всё-таки можно перетаскивать жестами. Я понял, что ничего не понял, и единственное, что мне оставалось, — открыть CarPlay.framework и пересмотреть все .h файлы.
И о чудо! Я нахожу в CPMapTemplate’е его делегат CPMapTemplateDelegate, в котором есть 3 метода, которые как будто кричат о том, что если их реализовать, то можно будет получить управление жестами картой.
Я реализовал их и запустил приложение на симуляторе — ничего не сработало. Не успев расстроиться, я понял, что симулятор может быть такого же качества, как и документация, и собрал на девайс. Всё завелось, счастью не было предела!
Забавный факт: CarPlay-магнитоле необходима четверть экрана, чтобы понять, что начался pan-жест. Хочу заметить, что UIPanGestureRecognizer’у нужно всего 10 поинтов.
Неодинаковость UI на разных магнитолах
Нам в поддержку поступило обращение: у пользователя в поиске вылезает всего один саджест, хотя могло бы быть и больше. Странно, подумал я, ведь на всех экранах помещается всего одна строка. Запросили скриншот:

И это совсем отличается от UI CPSearchTemplate, который я показывал выше. И это нужно учитывать при разработке, хоть и никак нельзя понять, сколько ячеек в табличке внизу может вместиться в экран.
Контрол ограничения скорости
Мы посмотрели на статистику и поняли, что навигатором для CarPlay пользуются и надо довести его хотя бы до уровня навигатора в основном приложении. В первую очередь решили добавить контрол ограничения скорости. Без проблем, конечно, не обошлось.
Вопрос номер один: где размещать?
Пошарив снова по .h файлам в CPWindow, я нашел любопытный layoutGuide:
var mapButtonSafeAreaLayoutGuide: UILayoutGuide
И это оказалось тем, что нужно. Наш контрол отлично туда вписался:


Вопрос номер два: это, вообще, законно?
Дело в том, что технически контрол находится на base view. А base view по документации не может содержать в себе ничего, кроме карты:
Но ревьюверы пропустили нас в AppStore, а значит контролы, которые касаются навигации, встраивать всё-таки можно.
Голосовой поиск


По-хорошему, эту фичу нужно было сделать в первую очередь, но у нас накопилось несколько задач из техдолга, которые мешали реализовать голосовой поиск для CarPlay. И эта задача оказалась не такой простой, как казалось.
Проблема первая: анимации. Дело в том, что в CPVoiceControlTemplate нет возможности сделать стандартные анимации. Анимацию для распознавания речи и поиска пришлось собирать покадрово из картинок и указывать, сколько они идут по времени.
Выглядит, как можете догадаться, не очень, но и размер приложения раздувать не хочется.
Проблема вторая: доступы. Алерты на доступ к микрофону и распознаванию речи появляются на дисплее телефона. Пришлось писать на дисплее магнитолы, что пользователю необходимо взять телефон в руки, дать разрешение и только потом пользоваться навигатором на магнитоле. Очень удобно!
Праворульные автомобили.
Нам прислали скриншот, в котором UI всего приложения был перевёрнут!
И, естественно, вьюпорт карты оставался таким, как мы его захардкодили, ведь никто не ожидал, что есть отдельная настройка для праворульных автомобилей. Как «правильно» это обойти, я не нашёл, но заметил, что, поскольку наш контрол ограничения скорости лежит в layoutGuide’е для контролов карты, он переместился в левую сторону.
Ультрафикс не заставил себя ждать. Сделали грубо, но это работает.
Очень надеюсь, что есть правильное решение, и я просто не дочитал.
Добавление объектов
Для добавления динамических объектов на карту (маркеров, линий, кругов, многоугольников) нужно создать менеджер объектов (MapObjectManager), указав объект карты. При удалении менеджера объектов удаляются все связанные с ним объекты на карте, поэтому его нужно сохранить в activity.
Для добавления объектов используются методы и . Для каждого динамического объекта можно указать поле , которое будет хранить произвольные данные, связанные с объектом. Настройки объектов можно менять после их создания.
Для удаления объектов используются методы и . Чтобы удалить все объекты, можно использовать метод .
Маркер
Чтобы добавить маркер на карту, нужно создать объект Marker, указав нужные настройки, и передать его в вызов менеджера объектов.
В настройках нужно указать координаты маркера (параметр ).
Чтобы изменить иконку маркера, нужно указать объект Image в качестве параметра . Создать Image можно с помощью следующих функций:
- imageFromAsset()
- imageFromBitmap()
- imageFromCanvas()
- imageFromResource()
- imageFromSvg()
Чтобы изменить точку привязки иконки (выравнивание иконки относительно координат на карте), нужно указать параметр anchor.
Дополнительно можно указать текст для маркера и другие настройки (см. MarkerOptions).
Линия
Чтобы нарисовать на карте линию, нужно создать объект Polyline, указав нужные настройки, и передать его в вызов менеджера объектов.
Кроме списка координат для точек линии, в настройках можно указать ширину линии, цвет, пунктир, обводку и другие параметры (см. PolylineOptions).
Свойство-расширение преобразует целое число в объект LogicalPixel.
Многоугольник
Чтобы нарисовать на карте многоугольник, нужно создать объект Polygon, указав нужные настройки, и передать его в вызов менеджера объектов.
Координаты для многоугольника указываются в виде двумерного списка. Первый вложенный список должен содержать координаты основных вершин многоугольника. Остальные вложенные списки не обязательны и могут быть заданы для того, чтобы создать вырез внутри многоугольника (один дополнительный список — один вырез в виде многоугольника).
Дополнительно можно указать цвет полигона и параметры обводки (см. PolygonOptions).
Проблема одной карты
Не успел я обрадоваться новости о том, что в CarPlay будет наша карта, как передо мной встала следующая проблема: из-за технических особенностей карта может быть только одна.
Быстрое решение этой проблемы было, хоть и не очень элегантное.
Обычно в момент использования 2ГИС на CarPlay телефон заблокирован и лежит где-нибудь на полочке. А значит карта в этот момент на телефоне не сильно-то и нужна (не помешает для поиска, конечно). Поэтому мы решили при подсоединении телефона к CarPlay забирать карту из основного приложения и выводить её на экран CarPlay магнитолы. А при отсоединении, соответственно, возвращать обратно в приложение на телефон.
Да, решение такое себе, но оно быстрое, до сих пор работает и не пришлось пинать пару других команд, чтобы склепать MVP.
Как пользоваться приложением?
Для того, что пользоваться приложением 2 ГИС с доступом в личный кабинет, необходимо зарегистрировать в системе. Для этого необходимо зайти в приложение, и выбрать кнопку «перейти в личный кабинет». После того, как кнопка была нажата, пользователя перебрасывает на новое окно, внутри которого располагается дальнейшая регистрация, где необходимо ввести адрес организации, после указать свою почту и дождаться письма, в котором будет код подтверждения. Без данного кода не получится активировать аккаунт, и в случае сброса начинать все заново.
Когда пользователь зарегистрирован в системе, то ему открываются дополнительные возможности, например такие, как:
- поиск по наименованию организации, улицы, торгового центра;
- внизу приложения появляется кнопка, на которую необходимо нажать для скачивания приложения на память своего устройства;
- определить свое местоположение (доступно только при работе в сервисе онлайн);
- возможность увеличения карты, или отдаления (в зависимости от предпочтений).
Программа поддерживает двойное моделирование объектов и улиц. Так, если смотреть на карту с большим отдалением, то она ничем не отличается от обычной карты, но при многократном увеличении, карта начинает оживать и превращается в трехмерную пространственную модель.
Кроме этого, в приложении хранится память обо всех объектах, которые только указаны на карте. Для этого существует особый сервис, где необходимо постоянно вносить обновления в работы карты и всего сервиса, относительно новых объектов, и заменённых старых.
Похожие вакансии
Java/Kotlin-разработчик в команду World
Разрабатываем сервисы, которые непрерывно собирают, обрабатывают и доставляют картографические и справочные данные до внутренних систем
Middle C++ разработчик в команду Navi
Строим маршруты во всех продуктах 2ГИС — проезд на авто и общественном транспорте, пешеходные маршруты, пробки, такси и отображение автобусов на карте
Senior C++ разработчик в команду Navi
Строим маршруты во всех продуктах 2ГИС — проезд на авто и общественном транспорте, пешеходные маршруты, пробки, такси и отображение автобусов на карте
Middle C++ разработчик в команду 3D-карты
Развиваем картографический движок: рендерим 3D-объекты, генерируем геометрию, собираем тайлы с данными
Senior C++ разработчик в команду 3D-карты
Развиваем картографический движок: рендерим 3D-объекты, генерируем геометрию, собираем тайлы с данными
iOS-разработчик
Делаем мобильную версию 2ГИС для iOS
Middle/Senior Go-разработчик в UGC
Разрабатываем сервисы, которые позволяют пользователям добавлять контент в продукт и помогают справочнику быть точнее, а другим пользователям — лучше ориентироваться в городе
Middle/Senior Frontend-разработчик в Веб-карту
Делаем API карт, которым пользуются разработчики по всему миру
Middle/Senior C# разработчик в Fiji
Разрабатываем ПО для наших картографов
Тимлид С# в Export
Формируем пакеты данных для 2gis.ru и мобильных приложений 2ГИС
Системный администратор / DevOps
Поддерживаем и улучшаем инфраструктуру и операционную деятельность «Школы 21»
Middle/Senior Python-разработчик в команду Добычи данных
Собираем данные компаний и добавляем в 2ГИС
Middle/Senior Go-разработчик в Товары
Собираем и показываем пользователям товары и услуги в 2ГИС
Golang Техлид в команду Товары
Разрабатываем сервисы для импорта данных о товарах и услугах, проектируем структуру их хранения
Middle+ Go-разработчик в Infrastructure & Operations
Внедряем новые технологии для разработки — поддерживаем сервисы с нагрузкой в 10 000+ RPS
Tимлид в команду Добычи данных
Собираем данные компаний и добавляем в 2ГИС
Разработчик в тестировании в команду 3D-карты
Развиваем картографический движок: рендерим 3D-объекты, генерируем геометрию, собираем тайлы с данными
Senior Android-разработчик в Дело
Создаём приложение, которое поможет предпринимателям поддерживать бизнес в онлайне
Разработчик C++/Qt под Android
Разрабатываем приложение 2ГИС под Android
Middle iOS-разработчик
Разрабатываем SDK для оплаты услуг на АЗС через 2ГИС на iOS
Senior Android-разработчик
Разрабатываем SDK для оплаты услуг на АЗС через 2ГИС на Android
Middle Python-разработчик в команду Navi
Создаем все транспортные сценарии в 2ГИС
Middle/senior frontend-разработчик в Online
Разрабатываем новую десктопную (2gis.ru) и мобильную (m.2gis.ru) онлайн-версию
Frontend-разработчик в Личный Кабинет
Разрабатываем веб-приложение для владельцев компаний
Middle/Senior C# разработчик в Export
Формируем пакеты данных для 2gis.ru и мобильных приложений 2ГИС
iOS-разработчик в навигатор
Строим все маршруты в 2ГИС для iOS
iOS-разработчик в мобильный 2ГИС
Создаём новую версию 2ГИС
Инженер эксплуатации
Помогаем пользователям 2ГИС находить актуальную и полную информацию о товарах и услугах в городе
Тимлид в BIT
Разрабатываем инструменты аналитики
Android-разработчик в команду 2GIS Mobile SDK
Делаем инструмент для интеграции 2ГИС с любыми приложениями
Middle/senior frontend-разработчик
Разрабатываем сервисы и инструменты для удобного использования API
Python-разработчик в команду Data Science
Решаем продуктовые задачи с помощью машинного обучения
Преимущества приложения
Преимущества программы заключаются в:
- Простом и понятном интерфейсе;
- Детальной информации о каждом объекте;
- Написании отзывов;
- Быстром поиске адресов и маршрутов;
- Построении коротких маршрутов;
- Наличии голосового режима;
- Загрузки офлайн карт.
Приложение поможет отыскать ресторан, торговый центр, магазин, банк, фитнес-клуб. Если вы не знаете адрес, 2ГИС любезно вам предоставит всю необходимую информацию, поможет отыскать нужный объект, даже направит вас на вход, чтобы вы не заблудились рядом со зданием.
Это современный гид по городу, который позволит найти путь до больницы, гостиницы или культурных объектов города, до кофейни, ресторана или кафе. Что еще есть в функционале 2ГИС?
- Дорожные происшествия.
- Маршруты общественного транспорта с расписанием.
- Пешие маршруты.
- Поиск товаров по магазинам с указанием цен и адресов.
- Поиск общественных мест питания с доставкой.
- Навигация для грузового транспорта.
- Встроенный GPS навигатор.
В программе заложены карты торговых центров и крупных магазинов, планы расположения лифтов, лестниц и туалетов в здании. Карта настолько детальна, что вы никогда не заблудитесь, имея в смартфоне справочник 2ГИС. Карта подскажет, как и куда пройти до нужной точки, в каком режиме работает объект, какую оплату принимает и есть ли у заведения интернет-ресурс.
Более того, вы сможете узнать о движении общественного транспорта и всегда сориентироваться, в какую сторону стоит двигаться, чтобы найти нужный объект. В программе можно загрузить не только карту России, но и Кипра, Казахстана, Украины, ОАЭ и многие другие.








| Разработчик: | 2GIS |
| Версия: | 5.47.2.371.4 от 26.08.2021 |
| Система: | Android 6.0 и выше |
| Язык: | Русский, Английский и другие |
| Лицензия: | |
| Загрузок: | 11 619 |
| Категория: | Помощники |
| Размер: | 84.8 Мб |
| Оцените: |
Скачать 2ГИС
- Скачать 2ГИС 5.47.2.371.4 для Android 6.0 и выше (84.8 Мб)
- Веб версия 2ГИС