Подтвердить что ты не робот

Прослушивание событий click на LineLayer

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

private LineLayer makeLineLayer(List<GeoPoint> routePoints, String title) {

    String sourceTitle = "line-layer-" + lineCount;

    List<Position> points = new ArrayList<>(routePoints.size());
    List<Feature> routes = new ArrayList<>(routePoints.size());
    for (GeoPoint point : routePoints) {
            points.add(Position.fromCoordinates(point.getLongitude(), point.getLatitude()));
    }
    LineString route = LineString.fromCoordinates(points);

    Feature routeFeature = Feature.fromGeometry(route);
    routeFeature.addStringProperty("custom-line", "0");
    routes.add(routeFeature);

    GeoJsonSource linesSource = new GeoJsonSource(
                sourceTitle,
                FeatureCollection.fromFeatures(routes));
    mapboxMap.addSource(linesSource);

    LineLayer lineLayer = new LineLayer(title, sourceTitle);
    lineLayer.setProperties(
        //Sets properties...
    );

    return lineLayer;
}

LineLayer lineLayer = makeLineLayer(getRoutePoints());
mapboxMap.addLayer(lineLayer);

Я хотел бы определить, когда будет нажата одна из этих строк. В настоящее время MapBox вызывает OnMapClick и передает объект LatLng. Затем я могу запросить предоставленные функции с помощью свойства custom-line, используя следующее:

PointF pixel = mapboxMap.getProjection().toScreenLocation(point);
List<Feature> selectedKeys = mapboxMap.queryRenderedFeatures(pixel, Filter.has("custom-line"));

Если selectedKeys затем содержит любые возвращенные объекты Feature, я могу запросить их координаты с помощью .getGeometry(). Сравнивая эти значения с значениями из объекта LatLng, который был передан, можно определить приблизительную оценку того, какая строка была нажата. Тем не менее, это очень неточно и сложно, когда позиции тщательно сгруппированы.

Как можно прослушивать события кликов по этим позициям?

4b9b3361

Ответ 1

В соответствии с документацией MapBox Android SDK.

Нет способа щелкнуть по LineLayer ни в родительском классе i.e. Layer.

Если вы можете конвертировать LineLayer в Polyline, у вас может быть встроенный метод для нажатия на Android.

Обратитесь к этой ссылке, чтобы получить четкость.

Это его метод. onPolylineClick void onPolylineClick(@NonNull Polyline polyline)

**

Вызывается, когда пользователь нажимает на полилинию.

**

Параметры:

Polyline - Полилиния, на которую пользователь нажал.