Mapbox:如果我们想在地图上显示一条线,是否需要使用LineLayer?

3

我正在阅读注释插件的文档以及示例,但仍然不太理解如何使用Line。

我想创建一条线路,并需要经常使用附加坐标进行更新。在Google Maps中很容易实现,因为我们声明一个Polyline对象,获取LatLng点并设置新坐标。基本上,我不会使用很多自定义,只需设置线路的宽度和颜色。

那么我们是需要定义层,还是只需为此情况使用选项?

第二个问题:(从文档中,我看到了很多FeatureCollection和GeoJSON的示例)这是更新线路的唯一方法吗?

1个回答

2
Tldr; 有两个主要的选项,基本上取决于您选择哪条路线。 每次更新可视化线时,可以使用您的LatLng坐标创建LineString/Line您可以使用LineLayer - https://docs.mapbox.com/android/maps/examples/draw-a-geojson-line/ - https://docs.mapbox.com/android/maps/examples/create-a-line-layer(在此示例中, style.addSource(new GeoJsonSource("line-source", FeatureCollection.fromFeatures(new Feature[] {Feature.fromGeometry( LineString.fromLngLats(routeCoordinates) )})));)
实际上只需使用以下代码即可:style.addSource(new GeoJsonSource("line-source", LineString.fromLngLats(routeCoordinates)));
更新正在被LineLayer使用的源的GeoJSON。每次要更新时创建一个新的LineString
请参见GeoJSON更新部分中的第二个代码块(source.setGeoJson()等):https://docs.mapbox.com/android/java/overview/geojson/#geojson-updates 您可以在注释插件中使用LineManager - https://github.com/mapbox/mapbox-plugins-android/blob/master/app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/annotation/LineActivity.java#L48 - https://github.com/mapbox/mapbox-plugins-android/blob/master/app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/annotation/LineActivity.java#L64-L73 通过LineManager更新线: enter image description here 每次要更新时创建一个新的Line

感谢提供的方法。所以基本上LineOptions就是实际的Line?我尝试过Line currentLine = new Line(),但它告诉我Line是私有的(虽然在文档中它被声明为公共的)。所以要么是LineString + GeoJSON,要么是LineManager + LineOptions - H.Karatsanov
1
没错。lineManager.create(lineOptions); 创建了一个 Line。https://github.com/mapbox/mapbox-plugins-android/blob/master/app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/annotation/LineChangeActivity.java 中有 Line 对象的使用。https://github.com/mapbox/mapbox-plugins-android/blob/master/app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/annotation/LineChangeActivity.java#L108 - langsmith
1
没有看到你的代码,很难帮助你,哈哈。Mapbox支持团队也可以提供帮助 https://support.mapbox.com/hc/en-us/requests/new?ticket_form_id=360000291231。我的代码在 https://gist.github.com/langsmith/0ba43a5b7fe7bf7e352ca83aed014e10 创建 --> https://imgur.com/a/DjpSkho。我使用了Mapbox Android演示应用程序来启动你的目标,而不是从头开始创建一个全新的Android Studio项目。 - langsmith
1
在我的imgur链接中,您会看到LocationComponent位于您想要的线条之上。我循环遍历所有地图层,并查找以mapbox-android-line-layer-开头(不带数字结尾)的层,以便通过.layerAbove()传递的id是插件添加的最新层。 - langsmith
1
无法确定您是否已经这样做,但我建议在运行mapFragment.getMapAsync(this)之前,将LocationComponentOptions代码和其他内容放在onMapReady()回调区域内运行。一旦知道地图和样式已经完成设置,请运行与地图相关的内容。请参阅https://docs.mapbox.com/android/maps/examples/support-map-fragment/和https://github.com/mapbox/mapbox-android-demo/blob/master/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/basics/SupportMapFragmentActivity.java#L55-L71。 - langsmith
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接