Карты в NodaLogic Часть 1. Начало. Яндекс карты.
Платформа NodaLogic это многоцелевая платформа для разных предметных областей. И мобильная часть платформы это не только «с ТСД по складу бегать». Для решений, связанных с доставкой, проведением работ на выездах (например монтаж на выезде) или еще каких то целей могут понадобится карты. Карты для отображения адресов, точек, маршрутов и т.д.
На данном этапе развития платформы все, связанное с картографией я буду реализовывать только в мобильной платформе, в веб-клиенте - нет. Почему? В веб-клиенте есть например html-поле или проекция html, а у провайдеров картографии html-api всегда на первом месте и встраивается без каких-либо проблем (в отличии от mobile SDK кстати). Просто попросите любую LLM (или nGenie code) сделать интеграцию и это дело 5 минут реально. Конечно, идея иметь единый API для мобильной и веб-платформы подкупает, но есть пару моментов: во-первых, задачи чаще всего разные (где-то на сервере маршруты планируются, а клиент их должен отображать), во-вторых, для веб именно есть некоторые интеграционные нюансы, которые не хотелось бы прятать под прокси-API
Разные провайдеры – одно API

Самым простым и естественным для Android-приложения являются Google-карты. И их не будет. Все дело в том, что Google требует жесткой интеграции ключа в пакетах приложений. Нельзя использовать динамический ключ. А у меня одно приложение на всех – лимиты быстро кончатся. Поэтому логика использования картографических решений у меня простая: если оно требует ключа, то это динамический ключ, указываемый в настройках приложения. Таким образом каждый клиент выпускает под себя ключ и использует свой лимит.
При этом, так как логика работы с картами в принципе одинаковая то для разработчика просто существует слой инструментов NodaLogic с которым он работает независимо от провайдера. Когда меняется провайдер, разработчику не надо все переписывать, он просто меняет в одном месте.
Провайдеров картографии (те, кто реально выпускает сами карты) не так уж много. Я не против со временем уместить их все в NodaLogic. Из всех провайдеров я не смогу пользоваться только Google и Apple – картами. У остальных есть динамические ключи. Но начну я с двух полярных вариантов «дорого-бохато» (Яндекс) и «дешево-сердито»(OSM). Я провел опрос в ТГ канале и он показывает тенденцию – Яндекс лидирует (*для русскоязычного сообщества) Вторым за ним идет 2 Гис, но он как мне кажется всё-таки больше распространён в восточной части страны (откуда он и появился). На самом деле напихать провайдеров именно в мобильную платформу это не цель. Ведь тут зависит от задач. Планировать маршруты и выполнять геокодирование вы можете на одном инструменте, а в мобильном решении отображать это – в другом. Ведь все в итоге сводится к latitude : longitude или к точкам полилинии.
Яндекс карты
Итак, первый провайдер – Яндекс. Само API карт (единое) описано в документации https://nodalogic-txt-ru.readthedocs.io/ru/latest/maps_ru.html
А в этой статье я расскажу о возможностях и особенностях.

Возможности Яндекс-карт в NodaLogic
- Отображение карты c зумом и объектами онлайн и оффлайн. Про оффлайн читайте ниже.
- Отображение точек в виде иконки с цветом и надписью. Точки можно задавать, как и любые иконки в NodaLogic в виде svg-строки. Где взять свои иконки и как использовать посмотрите в документации, это просто. Поддерживаются размеры, настройка текста.
- Центрирование на точку или на позицию GPS.
- Отображение полилинии . Это для тех случаев, когда маршруты делаются в другом месте, а клиет их только показывает
- Получение событий от карты: тапы, долгие тапы, тап по объекту ну и там всякие служебные. Возвращает понятное дело коодрдинаты, дальше с ними делаешь уже что нужно.
- Поиск объектов, геокодирование и обратное геокодирование. Геокодирование: вводишь название объекта получаешь координаты, обратное геокодирование: вводишь координаты, получаешь название.
- Построение маршрутов. В приложении можно строить маршруты и получать их точки (массив полилинии)
И да, NodaLogic это всё-таки не навигатор, поэтому в примерах по картам я сделал кнопку поделиться и методы поделиться координатами/открыть координаты share_location(55.75, 37.62, "Клиент") / open_location(55.75, 37.62, "Клиент") чтобы передавать работу с координатами всё-таки более специализированному ПО, а не вести в приложении NodaLogic. Это было бы глупо.
Ключ и лицензия
Для того, чтобы Яндекс карты у вас заработали надо в приложении указать ваш ключ Яндекс-карт. Надо зайти в личный кабинет на https://yandex.ru/maps-api и выпустить свой ключ. Для того, чтобы попробовать как это все работает отлично подходит Бесплатный ключ. У него ограничение 1000 запросов в сутки. И бесплатный ключ нельзя использовать в коммерческих целях. Только для разработки. Ознакомьтесь с лицензией Яндекс.

VPN
Я чуть с ума не сошел, когда в отладке не мог понять почему мне не приходит колбек от роутера и геокодера. При этом сама карта отображалась и точки работали. Дело было в VPN на устройстве (правительство, кстати, ведь говорило, что VPN-вредно. Я проверил – реально вредно) . Зачем давать карту и не давать колбеки от асинхронных методов? Так даже фашисты над евреями не издевались! В общем ребята, для Яндекс-карт отключайте VPN.
Оффлайн-карты
Появился новый раздел меню где можно скачать оффлайн-карты заранее и пользоваться ими соответственно без интернета, чтобы трафик не расходовать. На ней можно управлять загрузками, загружать, удалять. На OSM пока не обращайте внимания, это в разработке, вам нужен Яндекс. Причем, что касается Яндекс-карт, то оффлайн там работает и прокладка маршрута и геокодер. Вот что значит дорого-богато. Но, кстати говоря, в бесплатном ключе оффлайн карты не работают.

Комментарии
Комментарии видны всем; оставлять их могут зарегистрированные пользователи NodaLogic.