监听点击事件上LineLayer
问题描述:
各种行添加到使用下面的代码映射代表路线:监听点击事件上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()
查询自己的坐标。将这些值与传入的对象进行比较,可以确定点击哪条线的粗略估计值。但是,当订单项紧密分组时,这是非常不准确和麻烦的。
如何监听这些订单项上的点击事件?
答
根据MapBox的Android SDK文档。
没有办法在父类中点击LineLayer
,即Layer
。
如果您可以将您的LineLayer
转换为Polyline
,您可以使用内置的方法来点击Android。
请参阅此link以了解它。
这是它的方法细节。 onPolylineClick void onPolylineClick(@NonNull Polyline polyline)
**
当用户点击折线调用。
**
参数:
polyline
- 用户点击折线。
请问您可以制作[MCVE](https://stackoverflow.com/help/mcve)吗? – kalabalik