Установка аннотаций карты в Mapbox MapSnapshotter на Android - PullRequest
0 голосов
/ 12 марта 2020

У меня есть приложение Android, которое передает изображения карт через сокет UDP на внешнее встроенное устройство. Поэтому я создал службу переднего плана (потоковая передача карты должна выполняться в фоновом режиме, чтобы работать также, когда другое приложение находится впереди или экран выключен), которая создает экземпляр MapSnapshotter. Пока все работает нормально.

Теперь я хотел бы добавить аннотации (например, линии или значки, например маркер текущей позиции) к снимку. Тем не менее, интерфейс MapSnapshotter довольно ограничен. Я смогу отредактировать стиль JSON вручную, добавив нужные источники и слои, которые мне нужны, и установив стиль непосредственно с помощью setStyleJson. Но это заставляет моментальный снимок перезагружать весь стиль снова, что очень медленно (в моей настройке это занимает около 1 секунды), что не соответствует моим требованиям. Конечно, другая возможность состоит в том, чтобы рисовать линии / значки непосредственно в растровом изображении, возвращаемом моментальным снимком, но это очень ограничено (например, я не могу нарисовать ниже текста) и усложняется, когда карта наклонена.

У кого-нибудь есть опыт решения этой проблемы или есть идеи, как ее решить? Идеально было бы, если бы я мог использовать плагин аннотации Mapbox. К сожалению, для создания экземпляра менеджера аннотаций типа SymbolManager мне нужен MapView / MapboxMap. Я предполагаю, что внутренне MapSnapshotter также содержит какой-то MapboxMap, но он определенно не доступен через интерфейс publi c. Любая помощь высоко ценится!

1 Ответ

0 голосов
/ 13 марта 2020

Mapbox Android MapSnapshotter в настоящее время не поддерживает захват стиля выполнения, добавленного на карту. Таким образом, даже если бы вы могли настроить менеджер аннотаций (который вы правильно указали, сделать невозможно из-за зависимости от базового MapView / MapboxMap), изображение, извлеченное из snapshot.getBitmap(), не будет содержать аннотации ,

Похоже, вы заинтересованы в отображении динамических аннотаций c на карте (таких как местоположение пользователя), которые, вероятно, часто изменяются. Таким образом, это предложение, скорее всего, не будет соответствовать вашему варианту использования, но все же стоит упомянуть: вы можете попробовать добавить маркеры к самому стилю карты, используя Mapbox Studio , а затем передать полученный стиль карты в снимок withStyle параметр.

В качестве альтернативы, вы можете создать экземпляр MapboxMap объекта вместо MapSnapshotter, а затем использовать предложенный код в этом сообщении переполнения стека , которое не указано c для Mapbox. Если вы передадите Layout, содержащий объект вашей карты Mapbox, в метод takeScreenShot, указанный в ответе на связанный пост, вы сможете сгенерировать Bitmap, содержащий вашу карту и аннотации, добавленные на указанную карту, с помощью менеджера аннотаций. или другой вид добавленного клиентом слоя карты. Хотя этот подход теряет преимущество генерации моментальных снимков в фоновом потоке устройства, он обеспечивает большую гибкость с точки зрения добавления стиля выполнения.

Тем временем я бы рекомендовал следить за Mapbox. Android MapSnapshotter документация для любых изменений, чтобы приспособить этот динамический c сценарий использования и, возможно, открыть проблему в mapbox/mapbox-gl-native-android, чтобы озвучить запрос функции.

...