Android Mapbox как фиксировать щелчки маркеров при использовании слоя CirlceClustering

Приложение My Current для Android использует отличный SDK Mapbox

implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:8.0.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v7:0.6.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v7:0.9.0'

В моем приложении отображается около 50 000 маркеров, и я использую кластеризацию CircleLayer.

Приложение работает так, как требуется / ожидалось, за исключением того факта, что я не вижу, как определить, когда мой пользователь нажимает на любой из маркеров низкого уровня.

Все методы mapboxMap, связанные с маркером, устарели и рекомендуют разработчику использовать

use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation">
   * Mapbox Annotation Plugin

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

Что мне не хватает?


person Hector    schedule 14.06.2019    source источник


Ответы (1)


Чтобы обнаружить любой щелчок по вашему CircleLayer, вам нужно сначала реализовать методы onMapClick или onMapLongClick. Затем при каждом обнаруженном щелчке нужно запрашивать исходный слой и видеть, есть ли какие-либо объекты рядом с этим местом. Если да, то вы можете получить N ближайших объектов и обработать их поведение. Должно получиться так:

@Override
public boolean onMapClick(@NonNull LatLng point) {

 // Get the clicked point coordinates
 PointF screenPoint = mapboxMap.getProjection().toScreenLocation(point);

 // Query the source layer in that location
 List<Feature> features = mapboxMap.queryRenderedFeatures(screenPoint, "MY_SOURCE_LAYER_ID");

 if (!features.isEmpty()) {

  // get the first feature in the list
  Feature feature = features.get(0);

  // do stuff...
 }

 return true;
}

Это очень простой способ обработки кликов по данным ваших слоев. Вы можете найти этот немного измененный мной пример здесь.

person philoez98    schedule 22.06.2019