获取CLLocation课程并转换为用户

时间:2013-10-01 17:40:04

标签: ios objective-c cllocation

我正在尝试通过CLLocation的课程方法获取有关用户(N-S-W-O)所采用方向的信息。 我正在使用此代码:

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

并且课程信息已成功更新。 使用这个算法,我不知道什么时候该课程是北方的,就像我为其他人做的那样,所以我已经建立了这个。 还有比这更好的其他方法吗? 非常感谢。

3 个答案:

答案 0 :(得分:2)

为什么你不能确定该课程是北方?只是做:

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

BTW - 请使用else if。它会更有效率:

if (courseString == -1) {
    _labelCompass.text = @"N/A";
} else if (courseString >= 22 && courseString <= 67) {
    _labelCompass.text = @"NE";
} else if (courseString >=67 && courseString <= 112) {

答案 1 :(得分:2)

错误的是,如果第一个if和第二个<= 67>= 67,如果值为67,则总是第一个if将被触发。 另外,正如rmaddy所述,请使用else if,它更有效率。 最后使用最佳语法min < myVal && myVal < max来模拟数学范围min < MyVal < max

答案 2 :(得分:0)

CLLocationManager有一个标题选项,标题更新为Delegate。

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

newHeading有一个属性'magneticHeading':

0是北方, 90是东, 180是南, 270是西部