0

CLLocation の course メソッドを使用して、ユーザー (NSWO) が取った方向に関する情報を取得しようとしています。私はこのコードを使用しています:

double course;
bool isNord;

course = currentLocation.course;
NSLog(@"Current course: %f", course);
NSInteger courseString = course;
//_labelCompass.text = [NSString stringWithFormat:@"%d", courseString];

if (courseString == -1) {
    _labelCompass.text = @"N/A";
}
if (courseString >= 22 && courseString <= 67) {
    isNord = false;
    _labelCompass.text = @"NE";
}
if (courseString >=67 && courseString <= 112) {
    isNord = false;
    _labelCompass.text = @"E";
}
if (courseString >= 112 && courseString <= 157) {
    isNord = false;
    _labelCompass.text = @"SE";
}
if (courseString >= 157 && courseString <= 208) {
    isNord = false;
    _labelCompass.text = @"S";
}
if (courseString >= 208 && courseString <= 247) {
    isNord = false;
    _labelCompass.text = @"SW";
}
if (courseString >= 247 && courseString <= 292) {
    isNord = false;
    _labelCompass.text = @"W";
}

if (courseString >= 292 && courseString <= 337) {
    isNord = false;
    _labelCompass.text = @"NW";
}

if (isNord == true) {
    _labelCompass.text = @"N";
}

もちろんこれ入れてます

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

コース情報が正常に更新されました。このアルゴリズムを使用すると、他のコースのようにコースが北にあるときを知ることができないため、これを構築しました。これよりも優れた方法はありますか?どうもありがとう。

4

3 に答える 3

2

コースが北であると判断できないのはなぜですか? ただ行う:

if (course < 22 || course > 337) {
    _labelCompass.text = @"N";
}

ところで - 使用してくださいelse if。それははるかに効率的です:

if (courseString == -1) {
    _labelCompass.text = @"N/A";
} else if (courseString >= 22 && courseString <= 67) {
    _labelCompass.text = @"NE";
} else if (courseString >=67 && courseString <= 112) {
于 2013-10-01T17:43:11.947 に答える
0

CLLocationManager には、見出し更新デリゲートを含む見出しオプションがあります。

- (void)locationManager:(CLLocationManager *)manager 
didUpdateHeading:(CLHeading *)newHeading

newHeading にはプロパティ「magneticHeading」があります。

0 は北、90 は東、180 は南、270 は西

于 2013-10-01T18:03:39.890 に答える