我在散步时记录了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/
我真的希望有人能把我放在正确的方向。
答案 0 :(得分:1)
查看你的情节 - 这正是我在我正在开发的应用程序中看到的内容。
查看你的代码。每当更新位置时,locationManager调用didUpdateToLocationFromLocation - 以5s为间隔进行轮询将在同一位置为您提供大量点数。 (但与问题无关)
此外,我认为您正在泄漏lastPointTimestamp(与问题无关)
正确 - 跳跃 - 您可以查看点的准确性:无论如何,您在locationManager中执行此操作但仅检查&lt; 0。是否存在跳跃点水平精度的模式?对于其他点或一个特定值(由切换到蜂窝塔三角测量引起),准确度数字可能会差得多。
最后,您可能需要实施过滤。卡尔曼滤波器是最重要的方式,但我正在考虑使用低通滤波器和一些基本的物理特性(最大加速度和行走速度,骑行,跑步,驾驶等)来改善效果。
很高兴合作。