Ejemplo n.º 1
0
        public List<Propozycja> Pobierz(int start, int stop, DateTime data_start)
        {
            var propozycje = new List<Propozycja>();
            var przystanki = new List<Przystanki>(from a in data.Przystanki select a);

            //w linii
            var bezposrednio = new List<Trasy>();
            foreach (Trasy a in data.Trasy)
            {
                if (a.Typ == "All" || a.Typ == "Dni Robocze")
                {
                    String[] przystanek = a.Przystanki.Split(new String[] { "," }, StringSplitOptions.None);
                    String[] czas = a.Czas.Split(new String[] { "," }, StringSplitOptions.None);
                    bool s1 = false, s2 = false;

                    int pozycja_start = 0;
                    int pozycja_stop = 0;

                    for (int i = 0; i < przystanek.Length; i++)
                    {
                        if (int.Parse(przystanek[i]) == start && s1 == false) { s1 = true; pozycja_start = i; }
                        if (int.Parse(przystanek[i]) == stop && s2 == false && s1 == true) { s2 = true; pozycja_stop = i; }
                    }
                    if (s1 == true && s2 == true && pozycja_start < pozycja_stop)
                    {
                        bezposrednio.Add(a);
                    }
                }
            }

            int h = data_start.Hour;
            int m = data_start.Minute;
            String day = data_start.DayOfWeek.ToString();
            Console.WriteLine(h + ":" + m + " " + day);

            foreach (Trasy a in bezposrednio)
            {
                Console.WriteLine(a.Linia);

                String[] przystanek = a.Przystanki.Split(new String[] { "," }, StringSplitOptions.None);
                String[] czas = a.Czas.Split(new String[] { "," }, StringSplitOptions.None);

                int pozycja_start = -1;
                int pozycja_stop = -1;
                int start_min = 0;
                int stop_min = 0;
                String przystanki_odwiedzane = "";

                for (int i = 0; i < przystanek.Length; i++)
                {
                    if (pozycja_start == -1) start_min += int.Parse(czas[i]);
                    if (pozycja_stop == -1) stop_min += int.Parse(czas[i]);

                    if (int.Parse(przystanek[i]) == start && pozycja_start == -1) pozycja_start = i;
                    if (int.Parse(przystanek[i]) == stop && pozycja_start > -1) pozycja_stop = i;
                }
                for (int i = pozycja_start; i < pozycja_stop + 1; i++)
                {
                    przystanki_odwiedzane += przystanek[i] + ",";
                }

                int vars = int.Parse(przystanek[0]);

                var result = from r in data.Odjazdy
                             where r.Symbol_linii == a.Linia &&
                                 //r.Typ == "Soboty" &&
                                   r.Nr_przystanku == vars
                             select r;

                String od = "";

                foreach (Odjazdy o in result)
                {
                    String[] godziny = o.Godziny.Split(new String[] { ", " }, StringSplitOptions.None);

                    for (int i = 0; i < godziny.Length - 1; i++)
                    {
                        if (string.IsNullOrEmpty(a.Znacznik))
                        {
                            int h1 = int.Parse(godziny[i].Substring(0, 2));
                            int m1 = int.Parse(godziny[i].Substring(3, 2));
                            String zn = "";
                            if (godziny[i].Length > 5) zn = godziny[i].Substring(5, godziny[i].Length - 5);
                            if (zn.Length > 0 && !string.IsNullOrEmpty(a.Znacznik))
                            {
                                if (zn.Contains(a.Znacznik)) Console.WriteLine("o");
                            }
                            m1 += start_min;
                            if (m1 >= 60)
                            {
                                h1++;
                                m1 -= 60;
                            }

                            if ((h * 60 + m) < (h1 * 60 + m1))
                            {
                                od = h1 + ":" + m1 + " " + zn;
                                i = godziny.Length;
                            }
                        }
                        else
                        {
                            int h1 = int.Parse(godziny[i].Substring(0, 2));
                            int m1 = int.Parse(godziny[i].Substring(3, 2));
                            String zn = "";
                            if (godziny[i].Length > 5) zn = godziny[i].Substring(5, godziny[i].Length - 5);
                            if (zn.Length > 0 && !string.IsNullOrEmpty(a.Znacznik))
                            {
                                if (zn.Contains(a.Znacznik))
                                {
                                    m1 += start_min;
                                    if (m1 >= 60)
                                    {
                                        h1++;
                                        m1 -= 60;
                                    }

                                    if ((h * 60 + m) < (h1 * 60 + m1))
                                    {
                                        od = h1 + ":" + m1 + " " + zn;
                                        i = godziny.Length;
                                    }
                                }
                            }
                        }

                    }
                    if (od == "")
                    {
                        if (string.IsNullOrEmpty(a.Znacznik))
                        {
                            int h1 = int.Parse(godziny[0].Substring(0, 2));
                            int m1 = int.Parse(godziny[0].Substring(3, 2));
                            String zn = "";
                            if (godziny[0].Length > 5) zn = godziny[0].Substring(5, godziny[0].Length - 5);
                            m1 += start_min;
                            if (m1 >= 60)
                            {
                                h1++;
                                m1 -= 60;
                            }

                            od = h1 + ":" + m1;
                        }
                        else
                        {
                            int counter = 0;
                            for (int i = 0; i < godziny.Length - 1; i++)
                            {
                                String zn = "";
                                if (godziny[i].Length > 5) zn = godziny[i].Substring(5, godziny[i].Length - 5);
                                if (zn.Contains(a.Znacznik))
                                {
                                    counter = i;
                                    i = godziny.Length - 1;
                                }
                            }

                            int h1 = int.Parse(godziny[counter].Substring(0, 2));
                            int m1 = int.Parse(godziny[counter].Substring(3, 2));

                            m1 += start_min;
                            if (m1 >= 60)
                            {
                                h1++;
                                m1 -= 60;
                            }

                            od = h1 + ":" + m1;
                        }
                    }
                }

                int do_odjazdu = 0;
                int na_miejscu = 0;
                int od_h = int.Parse(od.Substring(0, od.IndexOf(":")));
                int od_m = int.Parse(od.Substring(od.IndexOf(":") + 1, 2));

                if ((h * 60 + m) < (od_h * 60 + od_m)) do_odjazdu = (od_h * 60 + od_m) - (h * 60 + m);
                else do_odjazdu = ((24 * 60) - (h * 60 + m)) + (od_h * 60 + od_m);

                na_miejscu = (od_h * 60 + od_m) + (stop_min - start_min);

                Propozycja pr = new Propozycja();
                pr.linia1 = a.Linia;
                pr.czas_odjazdu = new TimeSpan(od_h, od_m, 0);
                pr.czas_przyjazdu = new TimeSpan((int)(Math.Floor(na_miejscu / 60.0)), (int)(Math.Floor(na_miejscu % 60.0)), 0);
                pr.czas_przejazdu = (stop_min - start_min);
                pr.do_odjazdu = do_odjazdu;
                pr.przystanki = przystanki_odwiedzane.Split(new String[] { "," }, StringSplitOptions.None);

                Pozycja[] pp = new Pozycja[50];
                for (int j = 0; j < pr.przystanki.Length - 1; j++)
                {
                    int vv = int.Parse(pr.przystanki[j]);
                    Przystanki tm = przystanki.Single(i => i.Numer == vv);
                    Pozycja tr = new Pozycja();
                    tr.X = tm.X;
                    tr.Y = tm.Y;
                    pp[j] = tr;
                }
                var przystanek_start = przystanki.Single(i => i.Numer == int.Parse(pr.przystanki[0]));
                var przystanek_stop = przystanki.Single(i => i.Numer == int.Parse(pr.przystanki[pr.przystanki.Length - 2]));
                pr.pozycje = pp;
                pr.tekst = "<li class='list-group-item'><b>Wejdź na: " + przystanek_start.Nazwa_rozklad + "</b></li>" +
                           "<li class='list-group-item'><b>Odjazd: " + pr.czas_odjazdu + "</b></li>" +
                           "<li class='list-group-item'><b>Wyjdź na: " + przystanek_stop.Nazwa_rozklad + "</b></li>" +
                           "<li class='list-group-item'><b>Na Miejscu: " + pr.czas_przyjazdu + "</b></li>" +
                           "<li class='list-group-item'><b>Czas podróży: " + pr.czas_przejazdu + " min</b></li>";

                propozycje.Add(pr);
            }

            return propozycje;
        }
