Calcular el rumbo en MKMapView da un valor incorrecto al cruzar 180 meridianos

Necesito dibujar líneas para demostrar el transporte de mercancías en los mapas de Apple. Para aclarar los puntos de inicio y fin, dibujo una pequeña punta de flecha en el lado de destino. La punta de flecha se dibuja por separado pero se invierte en un caso.

>-->-->-->- 

en lugar d

<--<--<--<-

Estoy usando MKMapView y MKPolyline para dibujar líneas. Estoy usando MKOverlay para agregar flechas de dirección. Los pasos que sigo son,

calcular cojinete de

Fuente: CLLocationCoordinate2D (latitud: -33.8392932, longitud: 151.21519799999999) Destino: CLLocationCoordinate2D (latitud: 39.645516999999998, longitud: -104.598724)

utilizando la siguiente función

open static func getDirectionOf( _ supplyLineWithCoordinates: [CLLocationCoordinate2D]) -> CGFloat {
guard let sourceCoordniate = supplyLineWithCoordinates.first,
    let destinationCoordniate = supplyLineWithCoordinates.last  else {
        fatalError("Coordinates of supply line not found")
}
let sourcePoint: MKMapPoint = MKMapPointForCoordinate(sourceCoordniate)
let destinationPoint: MKMapPoint = MKMapPointForCoordinate(destinationCoordniate)
let x: Double = destinationPoint.x - sourcePoint.x
let y: Double = destinationPoint.y - sourcePoint.y
var arrowDirection = CGFloat(fmod(atan2(y, x), 360.0))
if arrowDirection < 0.0 {
    arrowDirection += 2 * .pi
}
return arrowDirection 

}

Gire la imagen de la flecha y agréguela como la superposición del mapa. Las direcciones se calculan correctamente en la mayoría de los casos, sin embargo, cuando selecciono la línea que se muestra debajo, la dirección se muestra 180 opuesta. Comienza desde Sydney, Australia y termina en Denver, EE. UU.

Al intentar mostrar la región con estas dos ubicaciones enmapView.setVisibleMapRect estas regiones no se muestran, mapview intenta mostrar la región desde Sydney (Australia) a Denver (EE. UU.) a través de Asia y Europa, mientras que debería mostrar el área del mapa que he adjuntado anteriormente. Si tiene sugerencias para la optimización, no dude en mencionarlo.

Creo que esta podría ser la razón, la dirección debe calcularse a lo largo de la línea roja, pero debe calcularse a lo largo de la línea verde. Ambas líneas se dibujan conectando las mismas coordenadas de ubicación en el mapa. ¿Alguna solución conocida para esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta