Мне нужно нарисовать линии, чтобы продемонстрировать перевозку грузов на яблочных картах.Чтобы уточнить начальную и конечную точки, я нарисую небольшую стрелку на стороне назначения. Стрелка нарисована отдельно, но в одном случае она перевернута.
>-->-->-->-
вместо
<--<--<--<-
Я использую MKMapView и MKPolyline для рисования линий.Я использую MKOverlay, чтобы добавить стрелки направления.Следующие шаги:
вычисление направления
Источник: CLLocationCoordinate2D (широта: -33.8392932, долгота: 151.21519799999999) Пункт назначения: CLLocationCoordinate2D (широта: 39.6455169999998)-104.598724)
с использованием следующей функции
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
}
Повернуть изображение стрелки и добавить его в качестве наложения карты.Направления рассчитываются правильно в большинстве случаев, однако, когда я выбираю линию, показанную ниже, направление отображается 180 напротив.Он начинается в Сиднее, Австралия, и заканчивается в Денвере, США.
При попытке отобразить регион с этими двумя местоположениями вmapView.setVisibleMapRect
этот регион не отображается, mapview пытается отобразить регион, начиная от Сиднея (Австралия) до Денвера (США) через Азию и Европу, в то время как он должен отображать область карты, которую я прикрепил выше.Если у вас есть предложения по оптимизации, не стесняйтесь упомянуть об этом.
Я думаю, что это может быть причиной, направление должно быть рассчитано вдоль красной линии, но оно рассчитывается вдоль зеленой линии.Обе линии нарисованы путем соединения одинаковых координат местоположения на карте.Любой известный обходной путь для этого?