2009-02-24 10 views
6

Estoy experimentando con la adición de la funcionalidad de GPS a mi aplicación de iPhone. Es una aplicación de entrenamiento que se usará al caminar o correr. Entonces, para lo que quiero usar el GPS es para mostrar la velocidad con la que la persona se mueve en Mph y minuto/milla.iPhone CoreLocation: Cómo obtener la velocidad más precisa

¿Cómo debo configurar el CLLocationManager para obtener los mejores resultados posibles? ¿Qué debo configurar la precisión y el filtro de distancia?

He probado con:

distanceFilter = 10 y = desiredAccuracy kCLLocationAccuracyNearestTenMeters

y la lectura

propiedad CLLocation.speed

pruebas durante conduciendo en mi coche parece buena la exactitud comparado con el velocímetro del auto, aunque lleva un tiempo actualizarlo. Me doy cuenta de que la demora en la actualización puede ser el tiempo que se tarda en consultar la ubicación del GPS, pero no estoy seguro si cambiar los dos parámetros anteriores dará mejores resultados.

¿Debo usar kCLLocationAccuracyBest y algún otro valor para distanceFilter?

Me interesa saber de otros que usan CoreLocation para obtener velocidad. ¿Qué estás haciendo para obtener resultados más precisos?

Respuesta

3

Descargo de responsabilidad: Solo he jugado un poco con CoreLocation, no he probado la precisión muy de cerca.

Espero que obtenga los resultados más precisos utilizando los valores predeterminados para distanceFilter y la precisión deseada. Las actualizaciones menos frecuentes solo le darán menos datos para trabajar.

Un problema con el que probablemente se encuentre es cuando la corrección de ubicación se pierde por un tiempo, luego regresa. El enfoque ingenuo de conectar los puntos para calcular la distancia recorrida va a tender a subestimar la velocidad real del corredor. En lugar de utilizar CLLocation.speed, puede obtener mejores resultados calculando la velocidad en función de una aproximación heurística a la línea que el corredor realmente está siguiendo.

5

Para obtener los mejores resultados, debe usar kCLLocationAccuracyBest. Lo que colocas en tu filtro de distancia depende de hasta qué fallas estás dispuesto a poner. Básicamente, tendrá que tomar decisiones basadas en la precisión frente a la disponibilidad. Es decir, durante los períodos en los que no se dispone de una respuesta con la mejor precisión, ¿qué mostrará?

Un enfoque es permitir que el teléfono entregue respuestas menos precisas y, utilizando una proyección de lo que estaba sucediendo la última vez que tuvo información de la mejor precisión, vea si lo que tiene tiene sentido.

Es decir, supongo que estoy corriendo a 6 mph hacia el norte. Me trazas a lo largo del punto-A, punto-B, punto-C ... luego obtienes una respuesta de baja precisión (tal vez kCLLocationAccuracyNearest100Meters). Mira el lugar donde dice que soy y averigua "¿Podría haber llegado a eso? un punto desde el punto C si hubiera continuado a lo largo de mi camino actual, haciendo ajustes razonables para posibles cambios de velocidad? " Si es así, entonces el nuevo punto está dentro del reino de la posibilidad. (Si no, luego tírenlo.) Luego, proyecten desde el punto C a mi velocidad más reciente y descubran dónde creen que probablemente estoy, balísticamente. Guarde eso como punto balístico-D.

Por supuesto, estás usando el acelerómetro para obtener una especie de sentido de inercia hacia dónde voy, ¿no?Por lo tanto, no puedes saber la dirección (no sabes a qué dirección apunta el teléfono), pero puedes hacer una apuñalada razonable a distancia.

Utilizando toda esta información, traza el lugar más probable donde crees que probablemente estoy.

NOTA: Cuando realice las pruebas, no se limite a conducir en áreas con buena cobertura de células. Vea cómo funciona su aplicación en las colinas, lejos de los teléfonos celulares. A mucha gente le gusta andar en bicicleta & ¡trotando por esas áreas!

Cuestiones relacionadas