Exemple #1
0
        public static List <Ruta> CrearRutasEnRango(ProyectoAutoContext _db, HistorialDiario _histDia, DateTime _desde, DateTime _hasta)
        {
            List <Ruta> rutas = new List <Ruta>();
            List <HistorialPosicion> listaActual = new List <HistorialPosicion>();

            for (int i = 0; i < _histDia.historialesPosicion.Count; i++)
            {
                HistorialPosicion puntoActual = _histDia.historialesPosicion[i];
                if (puntoActual.Inicio == true)
                {
                    if (listaActual.Count > 0)
                    {
                        Ruta nruta = new Ruta(_db, listaActual, _histDia);
                        if (nruta.Puntos.Count > 0)
                        {
                            rutas.Add(nruta);
                        }
                    }

                    listaActual = new List <HistorialPosicion>();
                }

                if (puntoActual.FechaHora >= _desde && puntoActual.FechaHora <= _hasta)
                {
                    listaActual.Add(puntoActual);
                }
            }

            rutas.Add(new Ruta(_db, listaActual, _histDia));

            return(rutas);
        }
Exemple #2
0
        public static HistorialWeb PrepararHistorialEnergia(ProyectoAutoContext _db, HistorialWeb _HW, DateTime _fecha, int _idAuto)
        {
            Auto auto = _db.Autos.Where(a => a.Id == _idAuto).FirstOrDefault();

            if (auto == null)
            {
                return(new HistorialWeb());
            }

            HistorialDiario historialHoy = auto.HistorialesDiarios
                                           .Where(h => h.Fecha.Year == _fecha.Year &&
                                                  h.Fecha.Month == _fecha.Month &&
                                                  h.Fecha.Day == _fecha.Day).FirstOrDefault();

            if (historialHoy == null)
            {
                _HW.historialesEnergia = new List <PuntoGrafico>();
                return(_HW);
            }

            List <HistorialEnergia> histEnergia = historialHoy.historialesEnergia.OrderBy(h => h.HoraRegistro).ToList();

            #region HistorialesComparables
            List <HistorialWeb.TiposHistorial> historialesComparables = new List <HistorialWeb.TiposHistorial>();
            historialesComparables.Add(HistorialWeb.TiposHistorial.Velocidad);
            _HW.historialesComparables = historialesComparables;

            List <HistorialVelocidad> histVelocidad = historialHoy.historialesVelocidad.OrderBy(h => h.HoraRegistro).ToList();
            #endregion

            List <PuntoGrafico> puntosEnergia   = EnergiaAPuntosGrafico(histEnergia);
            List <PuntoGrafico> puntosVelocidad = VelocidadAPuntosGrafico(histVelocidad);

            if (histVelocidad.Count == 0)
            {
                puntosVelocidad = CrearHistorialVelocidadEjemplo();
                puntosEnergia   = CrearHistorialEnergiaEjemplo();
            }

            _HW.historialesEnergia   = puntosEnergia;
            _HW.historialesVelocidad = puntosVelocidad;

            return(_HW);
        }
Exemple #3
0
        public static List <HistorialWeb> ObtenerHistorialesFlota(ProyectoAutoContext _db, DateTime _fecha, int _idFlota)
        {
            Flota flota = _db.Flotas.Where(f => f.Id == _idFlota).FirstOrDefault();

            List <HistorialWeb> historialesFlota = new List <HistorialWeb>();

            //List<HistorialVelocidad> histVel;
            //List<HistorialEnergia> histEner;
            //List<HistorialPosicion> histPos;

            //foreach(Auto a in flota.Autos)
            //{
            //    histVel = a.HistorialVelocidad.Where(h => h.FechaHora.Year == _fecha.Year
            //                && h.FechaHora.Month == _fecha.Month
            //                && h.FechaHora.Day == _fecha.Day).OrderBy(h => h.FechaHora).ToList();

            //    histEner = a.HistorialesEnergia.Where(h => h.FechaHora.Year == _fecha.Year
            //                && h.FechaHora.Month == _fecha.Month
            //                && h.FechaHora.Day == _fecha.Day).OrderBy(h => h.FechaHora).ToList();

            //    histPos = a.HistorialesPosicion.Where(h => h.FechaHora.Year == _fecha.Year
            //                && h.FechaHora.Month == _fecha.Month
            //                && h.FechaHora.Day == _fecha.Day).OrderBy(h => h.FechaHora).ToList();

            //    HistorialWeb hw = new HistorialWeb();
            //    hw.PatenteAuto = a.Patente;
            //    hw.FechaMostrar = _fecha;

            //    hw.historialesVelocidad = histVel;
            //    hw.historialesEnergia = histEner;
            //    hw.historialesPosicion = histPos;

            //    historialesFlota.Add(hw);
            //}


            return(historialesFlota);
        }
