gpt4 book ai didi

android - 监听 LineLayer 上的点击事件

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:39 24 4
gpt4 key购买 nike

使用以下代码将各种线添加到表示路线的 map 中:

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() 查询它们的坐标。将这些值与传入的 LatLng 对象的值进行比较,可以粗略估计点击了哪一行。但是,当行项目紧密分组时,这是非常不准确和麻烦的。

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

最佳答案

根据 MapBox 的 Android SDK 文档。

在父类(即 Layer)中都没有点击 LineLayer 的方法。

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

引用这个link弄清楚它。

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

**

Called when the user clicks on a polyline.

**

参数:

polyline - 用户点击的折线。

关于android - 监听 LineLayer 上的点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47105116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com