使用CLLocationManager获取准确的位置

时间:2010-11-06 23:03:53

标签: iphone ios cllocationmanager

我开始乱用CLLocationManager,我正在尝试使用下面的回调方法。我去外面在我的iPhone上测试它,并且在最初的几次更新中,我似乎得到了胡言乱语的价值,就像突然我的距离是39米,即使我没有移动到任何地方。或者有时它会从5开始,然后跳到20米,再没有我移动到任何地方。我走到外面走了,从最初的起点开始的更新似乎“没问题”,然后当我走回去时,我回到原来的39米起点。我想知道我在下面做的是否正确。我还包括了我的viewDidLoad方法,我初始化了我的CLLocationManager对象。

有没有办法确保我的第一个值是准确的?提前谢谢。

- (void)viewDidLoad
{
    [super viewDidLoad];
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    if (startingPoint == nil) {
        NSLog(@"NIL starting point");
        self.startingPoint = newLocation;
    }

    CLLocationDistance distance = [newLocation distanceFromLocation:startingPoint];
    NSString *distanceString = [[NSString alloc] initWithFormat:@"%g m", distance];
    distanceLabel.text = distanceString;
    [distanceString release];

    numberOfUpdates++;
    NSString *countString = [[NSString alloc] initWithFormat:@"%d", numberOfUpdates];
    countLabel.text = countString;
    [countString release];
}

3 个答案:

答案 0 :(得分:5)

GPS是一项不完善的技术。大气条件,卫星可用性(和位置),天空能见度,从附近物体(建筑物)反弹的信号都会导致其固有的不准确性。虽然甚至有一个“准确性”值(通常非常好) - 即使这不是完全可靠的。

飞机不允许使用GPS进行精确进近 - 即使它们的接收器不够准确,也需要其他技术(有自己的问题)。

尝试运行标准的“地图”应用程序并将其用作比较。我认为你的代码很好 - 这是突然的GPS。

我当然是这样说的,因为我正在研究自己的海事导航应用程序,我自己也遇到了所有这些问题。

答案 1 :(得分:3)

虽然这是一个老问题,但我仍然想回答。第一次调用“didUpdateToLocation”通常是一些旧值,您应该始终检查时间戳。来自Apple文档:

NSDate* eventDate = newLocation.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if (abs(howRecent) < 15.0)
{
   // use the value
}

答案 2 :(得分:2)

didUpdate方法中,您可以测试newLocation的{​​{1}}属性是否具有可接受的值,并抛出任何不可能的值(甚至不可能!)。