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 回答
2

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

于 2013-10-01T21:36:29.387 回答
0

CLLocationManager 有一个带有标题更新委托的标题选项。

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

newHeading 有一个属性“磁头”:

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

于 2013-10-01T18:03:39.890 回答