Хорошо, это странный вопрос - и вопрос задавался ранее в различных формах и всегда закрывался мнением о том, что а) оно не будет точным и б) что со временем оно станет менее точным.
Я понимаю это - но я провожу эксперимент, чтобы увидеть, можно ли вообще повысить эту точность, принимая во внимание другие доказательные источники (например, если карта была составлена заранее, то направление движенияиз компаса в сочетании с маршрутом может предоставить другой источник доказательств).
Проблема в том, что мой код явно мусор - поэтому я приветствую ваше мнение.Я подозреваю, что это может быть ошибка коричневого бумажного пакета!
Мой ViewController.h выглядит так:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UIAccelerometerDelegate> {
UIAccelerometer *accelerometer;
long last_speed;
long distance_travelled;
long lastAccel;
long long lastTime;
IBOutlet UITextField* speedView;
IBOutlet UITextField* distanceView;
}
@end
И мой ViewController.m выглядит следующим образом:
#import "ViewController.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
lastAccel = 0;
last_speed = 0;
distance_travelled = 0;
lastTime = (long)(NSTimeInterval)([NSDate.date timeIntervalSince1970] * 1000.0);
accelerometer = UIAccelerometer.sharedAccelerometer;
accelerometer.updateInterval = 0.1;
accelerometer.delegate = self;
}
- (void)accelerometer:(UIAccelerometer *)meter
didAccelerate:(UIAcceleration *)acceleration
{
long long currentTime = (long)(NSTimeInterval)([NSDate.date timeIntervalSince1970] * 1000.0);
long long deltaTime = currentTime - lastTime;
lastTime = currentTime;
long accel_x = acceleration.x;
long accel_y = acceleration.y;
long accel_z = acceleration.z;
long integrated_acceleration = sqrtl(accel_x*accel_x + accel_y*accel_y + accel_z*accel_z);
long average_acceleration = (lastAccel + integrated_acceleration) / 2;
long speed = last_speed + (average_acceleration * deltaTime);
long average_speed = (speed + last_speed) / 2;
distance_travelled = distance_travelled + (average_speed * deltaTime);
last_speed = speed;
lastAccel = integrated_acceleration;
[speedView setText:[NSString stringWithFormat:@"%ld", speed]];
[distanceView setText:[NSString stringWithFormat:@"%ld", distance_travelled]];
}
@end
Когда выполняется код, скорость и расстояние постоянно увеличиваются, а замедление (замедление) никогда не учитывается - поэтому даже когда я останавливаюсь,скорость и расстояние продолжают расти.
Даже по меркам «это будет немного неточно», это заходит слишком далеко!
Все мысли и мнения с благодарностью приняты (ну почти - я знаю что это не будет точно!)