2017-11-03 15 views
10

dòng khác nhau được thêm vào các tuyến đường bản đồ thể hiện bằng cách sử dụng đoạn mã sau:Nghe cho các sự kiện nhấp chuột vào một 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); 

Tôi muốn để có thể xác định khi nào một trong những dòng này được nhấp. Hiện tại, MapBox gọi OnMapClick và chuyển vào đối tượng LatLng. sau đó tôi có thể truy vấn cho các tính năng render với custom-line tài sản sử dụng như sau:

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

Nếu selectedKeys sau đó có chứa bất kỳ trở Feature đối tượng, tôi có thể truy vấn cho tọa độ của họ với .getGeometry(). So sánh các giá trị đó với các giá trị từ đối tượng LatLng đã được chuyển vào, ước tính sơ bộ về dòng nào được nhấp có thể được xác định. Tuy nhiên, điều này rất không chính xác và phiền hà khi các chi tiết đơn hàng được nhóm chặt chẽ.

Làm cách nào một người sẽ nghe các sự kiện nhấp chuột trên các chi tiết đơn hàng này?

+0

Bạn có thể tạo [MCVE] (https://stackoverflow.com/help/mcve) không? – kalabalik

Trả lời

0

Theo tài liệu SDK Android của MapBox.

Không có phương pháp nào để nhấp vào LineLayer không nằm trong lớp cha mẹ, nghĩa là Layer.

Nếu bạn có thể chuyển đổi LineLayer thành Polyline của mình, bạn có thể có phương thức sẵn có để nhấp vào Android.

Tham khảo link để hiểu rõ hơn về điều đó.

Đây là chi tiết phương pháp của nó. onPolylineClick void onPolylineClick(@NonNull Polyline polyline)

**

Được gọi khi người dùng nhấp vào một polyline.

**

Tham số:

polyline - Các polyline người dùng nhấp vào.

Các vấn đề liên quan