Кастомная карта с кастомными объектами с помощью Jetpack Compose

Всем здравствуйте. Имеется следующая задача: реализовать карту столов для ресторана. Приложение для Андроид, Jetpack Compose. Сразу скажу, что предпринималось: расстановка с помощью GridLayout, вычисление расположения и расстановка с помощью формул для разных экранов... Но все равно это не то (рис. 1)

Попытка с помощью GridLayout

2 года назад публиковался похожий запрос, но он не получил ответа. В целом, подобное требуется и мне (рис. 2)

Похожее мне и нужно

После чего возникла мысль использовать механизм создания обычной карты (как Яндекс Map или Google Map), сделать похожее, но собственноручно. Почему карта? Хотелось бы иметь скролл, подробный скроллу карты + маркеры для интерактива с пользователем. Никакой информации по этому поводу я не нашел, можете подсказать хотя бы материалы, направления и т.д для этой идеи?


Ответы (1 шт):

Автор решения: Wlad

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

сначала вам надо разработать векторные данные. нарисовать эти данные, заполнить их инфой (метаданными).
рисуются они в специальных картографический программах.

затем вам надо развернуть свой специальный картографический сервер и БД к нему.
из популярных (бесплатных) - MapServer или GeoServer
есть еще ArcGisServer, но лицензия стоит дорого (вроде от 10к$). за взломанные ничего сказать не могу.
с помощью этих серверов вы сможете превратить свои данные в карту.

карта может быть двух видов:
WMS (тайловая) - просто картинка. с ней взаимодействовать нельзя.
WFS (векторная) - карта, на которую уже можно тыкнуть и увидеть какую-то информацию.

результат этой работы получается в API.

далее, вам надо как-то подключить это API к вебу. для этого существую следующие библиотеки:
Leaflet, MapBox, Openlayers

в мое время у них не было библиотек под Андроид. только для вэба. (сейчас не знаю как дела обстоят)
поэтому дальше, когда у меня готовый локальный вэб проект, я его подключал в WebView, и писал дополнительные JS-скрипты, чтобы клики с WebVview на нужные мне элементы обрабатывались уже в коде Андроид-приложения.

→ Ссылка