热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用MapBox在街道名称下绘制一条线》经验,为你挑选了1个好方法。

我想使用Mapbox绘制一条路线.我试过添加折线:

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

但它一直在街道名称之上.我怎样才能在街道名称下方移动?



1> Minh Nguyễn..:

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

但是,SDK有一个单独的API,称为运行时样式,它允许您将数据放在地图的任何图层之下或之上.在此示例中,您可以使用如下代码将形状源添加到地图的样式以及渲染形状源的线图层.(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
    }
}

顺便说一下,如果您需要的不仅仅是一条路线,那么适用于iOS的Mapbox Navigation SDK会提供一个完整的逐向导航UI,其中包括一个针对显示路线进行了优化的地图.


推荐阅读
author-avatar
宝贝缘缘儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有