Промежуточные координаты между 2 точками - PullRequest
0 голосов
/ 06 мая 2020

Здравствуйте, я использую приведенную ниже функцию, чтобы получить координаты 21 промежуточной точки между двумя местами на карте. Проблема в том, что возвращаемые координаты представляют собой прямую линию между точками, а не большой круг для достижения кратчайшего расстояния.

Кто-нибудь знает, что мне нужно изменить, чтобы получить координаты кратчайшего расстояния?

func greatCircle(lat1: Double, long1: Double, lat2: Double, long2: Double) -> Array<CLLocationCoordinate2D>
{
    let startPoint = CLLocationCoordinate2D(latitude: lat1, longitude: long1)
    let endPoint = CLLocationCoordinate2D(latitude: lat2, longitude: long2)

    let yourTotalCoordinates = Double(21)
    let latitudeDiff = startPoint.latitude - endPoint.latitude
    let longitudeDiff = startPoint.longitude - endPoint.longitude
    let latMultiplier = latitudeDiff / (yourTotalCoordinates + 1)
    let longMultiplier = longitudeDiff / (yourTotalCoordinates + 1)

    var array = [CLLocationCoordinate2D]()
    array.append(startPoint)
    for index in 1...Int(yourTotalCoordinates) {

        let lat  = startPoint.latitude - (latMultiplier * Double(index))
        let long = startPoint.longitude - (longMultiplier * Double(index))
        let point = CLLocationCoordinate2D(latitude: lat, longitude: long)
        array.append(point)
    }
    array.append(endPoint)
    return array
}
...