Пара мыслей:
Вы не рассматриваете horizontalAccuracy. Во-первых, если это отрицательное значение для любой из координат, вы просто не сможете провести какое-либо сравнение. И даже если они оба неотрицательны, вы, вероятно, захотите отказаться от горизонтальной точности, если действительно хотите определить, переместился ли пользователь на определенное расстояние.
Посмотрите не только на широту и долготу, но и на horizontalAccuracy.
Вы не учитываете, что когда вы включаете службы определения местоположения, часто приходит целая серия координат, и координаты могут колебаться по мере того, как точность по горизонтали становится все лучше и лучше. Вы хотите убедиться, что не считаете эту медленную триангуляцию движением, необходимым для того, чтобы квалифицироваться как вставание с постели.
Убедитесь, что вы проводите свои эксперименты на реальном устройстве в реальных сценариях. Использование симулятора определенно не является хорошим тестом. Также не используется устройство, подключенное к вашему компьютеру (потому что вы хотите видеть свой GPS в сценарии реального мира, где кто-то двигался перед сном).
Я бы предложил начать с простого приложения, которое регистрирует события местоположения в базе данных (или в другом формате) и, возможно, отображает журнал в виде таблицы, чтобы вам не всегда приходилось возвращаться к своему компьютеру, чтобы просмотреть результаты. Запустите это приложение, прогуляйтесь, а затем посмотрите на события местоположения, которые вы получаете. Это поможет вам понять закономерности, которые вы видите, когда люди используют свои настоящие устройства.
Обратите внимание, что если это приложение предназначено для магазина приложений, вы захотите задействовать множество разных людей в разных средах, на разных устройствах и в разных сценариях (плохое местоположение GPS, с Wi-Fi, без Wi-Fi и т. д.). Даже когда вы сами работаете с GPS в реальном мире с помощью физического устройства, вы должны понимать, что у всех остальных результаты GPS могут отличаться.
Я должен признаться в некоторых оговорках, достаточно ли точен iPhone GPS для такого рода приложений в качестве обобщенного решения, и вы, вероятно, захотите предупредить пользователя, чтобы он обязательно подключил свой iPhone, прежде чем он заснет, чтобы GPS не работал. не разряжать батарею. Вы также можете пошутить, например, включить службы определения местоположения после того, как пользователь продемонстрирует, что он в порядке. Вы также можете не включать службы определения местоположения за несколько минут до будильника, тем самым гарантируя, что GPS будет настолько точным, насколько это возможно, когда будильник сработает, но не разряжает их батарею, когда они спят, если они этого не делают. случается, что он подключен и заряжается.
Обновление:
Вероятно, проще, чем самостоятельно рассчитывать расстояния, использовать фильтр расстояний службы определения местоположения (т. е. генерировать события только при изменении местоположения на x метров). Например:
- (void)startLocationManager
{
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = 5.0; // detect when I move 5 meters
self.locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
}
Когда я делаю это, стоя совершенно неподвижно, как только я включаю службы определения местоположения, я получаю целую кучу событий еще до того, как начинаю двигаться. Вы можете видеть, как GPS разогревается и становится все более и более точным:
latitude longitude horizontalAccuracy
---------------- ------------------ ------------------
39.9482837548282 (82.4963494095571) 65
39.9482817585030 (82.4964543834170) 10
39.9482392622539 (82.4964914314290) 5
39.9481753502422 (82.4964918505242) 5
39.9481269028419 (82.4964797805836) 5
Я жду, пока он полностью опустится (в моем случае это заняло 15-20 секунд), а затем я начал идти по прямой, глядя на расстояние от последнего места, которое я получил выше.
latitude longitude horizontalAccuracy distance
---------------- ------------------ ------------------ --------
39.9481722908476 (82.4964962091138) 5 5.3
39.9482206544289 (82.4965029146363) 5 10.4
39.9482627315828 (82.4965282279839) 5 15.4
39.9483157471204 (82.4965248752227) 5 21.2
Должен признаться, что, хотя я его и не измерял, эти расстояния казались мне не совсем правильными, но, возможно, в пределах 5-метрового допуска, который я установил на своем distanceFilter.
В любом случае, как показывает все это, правильный процесс, вероятно, будет
включите службы определения местоположения, установив distanceFilter в соответствии с вашим приложением;
подождите, пока локация уляжется;
убедитесь, что HorizontalAccuracy даже правдоподобен для того, чтобы этот процесс вообще работал; а также
дождитесь уведомления о новом местоположении на основе определения GPS, что distanceFilter превышено.
Это никогда не будет идеальным (например, мне пришлось пройти добрых 6-10 метров, прежде чем мой 5-метровый distanceFilter сработал, вероятно, из-за задержки GPS на несколько секунд и horizontalAccuracy), но этого может быть достаточно для работы в правительстве.
(Кстати, я изменил свои координаты в приведенном выше журнале, так что не ищите меня на этом кукурузном поле в Огайо, но это дает вам представление о том, какую закономерность вы можете увидеть.)
person
Rob
schedule
25.02.2013