Как скрыть текстовое поле MapBox Android PointAnnotation в зависимости от масштаба карты в Java

#java #android #expression #mapbox

Вопрос:

Я ищу быстрый метод для отображения большого количества точечных обозначений (gt; 19000) с уникальными данными и отображения текстового поля только в том случае, если масштаб карты превышает 17. Я использую Android 11 и MapBox 10.1.0 на realme 7

В данный момент я просматриваю свой список данных и создаю опцию для каждого элемента:

 s = new PointAnnotationOptions()  .withGeometry(p)  .withData(data)  .withIconImage(marker)   .withTextField(text)  ...  

После создания этого списка annotationmanager создает их.

 m_annotationMgr.create(options);  

AnnotationManager имеет следующие флаги

 m_annotationMgr.setIconAllowOverlap(true); m_annotationMgr.setIconIgnorePlacement(true); m_annotationMgr.setTextAllowOverlap(true); m_annotationMgr.setTextIgnorePlacement(true);  

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

 Listlt;PointAnnotationgt; annotations = m_annotationMgr.getAnnotations(); for (int i=0; ilt;annotations.size(); i  ) {  annotations.get(i).setTextOpacity(m_annotationTextVisible ? 1.0 : 0.0); }  

и обновите менеджера

 ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(() -gt; {  // update annotation mgr  m_annotationMgr.update(m_annotationMgr.getAnnotations()); });  

Это занимает более 2:30 минут.

Есть ли более быстрый метод, например выражение или что-то в этом роде? Или было бы лучше создать второй набор точечных обозначений на отдельном слое и использовать их только для текста и включения и выключения слоя? Спасибо