Как и зачем мы используем несколько движков карт в inDriver
Карты — один из ключевых элементов многих мобильных приложений. И наш сервис не исключение. С помощью карт пользователь указывает, куда подать автомобиль, а водитель строит маршрут поездки. Кроме того, на карте в реальном времени отображается движение водителя к пассажиру и многое другое.
История
Когда я пришел в Android-команду inDriver в 2016 году, приложение работало с использованием Google Maps SDK. Тогда оно показывало на карте свободных водителей и то, где находится пассажир, после того, как он сделал заказ — то есть совсем немного.
С развитием сервиса карте стало уделяться больше внимания как с точки зрения дизайна, так и в плане разработки. Например, раньше первым, что видел пассажир, была голая форма заказа. Сейчас это форма заказа поверх интерактивной карты.
Но, однажды, из-за ограничений пользовательского соглашения было решено перейти на другой движок карт. После изучения доступных решений выбор пал на Open Source библиотеку osmdroid.
Эта библиотека довольно популярна, имеет обширное комьюнити, активно поддерживается и развивается. Задачу миграции поручили мне, и с тех пор я плотно занимаюсь картами нашего приложения в целом. В процессе миграции мы добавили наложение тайлов от 2GIS. Они хорошо детализированы и узнаваемы в странах СНГ, которые были на тот момент основным нашим рынком.
Буквально через год в связи с расширением компании на зарубежные рынки опять встал вопрос о картах. Ведь тайлов 2GIS для других стран нет, а стандартные от Open Streets Map выглядят скудно. В итоге было принято решение о возвращении Google Maps SDK в проект, но только для зарубежных стран.
Проблема
Мы столкнулись с необходимостью отображать карты на различных движках в зависимости от страны/города. Кроме того, где-то нужно использовать тайлы, где-то — нет.
Почему нельзя просто использовать один движок и поверх него накладывать необходимые тайлы? Такой вариант невозможен из-за того, что политика Google не позволяет использовать тайлы Google Maps поверх другого движка.
Так же хотелось, чтобы разработчик, использующий карты в своей фиче, не задумывался, какая конкретная конфигурация используется в данный момент. Т.е. нужна полная инкапсуляция работы с картой и ее элементами.
Решение
Реализация
Как оказалось, у них есть небольшие отличия, на которые пришлось потратить время, чтобы все работало одинаково на обоих движках:
Затем создал custom view, который будет использоваться разработчиками на их экранах. Вся его разметка состоит из одного ViewStub :
Этот ViewStub будет заполняться GoogleMapView или OsmMapView (в зависимости от переданных параметров). Оборачивание в merge позволяет избавиться от лишней вложенности вьюшек.
После заполнения вьюшки метод onCreate возвращает MapView в виде абстракции, с которой и будут производиться все манипуляции. В общем виде для разработчика это выглядит так:
В разметку добавляется
В подписке mapView.onMapReady производится настройка карты и подписка на события, связанные с картой. Сделал через RxJava, т.к. инициализация Google Maps происходит асинхронно.
Также создал абстракции над сущностями, связанными с картой:
— BaseMarker
— Polyline
— Projection
— InfoWindow
— Bounds
Это требовалось для того, чтобы с ними тоже можно было работать со стороны фичи, например кастомизировать маркер или анимировать его.
Пара примеров, как происходит взаимодействие с картой
Движение карты
Абстрактный метод принимает координаты центра карты и требуемый масштаб
Реализация для osmdroid
Реализация для Google Maps
Также есть расширения этого метода для анимированного движения карты и учета смещения центра карты.
Добавление маркера
Абстрактный метод принимает координату, на которую требуется поместить маркер и иконку самого маркера
Реализация для osmdroid
Реализация для Google Maps
Как и в предыдущем случае, есть расширенные методы для учета якоря маркера, для учета положения добавляемого маркера относительно других маркеров.
В последующем вынес всю работу с картой в отдельный gradle-модуль, подключаемый по необходимости в фичи.
Что получилось в итоге
Разработчикам фич не требуется детально разбираться в том, как устроены и работают карты в проекте. Достаточно добавить custom view в разметку своей вьюшки и использовать готовые методы через абстракцию. Если требуется реализовать новую фичу в картах, это будет делать команда, отвечающая за функционал карты.
Теперь есть возможность при любых проблемах на внешней стороне переключить пользователей на другой движок через админку. Весной нам это понадобилось и очень помогло.
23 апреля 2020 года приложения, использующие Google Maps SDK, начали массово вылетать. Судя по заведенной задаче https://issuetracker.google.com/issues/154855417, проблема коснулась и iOS приложений.
Поскольку в нашем приложении, а iOS команда сделала карты примерно так же, задолго до этого была реализована поддержка двух разных движков карт, достаточно было переключить пользователей на использование osmdroid до тех пор, пока ошибка не будет исправлена.
Конечно, есть у этого подхода и минус.
В процессе использования такой системы мы периодически сталкиваемся с ситуациями, когда в одном движке либо что-то не работает, либо работает не так, как хотелось бы. Из последних могу привести пример с добавлением фичи отрисовки дуги между точками маршрута у пассажира. Казалось бы, задача решается добавлением нескольких Polyline на карту, точки для которой предварительно рассчитываются. На деле оказалось, что Google Maps добавляет маркеры и Polyline в один и тот же слой, при этом встроенные элементы карты (заведения, достопримечательности и т.д.) будут всегда выше этого слоя. Карта osmdroid оказалась в этом плане более гибкой, позволяя создавать несколько слоев. Дальнейшим развитием фичи должна была стать анимация дуги, что тоже работало по-разному в обоих движках. Из-за таких ситуаций приходится тратить время на сравнение и изучение поведения в разных ситуациях.
Возьми свободу в свои руки
Мы даем людям одну из самых важных ценностей в жизни – свободу. Каждый день наши пользователи сами делают свой выбор, заключая сделки на прозрачных, честных условиях и без посредников.
городов в 0 странах
пассажиров и водителей
Почему мы лучше
Цену предлагаешь сам
В inDriver именно вы решаете, сколько заплатить за поездку. Укажите справедливую цену по своему маршруту, получайте предложения от водителей и начните экономить на поездках!
Свобода выбора
Выбирайте лучшее предложение от водителей по цене, марке автомобиля и времени подачи. Почувствуйте настоящую свободу собственных решений.
Знаете кто вас везет
inDriver всегда покажет рейтинг каждого откликнувшегося водителя и количество выполненных им поездок. Принимайте самостоятельное решение, с каким водителем вы хотели бы совершить поездку. Делитесь информацией о поездке и текущим местоположением прямо в приложении.
Как это работает?
Экономьте на поездках
С inDriver вы сможете заказывать поездки гораздо дешевле! Никаких навязанных тарифов и манипуляций с повышенным спросом.
Предлагайте свою цену
Укажите маршрут и справедливую цену, которую вы готовы заплатить.
Выберите лучшее предложение от водителей
Посмотрите все поступившие предложения и выберите наиболее подходящее вам по цене, марке автомобиля, времени подачи и рейтингу водителя.
Indriver и его умные системы
Да где же скрин?Скрин в студию.
Уважаемые пассажиры такси!
Иногда вы удивляетесь, почему вам водители отказывают в поездке с животными. Поверьте, для этого есть причины. Я написал это пост, так как наткнулся на такой комментарий:
Далее, система вам найдёт водителя у которого стоит вот такая галка:
Всем приятных поездок! Уважайте друг друга!
Ответ на пост «Таксист высадил пассажира»
Интересно, когда нибудь доживём до того, чтобы сначала ЯндексТакси принимал меры, а потом отмечался в комментариях?
Сейчас это похоже на ученика, поднявшего руку, но не знающего ответа. Кажется ещё немного и он скажет «извините, тикет в поддержку съела собака».
1. Не полезны (не содержат принятых мер).
2. Не информативны (что в подобных ситуациях делать пассажиру?)
3. Не содержат даже юмора (мы разберемся с водителем и вы его больше не увидите).
Я не клиент, но пожаловался на таксиста
Этот, нехороший представитель ближнего зарубежья, мало того, что влез вне очереди, так еще и стал сигналить под окнами домов, требуя что бы его пропустили. Я не выдержал, когда он на мои замечания ответил бранью в мою сторону и написал в поддержку Яндекса. Прав я или нет, но, я твёрдо уверен что таксистов надо учить.
Суд поставил под угрозу работу «Яндекс.Такси» в Казахстане
Уточняется, что судья специализированного межрайонного экономического суда Алматы Айгуль Туралиева частично удовлетворила иск, поданный ТОО G-Taxi, которое получило право на использование патента на полезную модель «Автоматизированная система заказа такси». В исковом заявлении к компании «Яндекс. Такси Б.В.» представители «G-Taxi» указали, что те нарушают патентные права, используя систему заказов такси.
Судья постановила заблокировать доступ на территории страны не только к приложениям, а также к веб-версии личного кабинета «Яндекс.Про» и сайту для заказа такси с браузера.
В пресс-службе «Яндекс Go» сообщили, что намерены обжаловать решение в апелляционной инстанции и принимать все меры, предусмотренные законодательством республики, для защиты интересов компании.
На момент публикации материала приложение на территории Алматы продолжало работать.
Суд Алматы вынес решение о блокировке «Яндекс.Такси» в Казахстане
Истцом выступило ТОО «G-Taxi» в лице надежды Ким. 31 августа 2016 года эта компания получила патент на автоматизированную систему заказа такси и теперь заявила, что «Яндекс.Go», оказывая услуги с использованием запатентованной системы, нарушает исключительные права истца. К другим сервисам такси, работающим по той же схеме, истцы претензий не имеют.
В «Яндекс.Go» с исковыми требованиями не согласились. Там заявили, что не используют сервер, сайт, трекер, приложение поиска и заказа такси, а также приложение принятия и обработки заказа, которые выделены в качестве признаков полезной модели по патенту.
«Сам патент описывает базовую функциональность практически любого онлайн-сервиса заказа такси. Возникает вопрос: как можно было его зарегистрировать? Решение должно быть новым на момент подачи патентной заявки. А G-taxi подала свою заявку в 2015, хотя такие платформы уже были широко известны с 2000-х годов по всему миру. Поэтому очевидно, что компания планирует либо заработать денег, настаивая на отступных, либо остановить деятельность всех онлайн-сервисов поездок в стране. Такой недобросовестный подход сдерживает развитие современного бизнеса в Казахстане», – отметили в пресс-службе «Яндекс.Go».
Судья также запретила распространение на территории РК мобильных приложений «Яндекс Go» (такси, доставка, драйв, продукты, еда) и «Яндекс Про» (работа в такси/курьером) через интернет-магазины Google Play и Apple Store.
Пока решение суда не вступило в силу, приложение работает.
«Яндекс.Go» подает апелляционную жалобу.
Ответ на пост «Хватит играть в одни ворота»
Да какая уй разница, хочешь ты или не хочешь возить людей в те или иные, якобы для тебя невыгодные р-ны города. Это твоя работа. Возить людей за деньги из точки А в точку В. Если она тебе не нравится, найди другую. При условии, конечно, что ты обладаешь образованием и навыками для другой работы. Но, и тут я хочу тебя разочаровать. Ты там будешь так же выполнять те задания, которые тебе поручат, в рамках твоих служебных компетенций. А не те, которые тебе хотелось бы.
Врачи не ездят на выезды только к тем больным, которые их устраивают.
Пилоты не летают только в те аэропорты, которые им нравятся.
Кассиры не пробивают товары только тем покупателям, от которых хорошо пахнет и оплата без сдачи.
Учителя не обучают только тех учеников, которые вменяемые и хотят учиться.
Просто, делай ту работу, которую делаешь, правильно и качественно. Раз уж взялся за дело. И все тебе будут благодарны. Вот и весь простой секрет.
Иначе ты, получается, находишься сейчас в когорте тех трёх древних профессий, которые выезжают на вызовы неизменно капризничая и выбирая, хочу-не хочу, буду-не буду:
2 драгоценные коробки скотча
Водители, кто сегодня из Алматы в Костанай (Казахстан) на легковушке (возможно серого цвета) забрал 2 коробки с проспекта Райымбека 496А. По времени около 15:14.
Коробки размером 31/31/34см, внутри лежит забрендированный белый скотч с черным логотипом и инфо.
Скотч материальной ценности не представляет, тем более с чужим логотипом.
Возможно кто-то по ошибке забрал, откликнитесь, прошу.
Читатели, поднимите на верх пожалуйста, возможно в «Горячем» сидит данный водитель.
Если надо в комментариях оставлю комменты для минусов. Тег «Без рейтинга» прикрепляю.
Связаться со мной можно по почте: gizat.aubakirova(собака)mail.ru
🥳КОРОБКИ НАШЛИСЬ🥳
Всем неравнодушным премного благодарна и шлю лучик добра
В Нижневартовске уволили таксиста, угрожавшего клиентке за отмену заказа
Так в сервисе такси отреагировали на произошедший инцидент. О дикой истории рассказала в соцсетях сама пострадавшая.
Девушка через приложение «Индрайвер» заказала такси, ожидание автомобиля неприлично затянулась и она вынуждена была отменить заказ. Таксист воспринял это как личное оскорбление, он выследил клиентку, позвонил ей и потребовал оплатить несостоявшуюся поездку. Более, того, таксист заявился к ней на работу, продолжил угрожать и даже замахиваться на девушку. Инцидент произошел мо во время детского мероприятия. Девушка отдала водителю 200 рублей, но он на этом не успокоился: написал вартовчанке сообщение, где угрожал, что она «получит по лицу», если попытается пожаловаться на него. Вартовчанка выложила пост в соцсетях, подробно описав произошедшую с ней ситуацию.
Представители сервиса inDriver отреагировали приняли решение уволить водителя, склонного к насилию.
«Мы провели проверку по данному инциденту, как только к нам поступило сообщение о произошедшем. Водитель, осуществлявший эту поездку, был заблокирован и не сможет больше работать в сервисе», — прокомментировали в компании.»
В Алматы Яндекс.Такси сбил курьера Яндекс.Еды
Казахи могут в юмор
*Каспи это банк. Часто люди расплачиваются за покупки, такси и прочее через переводы которые осуществляются по сотовому номеру клиента.
Лайфхак №1. Таксисты Петропавловска переоборудовали машины, чтобы продолжить работать
Подсказка итальянских таксистов помогла сотням их коллег в Петропавловске не остаться без работы на период карантина, сообщает Tengrinews.kz со ссылкой на Первый канал «Евразия».
Машины в срочном порядке переоборудуют подручными материалами. Идея в том, чтобы полностью изолировать водителя от пассажиров на время поездки. Как выразился один из таксистов, получив указание сделать «такую вот приблуду», водители занялись этим с самого утра и заявки не принимали. В итоге целый город остался на время без такси, а цены у тех, кто рискнул все-таки ехать на вызов, серьезно подскочили.
Вместе с тем, как отмечает канал, стоило бы принимать всерьез, так как день 7 апреля для многих водителей закончился на штрафплощадке, а судьба пяти таксопарков повисла в воздухе. Тотальная проверка, кто и куда едет, вылилась в десятки штрафов.
Пока таксисты перенимали итальянский опыт, город остался без такси. Автобусы в Петропавловске не ходят с момента введения карантина. На личном транспорте передвигаться нельзя. Только по работе и с разрешительной справкой.
Несколько дней в регионе нет новых фактов заражения. 25 заболевших. Жесткий карантин. Петропавловск поделили на 6 зон и еще больше ограничили передвижение, но право на такси даже в таких условиях все-таки отстояли.
Как экономить на такси? Обзор приложения «inDriver»
Всем привет! Пока наступило некое затишье, и особых тем для публикации в блоге нет, решил продолжить свою рубрику о гаджетах и технике. В связи с появлением в Пензе нового приложения для заказа авто «inDriver», попробую рассказать о своих впечатлениях об этом агрегаторе.
Поскольку у меня нет личного автомобиля, данное предложение для меня особенно актуально. Плачевное состояние общественного транспорта в Пензе заставляет достаточно часто обращаться к услугам такси, но как свидетельствует мой личный опыт они далеко не всегда оказываются на должном уровне и по адекватной цене. Приложение «inDriver», на мой взгляд, может позволить решить обе проблемы, так как создатели предлагают крайне интересную схему работы, о которой я расскажу позже.
Разбирать данное приложение я буду на версии для iOS, но также существуют версии для Android и Windows Phone.
После установки приложения и его запуска предлагается сразу указать номер сотового телефона, на который придет SMS код подтверждения, а так же информация о заказах.
После проверки кода, приложение «inDriver» спросит вас, в какой роли вы будете выступать: водителя или пассажира. Так как машины у меня нет, то с начала расскажу о приложении «inDriver» для пассажиров. При первом запуске приложение предлагает заполнить личный профиль, указав: имя, пол, дату рождения, город. Так же можно поставить фотографию профиля.
После этих нехитрых манипуляций, можно приступать к заказу машины. Сам процесс интуитивно понятен, и необходимо указать адрес откуда вас забрать, куда отвести и указать цену, которую вы готовы заплатить за поездку. В этом, пожалуй, главная фишка приложения – цену назначает пассажир, а не таксист. Естественно, что назначать сумму необходимо в разумных пределах, а то велик шанс не дождаться своего «принца на белом коне».
Дополнительно можно отфильтровать водителей по рейтингу, который им выставляют пользователи, ограничиться исключительно проверенными водителями, заказать микроавтобус, обозначить обязательность наличия детского кресла.
Выбрав пункт «Заказ не себе» вы сможете указать номер телефона человека, для которого вы заказываете машину. Согласитесь, удобно, и не надо играть в испорченный телефон, перезванивая другу, которому потребовалась машина.
После оформления заказа начинается самое интересное. Ваш заказ отображается водителям, зарегистрированным в приложении, которые либо соглашаются, либо игнорируют вашу заявку. Если время ожидания критично, то вы, как пассажир, можете поднять заявленную ранее цену на 10 рублей, либо повторить поиск по вашей цене, пока не найдется водитель, готовый вас подвести.
Интересна также вторая вкладка, доступная пассажирам, которая называется «Водители». На ней отображается карта города, на которой отмечены все водители, которые в настоящий момент свободны. Пока водителей в Пензе не так много, как хотелось бы, ведь «inDriver» работает в Пензе только пару дней. Можно посмотреть каждого из них, узнать их автомобиль и среднюю оценку, выставленную другими пассажирами, а так же отправить запрос на поездку и даже позвонить. Очень удобно, ведь можно сразу оценить, как долго тот или иной водитель будет до вас ехать.
Во вкладке «Мои заказы» отображаются текущие и завершенные заказы. Если вы часто ездите по одному маршруту, то вы можете повторять заказ из истории, не вбивая заново данные.
Также пользователю доступно боковое меню, вызываемое нажатием на иконку вверху приложения, так как кроме поездок по городу, «inDriver» позволяет заказать междугородние поездки, а так же вызов грузовых автомобилей.
Для улучшения качества сервиса, в случае возникновения спорной или неприятной ситуации, можно отправить жалобу создателям сервиса.
Приложение «inDriver» фактически содержит в себе функционал двух: для пассажира и для водителей, а переключение между режимами происходит так же в боковом меню. Если вы хотите подработать водителем, то вам необходимо будет заполнить расширенную анкету и кроме вышеуказанных данных указать марку автомобиля, цвет, гос.номер, год выпуска и минимальный тариф, за который вы можете подвезти пассажира.
Для водителя предусмотрено два режима «Свободен» и «Занят». При выборе второго режима, машина не будет отображаться на карте клиентов во вкладке «Водители».
Во вкладке «Заказы» водитель видит все заказы, активные в настоящий момент и вправе выбрать для себя подходящий.,
Во вкладке «Мои заказы» отображается история заказов. А в профиле водителя отображается все отзывы, которые о нем оставили пассажиры, а так же средняя оценка.
В целом, первые впечатления у меня положительные. Приложение добротное и качественно сделанное, и несмотря пока на небольшое количество пользователей, очень перспективное. Во всяком случае моими поездками я остался доволен. Думаю, что приложение «inDriver» сможет несколько расшевелить рынок такси в нашем городе, ведь, несмотря на кажущийся выбор различных служб, этого самого выбора и нет, а возможность оценки и жалоб на водителей лишь будет способствовать улучшению качества предоставляемых услуг.

































