Exemple #1
0
        /// <summary>
        /// Calcula el tiempo con base al medio en el que se viaja y el horario en el que se ejecuta la instrucción
        /// </summary>
        /// <returns>EL tiempo que tarda determinado objeto en llegar a determinar a determinada posición</returns>
        private static double Tiempo(DateTime dtHoraFecha, double distanceM, eMedio medio)
        {
            double distance = distanceM / 1000;
            double tiempo   = 0;

            if (medio == eMedio.Vehículo)
            {
                if (dtHoraFecha.DayOfWeek == DayOfWeek.Sunday || dtHoraFecha.DayOfWeek == DayOfWeek.Saturday)
                {
                    tiempo += distance / 40;
                }
                else if (dtHoraFecha.Hour > 22 && dtHoraFecha.Hour <= 24 || dtHoraFecha.Hour >= 0 && dtHoraFecha.Hour <= 5)
                {
                    tiempo = distance / 40;
                }
                else if (dtHoraFecha.Hour > 5 && dtHoraFecha.Hour <= 6)
                {
                    tiempo = distance / 20;
                }
                else if (dtHoraFecha.Hour > 6 && dtHoraFecha.Hour <= 9)
                {
                    tiempo = distance / 5;
                }
                else if (dtHoraFecha.Hour > 9 && dtHoraFecha.Hour <= 13)
                {
                    tiempo = distance / 30;
                }
                else if (dtHoraFecha.Hour > 13 && dtHoraFecha.Hour <= 15)
                {
                    tiempo = distance / 15;
                }
                else if (dtHoraFecha.Hour > 15 && dtHoraFecha.Hour <= 17)
                {
                    tiempo = distance / 20;
                }
                else if (dtHoraFecha.Hour > 17 && dtHoraFecha.Hour <= 20)
                {
                    tiempo = distance / 5;
                }
                else if (dtHoraFecha.Hour > 20 && dtHoraFecha.Hour <= 22)
                {
                    tiempo = distance / 30;
                }
            }
            else if (medio == eMedio.Ambulancia || medio == eMedio.Caminando || medio == eMedio.Policía)
            {
                tiempo = distance / 3;
            }

            return(tiempo);
        }
Exemple #2
0
        /// <summary>
        /// Método que traza la ruta de emergencia
        /// </summary>
        /// <param name="dgvMapa">Mapa sobre el cual se dibuja</param>
        /// <param name="inicio">En donde inicia el trazo</param>
        /// <param name="final">En donde finaliza el trazo</param>
        /// <param name="emergencia">El servicio que se solicita</param>
        /// <param name="viewer">La ventana principal en la cual se muestran los resultados</param>
        /// <param name="direcciones">Arreglo que cuarda cada una de las posiciones a seguir para alcanzar el objetivo</param>
        /// <returns></returns>
        public static double trazarRutaEmergencia(DataGridView dgvMapa, address inicio, address final, eMedio emergencia, Viewer viewer, ArrayList direcciones)
        {
            if (direcciones != null)
            {
                foreach (DataGridViewCell celdaPorPintar in direcciones)
                {
                    celdaPorPintar.Style.BackColor = Colores.colorCamino;
                    if (celdaPorPintar is DataGridViewImageCell)
                    {
                        dgvMapa[celdaPorPintar.ColumnIndex, celdaPorPintar.RowIndex].Value = Properties.Resources.transparencia;
                    }
                }
            }
            direcciones.Clear();
            double EDA        = 0;
            double ETA        = 0;
            Color  colorTrazo = Color.Orange;
            DataGridViewImageCell celdaImagen = new DataGridViewImageCell();

            celdaImagen.Value = Properties.Resources.FireAlarm;

            switch (emergencia)
            {
            case eMedio.Policía:
                colorTrazo        = Colores.colorTrazoPolicia;
                celdaImagen.Value = Properties.Resources.Google_Alerts;
                break;

            case eMedio.Ambulancia:
                colorTrazo        = Colores.colorTrazoAmbulancia;
                celdaImagen.Value = Properties.Resources.FireAlarm;
                break;

            case eMedio.Caminando:
                colorTrazo        = Colores.colorTrazoPersona;
                celdaImagen.Value = Properties.Resources.GPS;
                break;
            }
            inicio.intCalle   = 6 * (inicio.intCalle - 1) + 2;
            inicio.intAvenida = 6 * (inicio.intAvenida - 1) + 2;
            final.intCalle    = 6 * (final.intCalle - 1) + 2;
            final.intAvenida  = 6 * (final.intAvenida - 1) + 2;

            dgvMapa[inicio.intAvenida + 1, inicio.intCalle + 1] = celdaImagen;
            direcciones.Add(dgvMapa[inicio.intAvenida + 1, inicio.intCalle + 1]);
            //direcciones.Add(dgvMapa[inicio.intAvenida + 1, inicio.intCalle + 1]);


            dgvMapa[inicio.intAvenida + 1, inicio.intCalle + 1].Style.BackColor = Color.DarkRed;
            while (inicio.intCalle != final.intCalle || inicio.intAvenida != final.intAvenida)
            {
                if (inicio.intCalle < final.intCalle)
                {
                    while (inicio.intCalle < final.intCalle)
                    {
                        inicio.intCalle += 1;
                        EDA             += 100 / 6;
                        ETA             += Tiempo(viewer.dtFecha, 100 / 6, emergencia);
                        direcciones.Add(dgvMapa[inicio.intAvenida, inicio.intCalle]);
                        dgvMapa[inicio.intAvenida, inicio.intCalle].Style.BackColor = colorTrazo;
                    }
                }
                else if (inicio.intCalle > final.intCalle)
                {
                    while (inicio.intCalle > final.intCalle)
                    {
                        inicio.intCalle -= 1;
                        EDA             += 100 / 6;
                        ETA             += Tiempo(viewer.dtFecha, 100 / 6, emergencia);
                        direcciones.Add(dgvMapa[inicio.intAvenida, inicio.intCalle]);
                        dgvMapa[inicio.intAvenida, inicio.intCalle].Style.BackColor = colorTrazo;
                    }
                }
                if (inicio.intAvenida > final.intAvenida)
                {
                    while (inicio.intAvenida > final.intAvenida)
                    {
                        inicio.intAvenida -= 1;
                        EDA += 100 / 6;
                        ETA += Tiempo(viewer.dtFecha, 100 / 6, emergencia);
                        direcciones.Add(dgvMapa[inicio.intAvenida, inicio.intCalle]);
                        dgvMapa[inicio.intAvenida, inicio.intCalle].Style.BackColor = colorTrazo;
                    }
                }
                else if (inicio.intAvenida < final.intAvenida)
                {
                    while (inicio.intAvenida < final.intAvenida)
                    {
                        inicio.intAvenida += 1;
                        EDA += 100 / 6;
                        ETA += Tiempo(viewer.dtFecha, 100 / 6, emergencia);
                        direcciones.Add(dgvMapa[inicio.intAvenida, inicio.intCalle]);
                        dgvMapa[inicio.intAvenida, inicio.intCalle].Style.BackColor = colorTrazo;
                    }
                }
            }
            return(Math.Round(ETA * 60, 2));
        }