Alerta de proximidad para ubicaciones guardadas en el servidor

Hice algunas búsquedas, pero no pude encontrar una respuesta adecuada.

Mi aplicación debería compararse con varias ubicaciones de proximidad. Esto significa que no podré guardar todas las ubicaciones en mi aplicación para confirmar la proximidad usando locationManager. Quiero que se realice la confirmación de proximidad en el servidor

¿Cuál sería la mejor manera de implementar esto?

¿Sería razonable si la aplicación solicita una confirmación de proximidad cada vez que se mueven los dispositivos?

Intentaría un acercamiento diferente, puesto que las actualizaciones de la localización del GPS se hacen una vez por segundo, y no pienso que es una buena idea pedir al servidor cada segundo para la proximidad si usted tiene una gran cantidad de dispositivos.
Piense en esta idea –

  1. Obtenga la ubicación inicial del dispositivo y envíela al servidor.
  2. Decida en un radio sensible que el dispositivo permanecerá dentro de él durante los próximos 5-10 minutos. También asegúrese de que no tiene "demasiados" puntos en ese radio, o puede reducir el radio en ese caso. Depende de usted decidir el radio y el número de puntos, dependiendo de su uso, número de puntos, etc.
  3. Envíe al servidor todas las ubicaciones dentro de ese radio al dispositivo.
  4. Deje que el dispositivo calcule la proximidad por sí mismo.
  5. Cuando el dispositivo se mueve fuera del radio inicial – actualice el servidor y obtenga las nuevas ubicaciones relevantes. Esto se puede hacer fácilmente – llamar al radio r . Guarde la ubicación inicial del dispositivo y calcule la distancia entre la ubicación actual e initail. Cuando está "lo suficientemente cerca" para r – actualizar el servidor.

En su caso, simplemente, puede enviar las ubicaciones recibidas a su servidor y luego hacer los cálculos necesarios en el servidor. Pero no olvide que usted se ocupará de esas preguntas

  • ¿Cuántos dispositivos envían la ubicación al servidor ?
  • ¿Con qué frecuencia cada dispositivo envía la ubicación al servidor ?

También la responsabilidad de detectar un dispositivo ha entrado en un área del servidor

Creo que se puede reducir la complejidad de todas las cosas mediante geofencing api , link

  • No es necesario enviar cada ubicación al servidor.
  • Cada dispositivo detecta individualmente si ha entrado o salido de un área.

EDITAR

De lo contrario, estará realizando cálculos entrados / salidos en el servidor para contar ilimitadamente el dispositivo, siempre que la ubicación de cada dispositivo haya cambiado.

Antes de que estuviéramos haciendo algo similar en mi empresa anterior, calculando el tiempo de entrada / salida e ingresar duraciones. Pero a través de dispositivos reales gps en los autobuses

  • Tenemos casi 100 puntos (geofence) en la ciudad. Así que usted puede pensar que esos puntos están en algunas rutas

  • Cada dispositivo gps en el bus está enviando la ubicación al servidor periódicamente.

  • Cuando el bus ha terminado su ruta , el servidor revisa todos los dispositivos recibidos en la ruta .

  • Compara cada geofence con cada ubicación del bus.

Este es el escenario real. Puede llamarlo "geofencing basado en servidor".

Usted podría hacer una implementación de árbol kd simple en el lado del servidor para almacenar las coordenadas.

Enviar las coordenadas del dispositivo más, que se puede determinar en el intervalo que usted necesita. Si es cada 5 segundos, o 10 segundos realmente no importa. Esto se decidirá principalmente por la distancia mínima entre cada una de las coordenadas / radio. Si están más cerca, es posible que tenga que actualizar con más frecuencia.

Usando el árbol kd encontrar el vecino más cercano sería O (log (n)). Sin embargo, realiza una modificación leve en la que puede comenzar a agregar los nodos a una lista siempre y cuando estén dentro del radio determinado de las coordenadas de su dispositivo. De hecho, si se almacena localmente como un árbol kd también, entonces puede elegir los nodos más alejados en O (log (n))

Ahora en la segunda actualización cuando se envía de nuevo la ubicación del dispositivo, puede actualizarla rápidamente ya que tiene las ubicaciones existentes. Digamos que se mueve en la dirección x en 5. Puede eliminar los puntos que están ahora fuera del radio en x – 5. La nueva proximidad, se hace la misma búsqueda de vecino más cercano, la adición de nodos como están dentro del radio, Pero esta vez empezando con los nodos en caché más cercanos a la dirección en la que se está moviendo.

Combinando eso con un árbol de intervalo para los radios. Así que diga 0 a 1, 1 a 2, 2 a 3, como sus intervalos. Usted puede escoger todo dentro de un cierto radio en O (log (n)) tiempo también. Esos deben ser punteros a nodos en el árbol kd. Eso simplificaría los cálculos del radio y encontraría la localización si usted está dispuesto a sacrificar un poco de memoria para la eficacia.

Para una manera "rápida" de implementarla en el lado del servidor, puede usar la consulta geodensiva próxima a mondodb $.

https://docs.mongodb.org/manual/reference/operator/query/near/

Mientras que en el lado móvil puede utilizar la propiedad minDistance para las actualizaciones de ubicación. Puede configurarlo a una distancia razonable de 20m / 50m dependiendo de la distancia media entre sus ubicaciones.

http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(java.lang.String,%20long,%20float,%20android.location.LocationListener)

Hay un servicio gratuito para este propósito -> Radar

Puede registrar un círculo ilimitado o una geofencia de polígono y registrar a su usuario en la aplicación para realizar un seguimiento de ese usuario. Cuando el usuario ingresa en una geofence, Radar envía una notificación a su servidor y le envía los datos siguientes:
ID de usuario, ID de Geofence que el usuario ingresó o salió, Confianza (baja, media, alta) utilizada para geofence que se ha superpuesto.
Puede utilizar este SDK en sólo 10 minutos.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.