3

我开始搞乱 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];
}
4

3 回答 3

5

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

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

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

当然,我这么说是因为我正在开发自己的海上导航应用程序,我自己也遇到了所有这些问题。

于 2010-11-06T23:11:54.197 回答
3

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

NSDate* eventDate = newLocation.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if (abs(howRecent) < 15.0)
{
   // use the value
}
于 2011-06-15T05:44:47.047 回答
2

在您的didUpdate方法中,您可以测试newLocation' 的.horizontalAccuracy属性以获得可接受的值,并丢弃任何不可能(甚至不可能!)的值。

于 2010-11-07T00:25:08.643 回答