requestwheninuseauthorization manager corelocation ios location core-location cllocation

ios - manager - Descifrando la const de CLLocationAccuracy



location manager swift 4 (3)

los siguientes se enumeran en CLLocation.h pero, según mi experiencia, son nombres engañosos, posiblemente concebidos originalmente para cumplir dos propósitos, 1. para probar la precisión de la ubicación devuelta, pero también 2. para establecer qué tan difícil funciona el administrador de ubicación, específicamente lo que está habilitado (gps (cuántos canales satelitales), cuán duro funciona el wifi, triangulación, etc.

extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation; // (raw value: -2) extern const CLLocationAccuracy kCLLocationAccuracyBest; // (raw value: -1) extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters; // (raw value: 10) extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters; // (raw value: 100) extern const CLLocationAccuracy kCLLocationAccuracyKilometer; // (raw value: 1000) extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers; // (raw value: 3000)

Me gustaría echarle un vistazo a CLLocation.m, pero como eso no es probable que suceda pronto, ¿alguien tiene alguna prueba de campo que muestre lo que piensan que está pasando con estos modos diferentes?

es decir, kCLLocationAccuracyBest = 10 satélites (¿canales / troncos?), 100% de potencia para wifi, etc.

Creo que este es el tipo de información que Apple debería haber proporcionado.

Lo que realmente quiero saber es qué está pasando realmente con kCLLocationAccuracyThreeKilometers en relación con el kCLLocationAccuracyThreeKilometers de batería: ¿está encendido el gps? 1 tronco sentado? ¿Wi-Fi habilitado? wifi en un temporizador? ¿quién sabe? Sé que me gustaría


El objetivo de utilizar Extern en lugar de exponer lo que realmente está sucediendo es que los under-gerwerkkins pueden cambiar y su código no tiene que preocuparse por ello para recoger las mejoras.

Dicho esto, CLLocationAccuracy es typedef-ed para duplicar, por lo que creo que es justo adivinar que kCLLocationAccuracyNearestTenMeters = 10.0, kCLLocationAccuracyHundredMeters = 100.0, etc. Lo mejor es 0, 1 o kCLLocationAccuracyNearestTenMeters, y BestForNavigation es probablemente uno que lanzaron para ayudar a la gente como TomTom, etc.

Si REALMENTE desea saber, puede imprimir los valores; solo son dobles.

No creo que la cantidad de satélites o la potencia de wifi se modifique en función de la precisión deseada. Por la forma en que entiendo los algoritmos, hay un cálculo de aproximación que indica que, cuantas más veces pasa el ciclo, más preciso se vuelve. Por lo tanto, menos precisos solo rescates antes.

Pero, una vez más, el punto más importante es: no importa. Apple específicamente no describe lo que sucede detrás de escena porque eso no es parte del diseño. El diseño es: si usas kCLLocationAccuracyKilometer, obtendrás una respuesta que está dentro de un kilómetro, etc. Y Apple ahora puede cambiar la forma en que llegan sin que te importe. Este tipo de aislamiento es un principio básico de la programación orientada a objetos.

EDITAR:

CORRECCIÓN: ahora estoy viendo la sesión WWDC en la ubicación (Sesión 115) y, aproximadamente a las 22:00, habla de cómo, al usar BestForNavigation, esto agrega cierta corrección de giroscopio (cuando esté disponible). Sin embargo, advierte que, si bien esto consume mucha potencia y CPU, y debería usarse solo cuando sea necesario, como con la navegación giro a giro.

No estoy seguro de cuánto más puedo hablar de esto públicamente, pero si eres un desarrollador registrado, puedes obtener las sesiones de iTunes-U.

(Esto es WWDC-2010, por cierto.)


En el distrito comercial de una gran ciudad, la triangulación wifi y de torre celular son muy buenas. Los suburbios residenciales no son tan buenos. En las zonas rurales apenas funcionan, si es que funcionan.

El GPS no funciona muy bien en interiores, y puede llevar mucho tiempo conseguir cualquier solución sin asistencia de la torre de telefonía (¡posiblemente 20 minutos!). Los satélites tardan tanto en emitir suficiente información para determinar su ubicación, y puede haber pérdida de paquetes (nubes, edificios, árboles, montañas, etc.). Vale la pena señalar que un GPS de gama alta adecuado tendrá una antena del tamaño de una pelota de baloncesto, ningún GPS de mano puede obtener una señal perfecta.

Incluso al aire libre con una señal perfecta, el GPS es impreciso cuando cambia de dirección rápidamente (como en la carretera o en un camino ventoso). La configuración BestForNavigation utiliza el acelerómetro y el giroscopio para compensar esto.

Actualmente, la plataforma iOS usa:

  • GPS: muy preciso, pero con gran consumo de energía, lento y no siempre disponible. algunos hardware no tiene un GPS.
  • WiFi: mucha potencia, y solo funciona en la ciudad. También puede ser completamente equivocado (por ejemplo, colocarte en la ciudad equivocada)
  • Torre celular: casi no consume energía, y funciona bien en la ciudad. No tan bueno en las zonas rurales. No existe en algunos hardware.
  • Acelerómetro: ligeras mejoras en otras correcciones de ubicación, pero enorme consumo de energía.
  • Giroscopio: ligeras mejoras en otras correcciones de ubicación, pero enorme consumo de energía. iPhone 4 solamente.

Usted le da una precisión en metros que necesita (las constantes son simplemente buenos nombres para los medidores), y usará una combinación de los anteriores, para obtener ese nivel de precisión con la corrección más rápida posible y el consumo de energía más bajo posible. La técnica que utiliza cambiará, de un usuario a otro, y cambiará según el lugar del mundo en el que se encuentre el usuario en ese momento.


Estoy de acuerdo con Olie en que ocultar los detalles del algoritmo está destinado a proteger al desarrollador de la aplicación de la preocupación sobre cómo se determina la ubicación. Dicho esto, creo que todavía es razonable hacer la pregunta: "¿Cuáles son las implicaciones de poder de mi selección de precisión?".

Tengo un poco de información que podría guiar su decisión sobre cuál usar, pero no conozco los verdaderos detalles de la implementación de Apple.

En primer lugar, suponga que a medida que la lectura se vuelve más precisa, el sistema necesitará usar radios más hambrientas de energía. Por ejemplo, se requerirá el GPS para las lecturas más detalladas, dentro de 100 metros, y usa la mayor potencia.

Aquí hay una conjetura educada sobre el mecanismo utilizado para determinar la precisión. La lista se ordena con (1) el mayor consumo de batería.

  1. GPS - kCLLocationAccuracyBestForNavigation;
  2. GPS - kCLLocationAccuracyBest;
  3. GPS - kCLLocationAccuracyNearestTenMeters;
  4. WiFi (o GPS en el área rural) - kCLLocationAccuracyHundredMeters;
  5. Torre celular - kCLLocationAccuracyKilometer;
  6. Torre celular - kCLLocationAccuracyThreeKilometers;

Al elegir, Apple recomienda que seleccione la precisión más granular que su aplicación puede pagar.

Espero que esto ayude un poco.