2017-11-03 114 views
10

各种行添加到使用下面的代码映射代表路线:监听点击事件上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()查询自己的坐标。将这些值与传入的对象进行比较,可以确定点击哪条线的粗略估计值。但是,当订单项紧密分组时,这是非常不准确和麻烦的。

如何监听这些订单项上的点击事件?

+0

请问您可以制作[MCVE](https://stackoverflow.com/help/mcve)吗? – kalabalik

回答

0

根据MapBox的Android SDK文档。

没有办法在父类中点击LineLayer,即Layer

如果您可以将您的LineLayer转换为Polyline,您可以使用内置的方法来点击Android。

请参阅此link以了解它。

这是它的方法细节。 onPolylineClick void onPolylineClick(@NonNull Polyline polyline)

**

当用户点击折线调用。

**

参数:

polyline - 用户点击折线。