Exemple #4
0
        public Ruta(ProyectoAutoContext _db, List <HistorialPosicion> _puntos, HistorialDiario _histDia)
        {
            if (_puntos.Count == 0)
            {
                return;
            }

            List <HistorialPosicion> puntos = _puntos.OrderBy(p => p.FechaHora).ToList();

            #region Filtro SPIKES

            //la suma de los dos siguientes segmentos
            //noo deberia ser mayor a la distancia del primer a tercer punto x 3

            //En este filtro el primer punto es aceptado por default
            //A partir del "indexOrigen", se evalua si se agrega al filtro el "indexOrigen" + 1

            float multiploLimite            = 1.5f;
            List <HistorialPosicion> filtro = new List <HistorialPosicion>();
            filtro.Add(puntos[0]);

            //int indexOrigen = 0;
            for (int i = 0; i < puntos.Count; i++)
            {
                if (i < puntos.Count - 2)
                {
                    var origen  = new GeoCoordinate(puntos[i].Latitud, puntos[i].Longitud);
                    var evaluar = new GeoCoordinate(puntos[i + 1].Latitud, puntos[i + 1].Longitud);
                    var final   = new GeoCoordinate(puntos[i + 2].Latitud, puntos[i + 2].Longitud);

                    if (puntos[i + 1].GPSOffBool == true)
                    {
                        continue;
                    }

                    double de1a2 = origen.GetDistanceTo(evaluar);
                    double de2a3 = evaluar.GetDistanceTo(final);
                    double de1a3 = origen.GetDistanceTo(final);

                    double suma = de1a2 + de2a3;

                    if (suma <= de1a3 * multiploLimite)
                    {
                        filtro.Add(puntos[i + 1]);
                    }
                }
                else if (i == puntos.Count - 2)
                {
                    filtro.Add(puntos[i + 1]);
                }
            }
            filtro = filtro.OrderBy(h => h.FechaHora).ToList();

            #endregion
            puntos = filtro;

            #region Filtro distancia

            float distanciaLimite = 150; //metros
            float distanciaMinima = 6;
            List <HistorialPosicion> filtroDistancia = new List <HistorialPosicion>();
            //int indexOrigen = 0;
            for (int i = 0; i < puntos.Count - 1; i++)
            {
                if (puntos[i].GPSOffBool == true)
                {
                    continue;
                }

                var origen = new GeoCoordinate(puntos[i].Latitud, puntos[i].Longitud);
                var final  = new GeoCoordinate(puntos[i + 1].Latitud, puntos[i + 1].Longitud);

                double distancia = origen.GetDistanceTo(final);

                if (distancia <= distanciaLimite && distancia >= distanciaMinima)
                {
                    filtroDistancia.Add(puntos[i]);
                }
            }
            filtroDistancia = filtroDistancia.OrderBy(h => h.FechaHora).ToList();

            #endregion
            puntos = filtroDistancia;


            if (puntos.Count == 0)
            {
                Puntos = new List <HistorialPosicion>();
                return;
            }


            Puntos = puntos;
            double metrosRecorridos = 0;
            for (int i = 0; i < puntos.Count - 1; i++)
            {
                var sCoord = new GeoCoordinate(puntos[i].Latitud, puntos[i].Longitud);
                var eCoord = new GeoCoordinate(puntos[i + 1].Latitud, puntos[i + 1].Longitud);

                metrosRecorridos += sCoord.GetDistanceTo(eCoord);
            }
            double km = metrosRecorridos / 1000f;
            KilometrosRecorridos = Math.Round(km, 2, MidpointRounding.AwayFromZero);

            DateTime desde = puntos.First().FechaHora;
            DateTime hasta = puntos.Last().FechaHora;

            List <float> filtroVelocidades = new List <float>();
            float        sumaVelocidades   = 0;
            foreach (HistorialVelocidad hv in _histDia.historialesVelocidad)
            {
                if (hv.HoraRegistro >= desde && hv.HoraRegistro <= hasta)
                {
                    filtroVelocidades.Add(hv.ValorInicio);
                    sumaVelocidades += hv.ValorInicio;

                    filtroVelocidades.Add(hv.ValorUnCuarto);
                    sumaVelocidades += hv.ValorUnCuarto;

                    filtroVelocidades.Add(hv.ValorMitad);
                    sumaVelocidades += hv.ValorMitad;

                    filtroVelocidades.Add(hv.ValorTresCuartos);
                    sumaVelocidades += hv.ValorTresCuartos;

                    filtroVelocidades.Add(hv.ValorFinal);
                    sumaVelocidades += hv.ValorFinal;

                    filtroVelocidades.Add(hv.ValorMayor);
                    sumaVelocidades += hv.ValorMayor;

                    filtroVelocidades.Add(hv.ValorMenor);
                    sumaVelocidades += hv.ValorMenor;
                }
            }

            if (filtroVelocidades.Count > 0)
            {
                VelocidadPromedio = sumaVelocidades / filtroVelocidades.Count;
            }

            HistorialPosicion inicioHP = puntos.First();
            HistorialPosicion finalHP  = puntos.Last();

            if (inicioHP.NombreCalle == null)
            {
                inicioHP.NombreCalle = "";
            }
            if (inicioHP.NombreLocalidad == null)
            {
                inicioHP.NombreLocalidad = "";
            }
            if (finalHP.NombreCalle == null)
            {
                finalHP.NombreLocalidad = "";
            }
            if (finalHP.NombreLocalidad == null)
            {
                finalHP.NombreLocalidad = "";
            }

            if (inicioHP.NombreCalle == "" || inicioHP.NombreLocalidad == "")
            {
                List <Placemark> datosInicio = Posicion.ObtenerDatosPosición(puntos.First().Latitud, puntos.First().Longitud);
                if (datosInicio != null)
                {
                    if (inicioHP.NombreCalle == "")
                    {
                        inicioHP.NombreCalle = datosInicio[0].ThoroughfareName;
                    }

                    if (inicioHP.NombreLocalidad == "")
                    {
                        inicioHP.NombreLocalidad = datosInicio[0].LocalityName;
                    }
                }
            }

            if (finalHP.NombreCalle == "" || finalHP.NombreLocalidad == "")
            {
                List <Placemark> datosFinal = Posicion.ObtenerDatosPosición(puntos.Last().Latitud, puntos.Last().Longitud);

                if (datosFinal != null)
                {
                    if (finalHP.NombreCalle == "")
                    {
                        finalHP.NombreCalle = datosFinal[0].ThoroughfareName;
                    }
                    if (finalHP.NombreLocalidad == "")
                    {
                        finalHP.NombreLocalidad = datosFinal[0].LocalityName;
                    }
                }
            }
            _db.SaveChanges();

            NombreCalleInicio  = inicioHP.NombreCalle;
            NombreCiudadInicio = inicioHP.NombreLocalidad;

            NombreCalleFinal  = finalHP.NombreCalle;
            NombreCiudadFinal = finalHP.NombreLocalidad;

            //NombreCalleInicio = "";
            //NombreCiudadInicio = "";
            //NombreCalleFinal = "";
            //NombreCiudadFinal = "";

            //List<Placemark> datosInicio = Posicion.ObtenerDatosPosición(puntos.First().Latitud, puntos.First().Longitud);
            //if (datosInicio != null)
            //{
            //    NombreCalleInicio = datosInicio[0].ThoroughfareName;
            //    NombreCiudadInicio = datosInicio[0].LocalityName;
            //}

            //List<Placemark> datosFinal = Posicion.ObtenerDatosPosición(puntos.Last().Latitud, puntos.Last().Longitud);

            //if(datosFinal != null)
            //{
            //    NombreCalleFinal = datosFinal[0].ThoroughfareName;
            //    NombreCiudadFinal = datosFinal[0].LocalityName;
            //}
        }
