Способ определения местоположения iOS для фильтрации недопустимых / неточных местоположений

Я использую Location Services в нескольких моих приложениях. У меня есть метод, который я использую в моем locationManager:didUpdateToLocation:fromLocation: метод для фильтрации плохих, неточных или слишком удаленных местоположений. И свести к минимуму gps «дрожание». Вот что я использую:

 /** * Check if we have a valid location * * @version $Revision: 0.1 */ + (BOOL)isValidLocation:(CLLocation *)newLocation withOldLocation:(CLLocation *)oldLocation { // Filter out nil locations if (!newLocation) return NO; // Filter out points by invalid accuracy if (newLocation.horizontalAccuracy < 0) return NO; if (newLocation.horizontalAccuracy > 66) return NO; // Filter out points by invalid accuracy #if !TARGET_IPHONE_SIMULATOR if (newLocation.verticalAccuracy < 0) return NO; #endif // Filter out points that are out of order NSTimeInterval secondsSinceLastPoint = [newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp]; if (secondsSinceLastPoint < 0) return NO; // Make sure the update is new not cached NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow]; if (locationAge > 5.0) return NO; // Check to see if old and new are the same if ((oldLocation.coordinate.latitude == newLocation.coordinate.latitude) && (oldLocation.coordinate.longitude == newLocation.coordinate.longitude)) return NO; return YES; }//end 

У кого-нибудь есть улучшения в этом методе, чтобы сделать его более точным? Является ли 66 слишком высокой horizontalAccuracy и получит много недопустимых мест? Должен ли я понизить это?

Есть ли способ прокатиться на «джиттере», который gps на iPhone дает?

3 Solutions collect form web for “Способ определения местоположения iOS для фильтрации недопустимых / неточных местоположений”

В дополнение к этим есть еще один я использую:

 if(self.lastKnownLocation) { CLLocationDistance dist = [newLocation distanceFromLocation:self.lastKnownLocation]; if(dist > newLocation.horizontalAccuracy) { //..... } } 

Где self.lastKnownLocation на самом деле является последним действительным местоположением, которое у меня есть, и это:

 @property(nonatomic, copy) CLLocation *lastKnownLocation; 
 -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { if (!newLocation) { NSLog(@"Filter out points by invalid accuracy"); return; } // Filter out points by invalid accuracy if (newLocation.horizontalAccuracy < 0) { return; } if(oldLocation.coordinate.latitude>90 && oldLocation.coordinate.latitude<-90 && oldLocation.coordinate.longitude>180 && oldLocation.coordinate.longitude<-180) { NSLog(@"old"); return; } if(newLocation.coordinate.latitude>90 || newLocation.coordinate.latitude<-90 || newLocation.coordinate.longitude>180 || newLocation.coordinate.longitude<-180) { NSLog(@"new"); return; } /////// NSDate *eventDate=newLocation.timestamp; NSTimeInterval eventinterval=[eventDate timeIntervalSinceNow]; if (abs(eventinterval)<30.0) { if (newLocation.horizontalAccuracy>=0 && newLocation.horizontalAccuracy<20) { **//finally you are getting right updated value here....** } } } 

Вы можете проверить это

https://medium.com/@mizutori/make-it-even-better-than-nike-how-to-filter-locations-tracking-highly-accurate-location-in-774be045f8d6

Основная идея заключается в фильтрации данных в методе didUpdateLocation:

Метод фильтра такой:

 func filterAndAddLocation(_ location: CLLocation) -> Bool{ let age = -location.timestamp.timeIntervalSinceNow if age > 10{ return false } if location.horizontalAccuracy < 0{ return false } if location.horizontalAccuracy > 100{ return false } locationDataArray.append(location) return true } 
  • Обнаружение включения Wi-Fi - iOS
  • Управление входом gps iOS
  • Местоположение GPS на iOS и Android
  • iOS api для данных трафика в реальном времени (например, geoloqi и Waze)
  • Расстояние между двумя местоположениями GPS, а также трассировка линии маршрута между ними
  • проблемы с синхронизацией базы данных icloud
  • Xamarin iOS Geolocator Фоновая служба Умирает примерно через 30 минут
  • Как сохранить приложение GPS в фоновом режиме без пауз
  • iOS отображает местоположение GPS, используя местоположение синего шара и знак стрелки на карте
  • Как я могу отслеживать местоположение на iPhone более эффективно, чем оставлять GPS все время?
  • Действие жизненного цикла приложения iOS 4 службы стандартного определения местоположения работает в фоновом режиме
  • Interesting Posts

    Откройте iOS-карты с булавкой, используя широту и долготу

    Показывать адрес в аннотации, когда пин-код отбрасывается на карту

    iOS – уравнение фильтра высоких частот для акселерометра

    Откройте приложение iOS из URL и параметров передачи

    Weird сбой в заголовке раздела UITableView при перегрузке выше

    IOS читает текст из MS Word

    Отображение пользовательских изображений iOS MKMapView в верхнем левом углу

    Родной компонент для «RCTFBLoginButton» не существует

    SDK Google Maps для iOS, работающего на iOS 4.3

    Является ли это правильным способом создания динамических / встроенных фреймворков с внедренными какао-стручками?

    Xcode 8 Как использовать классы генерации базового кода Gen в Objective-C?

    Как вызвать функцию делегата, не получив предупреждение «instance method not found» в ios?

    Обновление версии приложения iOS – удаляется ли содержимое Bundle?

    Изменение названия кнопки «Назад» при нажатии UIViewController на UITableViewController

    ios, swift: несколько таблиц, единый viewcontroller

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.