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); }
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); }
/*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; } }
/* * 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); }
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); }
public void notificarUsuario(string tipo, Usuario solicitante, Recorrido recorrido) { Notificacion noti = new Notificacion(tipo, solicitante, recorrido); notificaciones.Add(noti); }
public Boolean eliminarRecorrido(int index) { Recorrido removed = recorridos[index]; return(recorridos.Remove(removed)); }