gpt4 book ai didi

ios - MapBox:在注释上绘制的 MGLineStyleLayer

转载 作者:行者123 更新时间:2023-11-28 07:30:44 24 4
gpt4 key购买 nike

我正在尝试将注释和 MGLineStyleLayer 添加到 mapView。我已成功添加它们,但 LineLayer 绘制在注释上方。我希望在线条图层上绘制注释。这是我的实现

 /*This is where i am adding the markers*/
func createMapPoints(points: [CLLocationCoordinate2D], dashed: Bool = false) {
var waypointType: MapAnnotationEnum = .waypointAnnotation
if dashed {
waypointType = .offsetWaypoint
}
addLineLabel(points: points, width: 7, color: UIColor.white, dashed: dashed)
for point in points {
_ = addAnnotationLabel(location: point, title: "WP", type: waypointType)
}
}

func addAnnotationLabel(location: CLLocationCoordinate2D, title: String, type: MapAnnotationEnum) -> CustomMapGLAnnotaion {
let annotation = CustomMapGLAnnotaion()
annotation.coordinate = location
annotation.title = title
annotation.annotationType = type
self.mapView.addAnnotation(annotation)
return annotation
}

func addLineLabel(points: [CLLocationCoordinate2D], width: CGFloat, color: UIColor, dashed: Bool = false) {
let polyline = CustomMapGLPolyline(coordinates: points, count: UInt(points.count))
polyline.width = width
polyline.color = color
shapeCount += 1
if dashed {
polyline.title = "dashed"
addDashedLine(polyline: polyline)
} else {
polyline.title = "0"
addCasingLine(polyline: polyline)
}
print("Last Execution Point 3")
self.mapView.addAnnotation(polyline)
}

func addCasingLine(polyline: MGLPolyline) {
guard let style = self.mapView.style else { return }

let source = MGLShapeSource(identifier: "line\(shapeCount)", shape: polyline, options: nil)
style.addSource(source)

style.layer(withIdentifier: )
let lineLayer = MGLLineStyleLayer(identifier: "line-layer\(shapeCount)", source: source)
lineLayer.lineJoin = NSExpression(forConstantValue: "round")
lineLayer.lineCap = NSExpression(forConstantValue: "round")
lineLayer.lineColor = NSExpression(forConstantValue: #colorLiteral(red: 0.1254901961, green: 0.4901960784, blue: 0.9137254902, alpha: 1))
lineLayer.lineOpacity = NSExpression(forConstantValue: 1)
lineLayer.lineWidth = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", [14: 4, 18: 4])
style.addLayer(lineLayer)
}

func addDashedLine(polyline: MGLPolyline) {
guard let style = self.mapView.style else { return }
let source = MGLShapeSource(identifier: "line\(shapeCount)", shape: polyline, options: nil)
style.addSource(source)
let dashedLayer = MGLLineStyleLayer(identifier: "polyline-dash\(shapeCount)", source: source)
dashedLayer.lineJoin = NSExpression(forConstantValue: "round")
dashedLayer.lineCap = NSExpression(forConstantValue: "round")
dashedLayer.lineColor = NSExpression(forConstantValue: #colorLiteral(red: 0.9411764706, green: 0.3764705882, blue: 0.1921568627, alpha: 1))
dashedLayer.lineOpacity = NSExpression(forConstantValue: 1)
dashedLayer.lineWidth = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", [14: 4, 18: 4])
dashedLayer.lineDashPattern = NSExpression(forConstantValue: [0, 1.5])
style.addLayer(dashedLayer)
}


这是两个自定义类的定义

  class CustomMapGLAnnotaion: MGLPointAnnotation {

var annotationType: MapAnnotationEnum?
override init() {
super.init()
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

class CustomMapGLPolyline: MGLPolyline {

var width: CGFloat?
var color: UIColor?
override init() {
super.init()
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

我哪里错了?感谢您的帮助!

最佳答案

对于将来寻找答案的人!

由于 MGLAnnotationView 继承自 UIView 对象。我们可以简单地通过设置其 zIndex 属性来决定注释功能的顺序。


根据https://docs.mapbox.com/ios/maps/overview/markers-and-annotations/

关于ios - MapBox:在注释上绘制的 MGLineStyleLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54806259/

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