Ejemplo n.º 2
0
        public List<Propozycja> PobierzT(int start, int stop, DateTime data_start)
        {
            var propozycje = new List<Propozycja>();
            var przystanki = new List<Przystanki>(from a in data.Przystanki select a);

            var dayOfWeek = data_start.DayOfWeek;
            var day = data_start.Day;
            var month = data_start.Month;
            var year = data_start.Year;

            if (dayOfWeek.ToString().Equals("Saturday"))
            {
                Console.WriteLine("Soboty");
            }
            else if (dayOfWeek.ToString().Equals("Sunday"))
            {
                Console.WriteLine("Niedziela - Dni świateczne");
            }
            else
            {
                Console.WriteLine("Zwykłe dni");
            }

            var startP = new List<Trasy>();
            var stopP = new List<Trasy>();

            foreach (var a in data.Trasy)
            {
                var tab = a.Przystanki.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                var t = Array.IndexOf(tab, stop + "");
                var u = tab.Length;

                if (Array.IndexOf(tab, start + "") >= 0 &&
                    Array.IndexOf(tab, stop + "") < 0 && Array.IndexOf(tab, start + "") != tab.Length - 1 &&
                    (a.Typ.Equals("Dni Robocze") || a.Typ.Equals("All")))
                {
                    startP.Add(a);
                }
                if (Array.IndexOf(tab, stop + "") >= 0 &&
                    Array.IndexOf(tab, start + "") < 0 &&
                    (a.Typ.Equals("Dni Robocze") || a.Typ.Equals("All")))
                {
                    stopP.Add(a);
                }
            }

            foreach (Trasy a in startP)
            {
                int dogodny1 = 0;
                int dogodny2 = 0;
                int dogodny1index = 0;
                int dogodny2index = 0;
                string l1 = "", l2 = "";
                double odleglosc = 100000;

                foreach (Trasy b in stopP)
                {
                    if (a.Linia != b.Linia)
                    {
                        String[] przystanekP = a.Przystanki.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                        String[] przystanekS = b.Przystanki.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);

                        int poczatek = Array.IndexOf(przystanekP, start.ToString());
                        int koniec = Array.IndexOf(przystanekS, stop.ToString());

                        int h = data_start.Hour;
                        int m = data_start.Minute;

                        if (poczatek >= 0 && koniec >= 0)//Określenie dogodnej przesiadki
                        {
                            for (int i = poczatek + 1; i < przystanekP.Length; i++)
                            {
                                for (int j = 0; j < koniec; j++)
                                {
                                    var p1 = int.Parse(przystanekP[i]);
                                    var p2 = int.Parse(przystanekS[j]);

                                    var P1 = przystanki.SingleOrDefault(x => x.Numer == p1);
                                    var P2 = przystanki.SingleOrDefault(x => x.Numer == p2);
                                    if (P1 != null && P2 != null)
                                    {
                                        var odl = Odleglosc(P1.X, P2.X, P1.Y, P2.Y);
                                        if (odl < odleglosc)
                                        {
                                            odleglosc = odl;
                                            dogodny1 = P1.Numer;
                                            dogodny2 = P2.Numer;
                                            dogodny1index = i;
                                            dogodny2index = j;
                                            l1 = a.Linia;
                                            l2 = b.Linia;
                                        }
                                    }
                                }
                            }
                            Console.WriteLine("Odleglosc: " + odleglosc + " P1: " + dogodny1 + " P2 " + dogodny2 + " L1: " + l1 + " L2: " + l2);

                            String[] przystanek = a.Przystanki.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                            String[] czas = a.Czas.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries);

                            int przejazd1 = 0, przejazd2 = 0;// dlugosc przejazdów 1 i 2
                            int calosc = 0;
                            String przystanki_odwiedzane = "";

                            for (int i = poczatek; i < dogodny1index + 1; i++)
                            {
                                przejazd1 += int.Parse(czas[i]);
                                calosc += int.Parse(czas[i]);
                                przystanki_odwiedzane += przystanek[i] + ",";
                            }

                            przystanek = b.Przystanki.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                            czas = b.Czas.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries);

                            for (int i = dogodny2index; i < koniec + 1; i++)
                            {
                                przejazd2 += int.Parse(czas[i]);
                                calosc += int.Parse(czas[i]);
                                przystanki_odwiedzane += przystanek[i] + ",";
                            }
                            //Console.WriteLine(przystanki_odwiedzane);

                            int odjazd1 = start;
                            int odjazd2 = dogodny2;

                            var result1 = new List<Odjazdy>(from r in data.Odjazdy
                                                            where r.Symbol_linii == a.Linia &&
                                                            r.Typ == "Dni Robocze" &&
                                                            r.Nr_przystanku == odjazd1
                                                            select r);

                            var result2 = new List<Odjazdy>(from r in data.Odjazdy
                                                            where r.Symbol_linii == b.Linia &&
                                                            r.Typ == "Dni Robocze" &&
                                                            r.Nr_przystanku == odjazd2
                                                            select r);

                            var startT = new TimeSpan();
                            var wysiadkaT = new TimeSpan();
                            int czekanieT = 0;
                            var wsiadanieT = new TimeSpan();
                            var koniecT = new TimeSpan();

                            //String od = "";
                            int mm = 0, hh = 0;
                            foreach (Odjazdy o in result1)
                            {
                                String[] godziny = o.Godziny.Split(new String[] { ", " }, StringSplitOptions.RemoveEmptyEntries);

                                int h1t = int.Parse(godziny[godziny.Length - 1].Substring(0, 2));
                                int m1t = int.Parse(godziny[godziny.Length - 1].Substring(3, 2));

                                if (h * 60 + m > h1t * 60 + m1t)
                                {
                                    startT = new TimeSpan(int.Parse(godziny[0].Substring(0, 2)), int.Parse(godziny[0].Substring(3, 2)), 0);
                                    mm = startT.Minutes;
                                    hh = startT.Hours;
                                }
                                else
                                {

                                    for (int i = 0; i < godziny.Length; i++)
                                    {
                                        int h1 = int.Parse(godziny[i].Substring(0, 2));
                                        int m1 = int.Parse(godziny[i].Substring(3, 2));

                                        if ((h * 60 + m) < (h1 * 60 + m1))
                                        {
                                            startT = new TimeSpan(h1, m1, 0);
                                            i = godziny.Length;
                                            mm = m1;
                                            hh = h1;
                                        }
                                    }
                                }
                            }

                            wysiadkaT = startT.Add(new TimeSpan(0, przejazd1, 0));

                            int minDodacZaOdleglosc = (int)(odleglosc * 10);

                            var nextTime = wysiadkaT.Add(new TimeSpan(0, minDodacZaOdleglosc, 0));
                            h = nextTime.Hours;
                            m = nextTime.Minutes;
                            foreach (Odjazdy o in result2)
                            {
                                String[] godziny = o.Godziny.Split(new String[] { ", " }, StringSplitOptions.RemoveEmptyEntries);

                                int h1t = int.Parse(godziny[godziny.Length - 1].Substring(0, 2));
                                int m1t = int.Parse(godziny[godziny.Length - 1].Substring(3, 2));

                                if (h * 60 + m > h1t * 60 + m1t)
                                {
                                    wsiadanieT = new TimeSpan(int.Parse(godziny[0].Substring(0, 2)), int.Parse(godziny[0].Substring(3, 2)), 0);
                                }
                                else
                                {
                                    for (int i = 0; i < godziny.Length; i++)
                                    {
                                        int h1 = int.Parse(godziny[i].Substring(0, 2));
                                        int m1 = int.Parse(godziny[i].Substring(3, 2));

                                        if ((h * 60 + m) < (h1 * 60 + m1))
                                        {
                                            wsiadanieT = new TimeSpan(h1, m1, 0);
                                            i = godziny.Length;
                                        }
                                    }
                                }
                            }
                            czekanieT = (int)(wsiadanieT.TotalMinutes - wysiadkaT.TotalMinutes);

                            koniecT = wsiadanieT.Add(new TimeSpan(0, przejazd2, 0));

                            var pr = new Propozycja();
                            pr.linia1 = string.IsNullOrEmpty(b.Linia) ? a.Linia : a.Linia + ", " + b.Linia;
                            pr.linia2 = b.Linia;
                            pr.czas_odjazdu = startT;
                            pr.wysiadka = wysiadkaT;
                            pr.przesiadka = wsiadanieT;
                            pr.czas_przyjazdu = koniecT;
                            pr.czekanie = czekanieT;
                            pr.przystanki = przystanki_odwiedzane.Split(new String[] { "," }, StringSplitOptions.None);

                            h = data_start.Hour;
                            m = data_start.Minute;
                            int do_odjazdu = 0;
                            if ((h * 60 + m) < (startT.Hours * 60 + startT.Minutes)) do_odjazdu = (startT.Hours * 60 + startT.Minutes) - (h * 60 + m);
                            else do_odjazdu = ((24 * 60) - (h * 60 + m)) + (startT.Hours * 60 + startT.Minutes);
                            pr.do_odjazdu = do_odjazdu;

                            pr.czas_przejazdu = (int)(koniecT.TotalMinutes - startT.TotalMinutes);
                            if (pr.czas_przejazdu <= 0)
                            {
                                pr.czas_przejazdu = (int)((3600 - startT.TotalMinutes) + koniecT.TotalMinutes);
                            }

                            pr.tekst = "<li class='list-group-item'><b>Wejdź na: " + przystanki.Single(i => i.Numer == int.Parse(pr.przystanki[0])).Nazwa_rozklad + "</b></li>" +
                                       "<li class='list-group-item'><b>Odjazd: " + pr.czas_odjazdu + "</b></li>" +
                                       "<li class='list-group-item'><b>Wyjdź: " + wysiadkaT + " na " + przystanki.Single(i => i.Numer == dogodny1).Nazwa_rozklad + "</b></li>" +
                                       ((odleglosc*10)>0 ? "<li class='list-group-item'><b>Przejdź: " + Math.Round(odleglosc,2) + " km ("+ (int)(Math.Round(odleglosc, 2)*10) + " min)</b></li>" : "") +
                                       "<li class='list-group-item'><b>Poczekaj " + pr.czekanie + " min</b></li>" +
                                       "<li class='list-group-item'><b>Wsiądź: " + wsiadanieT + " na " + przystanki.Single(i => i.Numer == dogodny2).Nazwa_rozklad + "</b></li>" +
                                       "<li class='list-group-item'><b>Wyjdź: " + koniecT + " na " + przystanki.Single(i => i.Numer == int.Parse(pr.przystanki[pr.przystanki.Length - 2])).Nazwa_rozklad + "</b></li>" +
                                       "<li class='list-group-item'><b>Na Miejscu: " + pr.czas_przyjazdu + "</b></li>" +
                                       "<li class='list-group-item'><b>Czas podróży: " + pr.czas_przejazdu + " min</b></li>";

                            Pozycja[] pp = new Pozycja[50];
                            for (int j = 0; j < pr.przystanki.Length - 1; j++)
                            {
                                int vv = int.Parse(pr.przystanki[j]);
                                Przystanki tm = przystanki.Single(i => i.Numer == vv);
                                Pozycja tr = new Pozycja();
                                tr.X = tm.X;
                                tr.Y = tm.Y;
                                pp[j] = tr;
                            }
                            pr.pozycje = pp;

                            pr.przesiadkaPrzystanek = dogodny1 + "," + dogodny2;
                            propozycje.Add(pr);
                        }
                    }
                }
            }

            return propozycje;
        }