Даже если вам не нравятся встроенные элементы скорости, вы можете просто свернуть свою собственную.
Скорость - это расстояние во времени, верно?
Если у вас есть два CLLocation
с, вы можете сделать:
CLLocationDistance distance = [aLocation distanceFromLocation:bLocation];
distance
теперь является плавающей точкой расстояния между этими двумя точками в метрах. И эти два CLLocations
тоже имеют timestamp
свойства, верно? Содержит объекты NSDate. Ну ...
NSTimeInterval timediff = [aDate timeIntervalSinceDate:bDate];
timediff
- разница в секундах.
Таким образом, ваша средняя скорость между этими точками в метрах в секунду составляет distance
больше timediff
. Теперь вы можете точно рассчитать мгновенную скорость и частоту, с которой вы получаете обновления местоположения.
Я полагаю, что это все, что происходит, чтобы получить свойство speed
объекта CLLocation, который вы получаете. Но, эй, хочешь быть ближе к математике, иди прямо.
Оттуда вы можете конвертировать в любые единицы, которые вам нравятся. В миле 1609,344 метра. В часе 3600 секунд.
СЕЙЧАС: Это такой же недостаток, как и при расчете скорости, основанном исключительно на GPS, в том смысле, что вы не будете получать идеально размеченные отметки обновлений местоположения, а иногда они будут ошибаться. Если вы потеряете сигнал GPS, и устройство вернется к триангуляции вышки сотовой связи, это может увести вас с дороги куда-нибудь, и это будет выглядеть так, будто вы пристегнуты к ракете, чтобы быстро добраться туда .