Advertisement
Guest User

GeoFence

a guest
Apr 7th, 2020
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.55 KB | None | 0 0
  1. #Imports de Django
  2. from django.core.cache import cache
  3. #Imports Extras
  4. from geographiclib.geodesic import Geodesic
  5. #Imports de la app
  6. from .models import GeoPosicion, Seguimiento
  7.  
  8. #Definimos nuestras funciones:
  9. def obtener_base(num_doc):
  10.     geopos_bases = cache.get("geopos_bases")
  11.     try:
  12.         return geopos_bases[num_doc]
  13.     except:
  14.         try:
  15.             gps = GeoPosicion.objects.get(
  16.                     domicilio__individuo__num_doc=num_doc,
  17.                     aclaracion="INICIO TRACKING")
  18.             if not geopos_bases:#Creamos la base inicial
  19.                 geopos_bases = {g.domicilio.individuo.num_doc: g for g in GeoPosicion.objects.filter(aclaracion="INICIO TRACKING")}
  20.             geopos_bases[num_doc] = gps
  21.             cache.set("geopos_bases", geopos_bases)
  22.             return geopos_bases[num_doc]
  23.         except GeoPosicion.DoesNotExist:
  24.             return None
  25.  
  26. def controlar_distancia(nueva_geopos):
  27.     #Obtenemos su posicion Permitida
  28.     gps_base = obtener_base(nueva_geopos.domicilio.individuo.num_doc)
  29.     #Calculamos diferencia
  30.     geodesic = Geodesic.WGS84.Inverse(gps_base.latitud, gps_base.longitud, nueva_geopos.latitud, nueva_geopos.longitud)
  31.     distancia = geodesic['s12']# en metros
  32.     if distancia > 50:#Si tiene mas de 50 metros
  33.         seguimiento = Seguimiento()
  34.         seguimiento.individuo = gps_base.domicilio.individuo
  35.         seguimiento.tipo = 'AT'
  36.         seguimiento.aclaracion = str(nueva_geopos.fecha)+'- Distancia: '+str(distancia)+'mts'
  37.         seguimiento.save()
  38.     return distancia
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement