如何使用MapBox在街道名称下绘制一条线

时间:2017-05-09 15:22:20

标签: ios mapbox

我想使用Mapbox绘制路线。我试过添加折线:

let polyline = MGLPolyline(coordinates: &coords, count: UInt(coords.count))
mapView?.add(polyline)

但它一直在街道名称之上。我怎样才能移到街道名称下面?

1 个答案:

答案 0 :(得分:5)

如果您将MGLPolyline直接添加到MGLMapView,则会将其添加为注释;目前,Mapbox iOS SDK仅支持在所有内容之上添加注释。

但是,SDK有一个名为runtime styling的独立API,可让您将数据放置在地图的任何图层之下或之上。从this example开始,您可以使用以下代码将形状源添加到地图的样式中,并使用线图层渲染形状源。 (MGLLineStyleLayer让人联想到MapKit的MKOverlayPathRenderer。)

let routeFeature = MGLPolylineFeature(coordinates: &coords, count: UInt(coords.count))
let routeSource = MGLShapeSource(identifier: "route", shape: routeFeature, options: nil)
mapView.style?.addSource(routeSource)
let routeLayer = MGLLineStyleLayer(identifier: "route", source: routeSource)
// Set properties like lineColor, lineWidth, lineCap, and lineJoin
mapView.style?.insertLayer(routeLayer, above: roadLayer) // or below: labelLayer

如果您知道道路或标签图层的标识符,则上述代码有效。您可以通过在Mapbox Studio中打开样式来获取标识符。对于更健壮的东西,您可以迭代地图样式中的所有图层,将路径图层插入到您找到的第一个非符号图层上方。 (使用符号图层渲染标签和图标。)

for layer in style.layers.reversed() {
    if !(layer is MGLSymbolStyleLayer) {
        style.insertLayer(routeLayer, above: layer)
        break
    }
}

顺便说一句,如果您需要的不仅仅是一条路线,Mapbox Navigation SDK for iOS还附带一个完整的精细导航用户界面,其中包括一张针对显示路线而优化的地图。