Różne linie są dodawane do map stanowiących tras za pomocą następującego kodu:Posłuchaj zdarzeń Kliknij na 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);
chciałbym być w stanie określić, kiedy jedna z tych linii jest kliknięty. Obecnie MapBox wywołuje OnMapClick
i przekazuje obiekt LatLng
. Mogę wtedy kwerendy za świadczone cech z nieruchomości custom-line
stosując następujący:
PointF pixel = mapboxMap.getProjection().toScreenLocation(point);
List<Feature> selectedKeys = mapboxMap.queryRenderedFeatures(pixel, Filter.has("custom-line"));
Jeśli selectedKeys
następnie zawiera każdy wrócił Feature
obiektów, mogę zapytać o ich współrzędne z .getGeometry()
. Porównując te wartości z wartościami z obiektu LatLng
, który został przekazany, można określić przybliżoną wartość, która została kliknięta. Jest to jednak bardzo niedokładne i kłopotliwe, gdy elementy zamówienia są ściśle pogrupowane.
Jak można posłuchać zdarzeń kliknięcia w tych elementach zamówienia?
Czy można zrobić [MCVE] (https://stackoverflow.com/help/mcve) proszę? – kalabalik