2017-11-03 51 views
10

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?

+0

Czy można zrobić [MCVE] (https://stackoverflow.com/help/mcve) proszę? – kalabalik

Odpowiedz

0

Zgodnie z dokumentacją SDK systemu Android MapBox.

Nie istnieje żadna metoda kliknięcia na LineLayer ani w klasie nadrzędnej, tj. Layer.

Jeśli możesz przekonwertować swojego LineLayer na Polyline, możesz mieć wbudowaną metodę klikania w systemie Android.

Skorzystaj z tego link, aby uzyskać większą przejrzystość.

To szczegóły metody tej metody. onPolylineClick void onPolylineClick(@NonNull Polyline polyline)

**

Wywoływana, gdy użytkownik kliknie na polilinii.

**

Parametry:

polyline - Polilinia użytkownik kliknął.