Android Mapbox, как захватывать щелчки маркера при использовании слоя CirlceClustering - PullRequest
2 голосов
/ 14 июня 2019

В моем текущем 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.

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

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

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

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

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

1 Ответ

0 голосов
/ 22 июня 2019

Чтобы обнаружить любой щелчок на вашем 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;
}

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

...