예제 #1
0
        public static double distMinimaARuta(Recorrido recorrido, Tuple <double, double> point1)
        {
            double distance = Double.MaxValue;

            double aux = 0;

            if (recorrido.Ruta.Puntos != null)
            {
                foreach (var p in recorrido.Ruta.Puntos)
                {
                    double Lat = (p.Item1 - point1.Item1) * (Math.PI / 180);
                    double Lon = (p.Item2 - point1.Item2) * (Math.PI / 180);
                    double a   = Math.Sin(Lat / 2) * Math.Sin(Lat / 2) + Math.Cos(point1.Item1 * (Math.PI / 180)) * Math.Cos(p.Item1 * (Math.PI / 180)) * Math.Sin(Lon / 2) * Math.Sin(Lon / 2);
                    double c   = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
                    aux = RadioDeLaTierra * c;
                    if (aux < distance)
                    {
                        distance = aux;
                    }
                }
            }


            return(distance);
        }
예제 #2
0
        public double distMinimaARuta(Recorrido recorrido, Tuple <double, double> punto)
        {
            double dist                = double.MaxValue;
            double v1                  = 0.0;
            double v2                  = 0.0;
            double distAux             = 0.0;
            Tuple <double, double> ini = recorrido.Ruta.Inicio;
            Tuple <double, double> fin;

            foreach (var p in recorrido.Ruta.Puntos)
            {
                fin     = p;
                v1      = fin.Item1 - ini.Item1;
                v2      = fin.Item2 - ini.Item2;
                distAux = (Math.Abs((v2 * punto.Item1) + (v1 * punto.Item2) + ((ini.Item1 * v2) + (ini.Item2 * v1)))) / (Math.Sqrt((v2 * v2) + (v1 * v1)));
                dist    = Math.Min(dist, distAux);

                ini = p;
            }
            fin     = recorrido.Ruta.Fin;
            v1      = fin.Item1 - ini.Item1;
            v2      = fin.Item2 - ini.Item2;
            distAux = (Math.Abs((v2 * punto.Item1) + (v1 * punto.Item2) + ((ini.Item1 * v2) + (ini.Item2 * v1)))) / (Math.Sqrt((v2 * v2) + (v1 * v1)));
            dist    = Math.Min(dist, distAux);

            return(dist);
        }
예제 #3
0
 /*Constructor
  * tipo: tipo de notificación que se va a enviar
  * solicitante: usuario que envia la notificación
  * recorrido: recorrido sobre el cual se esta gestionando la solicitud
  */
 public Notificacion(string tipo, Usuario solicitante, Recorrido recorrido)
 {
     this.tipo        = tipo;
     this.solicitante = solicitante;
     this.recorrido   = recorrido;
     this.aceptado    = false;
     if (tipo.Equals(TIPO_ACEPTAR_SOLICITUD))
     {
         aceptado = true;
     }
 }
예제 #4
0
        /*
         * Metodo que recomienda los usuarios que están a menos de 2.3 km de el trayecto del recorrido
         * //(13-11-2017)Se le agrega condicional para que en la lista de usuarios recomendados no se recomiende a sí mismo
         */
        public Boolean recomendarUsuarios(Recorrido recorrido)
        {
            List <Usuario> auxList = new List <Usuario>();

            estado_usuariosRecomendados = null;
            foreach (Usuario u in usuarios)
            {
                if (u.Ubicacion != null && u.Celular != estado_usuarioLogged.Celular)
                {
                    auxList.Add(u);
                }
            }
            estado_usuariosRecomendados = auxList.Select(x => new { dist = distMinimaARuta(recorrido, x.Ubicacion), usu = x }).Select(x => { Debug.WriteLine(x.dist); return(x); }).Where(x => x.dist <= 2.3).Select(x => x.usu).ToList();
            estado_recorrido            = recorrido;
            foreach (Usuario u in estado_usuariosRecomendados)
            {
                Debug.WriteLine("eL NOMBRE ES " + u.Nombre);
            }
            return(true);
        }
예제 #5
0
 public Boolean recomendarPasajeros(Recorrido recorrido)
 {
     estado_usuariosRecomendados = usuarios.Where(x => x.Celular.Equals(estado_usuarioLogged.Celular)).Select(x => new { dist = distMinimaARuta(recorrido, x.Ubicacion), usuario = x }).OrderBy(x => x.dist).Select(x => x.usuario).Take(9).ToList();
     return(true);
 }
예제 #6
0
        public void notificarUsuario(string tipo, Usuario solicitante, Recorrido recorrido)
        {
            Notificacion noti = new Notificacion(tipo, solicitante, recorrido);

            notificaciones.Add(noti);
        }
예제 #7
0
        public Boolean eliminarRecorrido(int index)
        {
            Recorrido removed = recorridos[index];

            return(recorridos.Remove(removed));
        }