#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 минут.
Есть ли более быстрый метод, например выражение или что-то в этом роде? Или было бы лучше создать второй набор точечных обозначений на отдельном слое и использовать их только для текста и включения и выключения слоя? Спасибо