2

我有一个带有自定义图像(作为MKAnnotationView)的 MKMap 视图,它显示了当前的航向方向,如下所示(图像是带有方向箭头的蓝色圆圈和延伸的蓝色虚线)

带指示器的地图图像

MapKit 提供当前方位(以度为单位)以及地图相机的俯仰角(也以度为单位)。当地图旋转、俯仰角改变或航向方位改变时,该图像大部分旋转 3 维以继续围绕当前方位定位图像。目前用于此的代码是:

let rotationRadians = getHeadingIndicatorRotation(cameraHeading: mapView.camera.heading, courseHeading: navigation.lastLocation.course)
let pitchRadians = Conversions.toRadians(degrees: mapView.camera.pitch)
    
let t1 = CATransform3DMakeRotation(rotationRadians, 0, 0, 1)
let t2 = CATransform3DMakeRotation(pitchRadians, 1, 0, 0)
view.layer.transform = CATransform3DConcat(t1, t2)
            

这将正确旋转图像以显示在航向方向上的蓝色虚线;除非 mapView 相机间距!= 零。当非零时,蓝色虚线显示略微偏离(方向),具体取决于用户所在位置在地图中的位置。居中时,蓝色虚线正确显示,但当当前位置在中心左侧时,蓝色虚线偏向左侧太远,而当当前位置在中心右侧时,蓝色虚线偏向右侧太远。

这可以通过为沿航向方位的当前位置绘制一条 MKPolyLine 来显示(下方红色)。

位置向右

位置偏左

我确实想将航向方位绘制为 MKPolyLine,因为每次当前位置发生变化时都必须将其移除并重新绘制,这会使地图显着闪烁。当 MKMapCamera 的音高不为零时,是否有可以工作的图像变换?还是地球的曲率以及 iOS 地图相机如何绘制事物导致无法解决?

4

0 回答 0