2011-11-07 5 views
5

Me gustaría compartir la información de mis escenarios de prueba realizados y pedirle que comparta su experiencia con el monitoreo de la región. Entonces, he registrado dos regiones opuestas (A y B) con 5 km de radio y 1 km de precisión deseada, con una distancia de 20 km entre ellas. Sin embargo, no he recibido ningún evento didEnterRegion/didExitRegion cuando viajo de la A a la B. En el prototipo de mi aplicación, también puse dos botones (para fines de prueba): uno inicia cambios significativos y otro monitoreo de ubicación estándar. Ambas impresiones didUpdateToLocation eventos en pantalla-log.¿Es posible usar solo la región de monitoreo + GSM y para obtener no más de 5 km horizontalmente?

De modo que, después de llegar al centro de la región B y estar muy molesto por la funcionalidad impredecible, he habilitado un control significativo. Después de eso, he recibido varios didUpdateToLocation con una precisión horizontal de ~ 8.5 km. Wow, eso duele, porque todo lo que quiero hacer es tener una funcionalidad donde se notifique a un usuario, que su lugar deseado esté en un radio de 5 km desde su ubicación actual, y quiero confiar en la ubicación triangular de la célula GSM método de detección solamente (para preservar la batería).

Así que, volviendo a mi caso. Después de obtener un error tan grande de 8 km, he habilitado la monitorización estándar con la mejor precisión (GPS). Y bingo, he recibido el evento didUpdateToLocation con una precisión horizontal de 399 m, y solo entonces he recibido didExitRegion de mi lugar inicial (región A) y otro evento con didEnterRegion (B). Otras actualizaciones de didUpdateToLocation son un poco más precisas: 50 m.

En escenarios anteriores, también estaba obteniendo una precisión inestable. A veces había 4 km de precisión horizontal, a veces menos. Pero la pregunta principal es, si queremos preservar la batería (Apple nos enseña eso en los documentos) ¿entonces podemos confiar solo en la supervisión de la región + GSM sin usar el GPS? Hay una muestra del código de Apple con "uso apropiado de monitoreo de región" (here), sin embargo hay algunas cosas inaceptables allí:

1) Indican que el código de muestra funciona solo para iPhone4, aunque Apple indica que ambas regiones y una monitorización significativa es compatible con iOS4.0 +. Cool, ¿ja?

2) El código de muestra utiliza los 3 métodos de ubicación: significativo, estándar, región. Utiliza la supervisión de la región todo el tiempo, pero además utiliza la ubicación estándar con la mejor precisión. Cuando la aplicación ingresa al fondo, detiene el estándar e inicia una importante monitorización de cambios. Al ingresar al primer plano, la aplicación deja de ser significativa e inicia la ubicación estándar. Parece que los documentos de Apple son bastante imprecisos, no está claro qué penalizaciones (precisión horizontal) obtenemos si solo utilizamos el monitoreo de la región o si siempre tenemos que usar los tres métodos.

3) Apple dice que necesitamos preservar la batería y para usar los servicios de ubicación mínimos que necesitamos, si no necesitamos GPS, entonces debemos usar GSM (por ejemplo, 1 - 3 km de precisión deseada) . Pero el código de muestra utiliza la mejor precisión deseada (GPS) tanto para el monitoreo de la región como para el monitoreo estándar (cuando la aplicación está en primer plano). Entiendo que el GPS resolvería todos mis problemas con errores y precisión, pero ¿qué pasa con el uso de GSM solamente? Después de obtener 8,5 km de precisión horizontal en mi escenario, no estoy seguro de que sea posible utilizar el monitoreo de la región en absoluto porque no es capaz de proporcionar un error aceptable de al menos 5 km.

Respuesta

1

En mi experiencia, la monitorización de la región es bastante precisa sin una pérdida significativa de la duración de la batería. Tengo un escenario de uso de regiones que tienen solo 30-50 metros de ancho. Sin problemas con exactitud. Una cosa que diré es que solo me he enfocado en dispositivos iPhone 4 en adelante. Tendré que implementar algunos de los cambios de los que hablas si quiero apoyar los modelos 3GS.

Cuando se basa exclusivamente en -startMonitoringForRegion, las actualizaciones se activan automáticamente en los eventos -didEnter y -didExit. Estos se activan a través de una combinación de eventos de localización de seguimiento.Cambios importantes, transferencias de torres de telefonía celular, conexión a Wi-Fi, otra ubicación de solicitudes de aplicaciones y algunas otras. El SO maneja cuando las devoluciones de llamada se desencadenan desde estos otros eventos de ubicación compartida. En mi experiencia, ha sido muy preciso. Pero esto es solo para iPhone 4 en adelante.

También utilicé la aplicación de ejemplo de Apple para configurar las cosas, pero no hay muchos detalles en la documentación sobre los detalles del cuándo/dónde obtendrá su activador. Puede leer lo que ofrece Apple en el Location Awareness Guide. Espero que esto ayude.

+1

Gracias por compartir la información. Mi experiencia con regiones e importantes es muy opuesta a la tuya. El monitoreo significativo y de la región depende principalmente de las torres de telefonía móvil y su ubicación física (si ninguna otra aplicación solicita GPS o no tiene wifi) y si no hay suficiente densidad de ellas, puede haber problemas. La ciudad en la que vivo tiene un tamaño de aproximadamente 300.000 personas, y no sé si es la causa del problema. Hoy, estaba probando varias regiones dentro de mi ciudad, con los mismos parámetros (5 km de radio, 3 de precisión deseada). Sin embargo, no recibí didEnterRegion a tiempo. – Centurion

+0

Estaba manejando con un automóvil a una distancia de aproximadamente 8 km, y al mismo tiempo, estaba usando una importante supervisión de cambios, registrando todos los eventos. Extraño, pero incluso después de recibir una nueva ubicación con ~ 1 km de precisión horizontal en didUpdateToLocation, y estando casi en el centro de la región deseada, no obtuve didEnterRegion para esa región. Sin embargo, después de las pruebas, revisé el registro y vi que la mayoría de los eventos en didUpdateToLocation tenían 3 - 3.5 km de precisión horizontal. Las coordenadas son buenas, porque las guardo todas en sqliteDB, y las uso tanto en didUpdateToLocation como para registrar las regiones. – Centurion

+1

En mi humilde opinión, si la ubicación de cambio significativo opera con una precisión de 3,5 km, las regiones no pueden ser más precisas, ya que ambas utilizan el mismo mecanismo y los resultados de ubicación del núcleo compartido. – Centurion

Cuestiones relacionadas