Exemple #5
0
        public static HistorialWeb PrepararHistorialPosicion(ProyectoAutoContext _db, HistorialWeb _HW, DateTime _fecha, int _idAuto)
        {
            Auto auto = _db.Autos.Where(a => a.Id == _idAuto).FirstOrDefault();

            if (auto == null)
            {
                return(new HistorialWeb());
            }

            HistorialDiario historialHoy = null;

            List <HistorialDiario> historialesHoy = auto.HistorialesDiarios
                                                    .Where(h => h.Fecha.Year == _fecha.Year &&
                                                           h.Fecha.Month == _fecha.Month &&
                                                           h.Fecha.Day == _fecha.Day).ToList();

            int nResultados = 0;

            foreach (HistorialDiario hd in historialesHoy)
            {
                List <HistorialPosicion> histPos = hd.historialesPosicion;
                if (histPos.Count > nResultados)
                {
                    historialHoy = hd;
                    nResultados  = histPos.Count;
                }
            }

            DateTime fechaEjemplo = new DateTime(2018, 1, 1);

            if (_fecha.Date == fechaEjemplo.Date)
            {
                _HW.historialesPosicion = CrearHistorialPosicionejemplo();
                return(_HW);
            }

            if (historialHoy == null)
            {
                _HW.historialesPosicion = new List <HistorialPosicion>();
                return(_HW);
            }


            List <HistorialPosicion> historiales = historialHoy.historialesPosicion.OrderBy(h => h.FechaHora).ToList();

            _HW.historialesPosicion = historiales;

            #region HistorialesComparables

            List <HistorialWeb.TiposHistorial> historialesComparables = new List <HistorialWeb.TiposHistorial>();
            historialesComparables.Add(HistorialWeb.TiposHistorial.Velocidad);
            _HW.historialesComparables = historialesComparables;

            List <HistorialVelocidad> histVelocidad   = historialHoy.historialesVelocidad.OrderBy(h => h.HoraRegistro).ToList();
            List <PuntoGrafico>       puntosVelocidad = VelocidadAPuntosGrafico(histVelocidad);
            _HW.historialesVelocidad = puntosVelocidad;

            #endregion

            return(_HW);
        }
