iPhone Gps日志记录不准确

时间:2010-05-20 09:04:56

标签: iphone gps

我在散步时记录了GPS点数。下面显示了每5秒钟保存坐标的功能。 我做了几次测试,但我无法获得我想要的正确的准确度。 (当测试天空很明显时,谷歌地图中的测试也向我显示gps信号很好)。

这是代码:

-(void)viewDidAppear:(BOOL)animated{  

 if (self.locationManager == nil){

  self.locationManager = [[[CLLocationManager alloc] init] autorelease];
  locationManager.delegate = self;
  // only notify under 100 m accuracy
  locationManager.distanceFilter = 100.0f;
  locationManager.desiredAccuracy= kCLLocationAccuracyBest;
  [locationManager startUpdatingLocation];
 }
}

 - start logging

[NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(getData) userInfo:nil repeats:YES];
</code>

<code>
-(void)getData{

 int distance;

 // re-use location.
 if ([ [NSString stringWithFormat:@"%1.2f",previousLat] isEqualToString:@"0.00"]){
  // if previous location is not available, do nothing
  distance = 0;
 }else{
  CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:previousLat longitude:previousLong];
  CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:latGlobal longitude:longGlobal];

  distance = [loc1 getDistanceFrom: loc2];
 }

 // overwrite latGlobal with new variable 
 previousLat = latGlobal;
 previousLong = longGlobal;


 // store location and save data to database 
 // this part goes ok
}

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

 // track the time to get a new gps result (for gps indicator orb)
 lastPointTimestamp = [newLocation.timestamp copy];

 // test that the horizontal accuracy does not indicate an invalid measurement
     if (newLocation.horizontalAccuracy < 0) return;

 // test the age of the location measurement to determine if the measurement is cached
    // don't rely on cached measurements
     NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
     if (locationAge > 5.0) return;

 latGlobal = fabs(newLocation.coordinate.latitude);
 longGlobal= fabs(newLocation.coordinate.longitude); 
}

我拍摄了情节结果的截图(步行需要30分钟)以及我想要完成的示例: http://www.flickr.com/photos/21258341@N07/4623969014/

我真的希望有人能把我放在正确的方向。

1 个答案:

答案 0 :(得分:1)

查看你的情节 - 这正是我在我正在开发的应用程序中看到的内容。

查看你的代码。每当更新位置时,locationManager调用didUpdateToLocationFromLocation - 以5s为间隔进行轮询将在同一位置为您提供大量点数。 (但与问题无关)

此外,我认为您正在泄漏lastPointTimestamp(与问题无关)

正确 - 跳跃 - 您可以查看点的准确性:无论如何,您在locationManager中执行此操作但仅检查&lt; 0。是否存在跳跃点水平精度的模式?对于其他点或一个特定值(由切换到蜂窝塔三角测量引起),准确度数字可能会差得多。

最后,您可能需要实施过滤。卡尔曼滤波器是最重要的方式,但我正在考虑使用低通滤波器和一些基本的物理特性(最大加速度和行走速度,骑行,跑步,驾驶等)来改善效果。

很高兴合作。