MapKit: как преобразовать изображение указателя местоположения в правильный азимут, когда шаг карты != 0

У меня есть представление MKMap с пользовательским изображением (как MKAnnotationView), которое показывает текущее направление азимута курса, как показано ниже (изображение представляет собой синий круг со стрелкой направления и продолжающейся пунктирной синей линией) :

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 != zero . Когда значение не равно нулю, пунктирная синяя линия немного смещается (в направлении) в зависимости от того, где на карте находится пользователь. При центрировании пунктирная синяя линия отображается правильно, но когда текущее местоположение находится слева от центра, пунктирная синяя линия смещается слишком далеко влево, а когда текущее местоположение находится справа от центра, пунктирная синяя линия смещается слишком далеко вправо.

Это показано путем рисования MKPolyLine для текущего местоположения вдоль азимута курса (красный цвет ниже).

Я хочу нарисовать азимут курса как MKPolyLine, так как его нужно удалять и перерисовывать каждый раз, когда текущее местоположение изменяется, что приводит к значительному мерцанию карты. Есть ли преобразование изображения, которое будет работать, когда шаг MKMapCamera не равен нулю? Или кривизна земли вместе с тем, как картографическая камера iOS рисует вещи, делают это неразрешимым?

0 ответов

Другие вопросы по тегам