MGLRasterTileSource 绘制在 MGLOverlay 上方或其他不需要的图层下方。如何获得正确的 z 顺序?

MGLRasterTileSource is drawn above MGLOverlay or below other unwanted layers. How do I get the z-order right on this?

我正在使用 Mapbox iOS SDK v6.3.0

我的地图上有一个 MGLOverlay,但每当我添加 MGLRasterTileSource 时,它​​就会出现在叠加层上方并将其隐藏!

我目前已经通过在 style.insertLayer(layer, at: x)

中随机插入数字来修复它

一定有更简洁的方法来做这件事吧?

默认地图样式 URL 工作正常,这只是我的自定义栅格图块,我必须在其中手动编辑样式以添加源和图层。

只是检查一下,您是否已经尝试添加栅格图层并指定 layer it should go under?像这样: style.insertLayer(rasterLayer, below: existingLayer)

此外,我建议使用 style layers, as these are more performant and controllable. Did you get a chance to look into the MGLLineStyleLayer for your GPS track? Theres a tutorial on this here

我正在加载 2 种不同类型的地图

  1. Mapbox styleURLs:设置起来非常简单,因为您只需设置 mapView.styleURL
  2. 栅格图块:这些图块添加起来更复杂,您可以调用 addSource()addLayer()(或者在我的情况下为 insertLayer(layer: below:)

我最初使用 MGLPolyline 实现的路线在 styleURL 地图上运行良好,但如我在问题中所述,在栅格瓦片地图上遇到了问题。

Mapbox 支持(Megan,另一个答案)提到我应该尝试使用 MGLLineStyleLayer,因为它的性能更高,而且我可以更好地控制 z 顺序,因为它在同一个 style.layers数组,我可以 insertLayer(below:) (我似乎无法与 MGLPolyline 一起使用)。

但是,一旦我这样做了,styleURL 地图就不再起作用了,因为当我切换到那种地图样式时,它会清除所有样式图层并重建它!

因此,为了最终解决我的问题,我不得不在每次切换到 styleURL 类型的地图时重新添加 MGLLineStyleLayer(和来源)。

一个 GOTCHYA!现在这确实有效,但由于某种原因我无法缓存 MGLLineStyleLayerMGLShapeSource 并使用源和层中的 addSourceaddLayer 直接重新添加它我已缓存...

我不得不从头开始重新初始化它们,否则 Mapbox 会抛出我没有正确创建它们的异常。我不知道哪里出了问题,这是唯一似乎有效的方法。

谁知道我偏离了轨道,有一个更简单的解决方案,但这对我有用。