Exemple #6
0
        public static HistorialWeb PrepararHistorialVelocidad(ProyectoAutoContext _db, HistorialWeb _HW, DateTime _fecha, int _idAuto)
        {
            //historial web ya llega creado (con ciertos datos genericos como fecha y patente)

            //Ordenar historiales velocidad
            //transformarlos apuntos grafico
            //Remover repetidos si se puede
            //asignarlos al historial web

            Auto auto = _db.Autos.Where(a => a.Id == _idAuto).FirstOrDefault();

            if (auto == null)
            {
                return(new HistorialWeb());
            }

            HistorialDiario historialHoy = null;

            List <HistorialDiario> historialesHoy = auto.HistorialesDiarios
                                                    .Where(h => h.Fecha.Year == _fecha.Year &&
                                                           h.Fecha.Month == _fecha.Month &&
                                                           h.Fecha.Day == _fecha.Day).ToList();

            int nResultados = 0;

            foreach (HistorialDiario hd in historialesHoy)
            {
                if (hd.historialesVelocidad.Count > nResultados)
                {
                    historialHoy = hd;
                    nResultados  = hd.historialesVelocidad.Count;
                }
            }

            if (historialHoy == null)
            {
                _HW.historialesVelocidad = new List <PuntoGrafico>();
                return(_HW);
            }


            List <HistorialVelocidad> histVelocidad = historialHoy.historialesVelocidad.OrderBy(h => h.HoraRegistro).ToList();

            #region HistorialesComparables

            List <HistorialWeb.TiposHistorial> historialesComparables = new List <HistorialWeb.TiposHistorial>();
            historialesComparables.Add(HistorialWeb.TiposHistorial.Energia);
            _HW.historialesComparables = historialesComparables;

            List <HistorialEnergia> histEnergia = historialHoy.historialesEnergia.OrderBy(h => h.HoraRegistro).ToList();

            #endregion


            List <PuntoGrafico> puntosVelocidad = VelocidadAPuntosGrafico(histVelocidad);
            List <PuntoGrafico> puntosEnergia   = EnergiaAPuntosGrafico(histEnergia);

            if (histVelocidad.Count == 0)
            {
                puntosVelocidad = CrearHistorialVelocidadEjemplo();
                puntosEnergia   = CrearHistorialEnergiaEjemplo();
            }

            _HW.historialesVelocidad = puntosVelocidad;
            _HW.historialesEnergia   = puntosEnergia;
            _HW.ValorMaximo          = BuscarValorMaximo(puntosVelocidad);


            return(_HW);
        }