Получить географическое направление, используя магнитный курс - PullRequest
7 голосов
/ 22 июня 2011

Как рассчитать значение магнитного курса, чтобы получить географическое направление, т. Е. Север, северо-восток, восток, восток-юг, юг, юго-запад, запад, запад-север?значение степени и его требуется для меня, чтобы показать географическое направление, на основе непрерывного обновления магнитного курса.

Как я могу сделать это возможным?

Ответы [ 3 ]

10 голосов
/ 29 июня 2011

Ниже приведен код, который я использовал для отображения постоянно обновляемого географического направления.

        CGFloat currentHeading = newHeading.magneticHeading;
        NSString *strDirection = [[NSString alloc] init];

        if(gradToRotate >23 && gradToRotate <= 67){
              strDirection = @"NE";
        } else if(gradToRotate >68 && gradToRotate <= 112){
              strDirection = @"E";
        } else if(gradToRotate >113 && gradToRotate <= 167){
              strDirection = @"SE";
        } else if(gradToRotate >168 && gradToRotate <= 202){
              strDirection = @"S";
        } else if(gradToRotate >203 && gradToRotate <= 247){
              strDirection = @"SW";
        } else if(gradToRotate >248 && gradToRotate <= 293){
              strDirection = @"W";
        } else if(gradToRotate >294 && gradToRotate <= 337){
              strDirection = @"NW";
        } else if(gradToRotate >=338 || gradToRotate <= 22){
              strDirection = @"N";
        }

Он отлично работает на моем конце. Мастера могут сообщить мне, требуется ли какая-либо модификация.

3 голосов
/ 09 марта 2018
CLLocationDirection  heading = ((newHeading.trueHeading > 0) ?
                                   newHeading.trueHeading : newHeading.magneticHeading);

NSString *geoDirectionString = [[NSString alloc] init];

if(heading >22.5 && heading <= 67.5){
    geoDirectionString = @"North East";
} else if(heading >67.5 && heading <= 112.5){
    geoDirectionString = @"East";
} else if(heading >112.5 && heading <= 157.5){
    geoDirectionString = @"South East";
} else if(heading >157.5 && heading <= 202.5){
    geoDirectionString = @"South";
} else if(heading >202.5 && heading <= 247.5){
    geoDirectionString = @"South West";
} else if(heading >248 && heading <= 293){
    geoDirectionString = @"West";
} else if(heading >247.5 && heading <= 337.5){
    geoDirectionString = @"North West";
} else if(heading >=337.5 || heading <= 22.5){
    geoDirectionString = @"North";
}
2 голосов
/ 22 января 2016

Попробуйте этот пример, предложенный Мэттом Нойбургом на Github. https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch22p775heading/ch35p1035heading/ViewController.swift

func locationManager(manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
    var h = newHeading.magneticHeading
    let h2 = newHeading.trueHeading // will be -1 if we have no location info
    print("\(h) \(h2) ")
    if h2 >= 0 {
        h = h2
    }
    let cards = ["N", "NE", "E", "SE", "S", "SW", "W", "NW"]
    var dir = "N"
    for (ix, card) in cards.enumerate() {
        if h < 45.0/2.0 + 45.0*Double(ix) {
            dir = card
            break
        }
    }
    print(dir)
}

Это прекрасно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...