예제 #1
0
        //gets time of next arrival and updates UI
        private async Task <Arrival> ArrivalTimeAsync(int stopListIndex, int arrivalIndex)
        {
            //string stop = "4117202";
            string stop;

            if (stopList.Count >= stopListIndex)
            {
                stop = stopList[stopListIndex].Value.StopId;
            }
            else if (stopList.Count > 0)
            {
                stop = stopList[0].Value.StopId;
            }
            else
            {
                stop = "4117202";
            }

            agency.Replace(",", "%2C");
            stop.Replace(",", "%2C");

            //https://transloc-api-1-2.p.mashape.com/arrival-estimates.json?agencies=176&stops=4117206
            string url = "https://transloc-api-1-2.p.mashape.com/arrival-estimates.json" +
                         "?agencies={0}" +
                         "&stops={1}";//json URL

            string queryUrl       = string.Format(url, agency, stop);
            string translocResult = await client.GetStringAsync(queryUrl);

            //Result.Text = translocResult;
            ArrivalData apiData = JsonConvert.DeserializeObject <ArrivalData>(translocResult);

            if (apiData != null)
            {
                if (apiData.data.Count == 0)
                {
                    return(null);
                }

                StopArrivals currentStop = null;
                foreach (StopArrivals stopInfo in apiData.data)
                {
                    if (stopInfo.stop_id == stop)
                    {
                        currentStop = stopInfo;
                        break;
                    }
                }

                Arrival nextArrival = currentStop.arrivals[arrivalIndex % currentStop.arrivals.Count];
                return(nextArrival);
            }


            return(null);
        }
예제 #2
0
        public IActionResult BusDisplay(string lat, string lon, string nearestBusStop)
        {
            BusDisplayViewModel model = new BusDisplayViewModel();

            model.UserLatitude   = lat;
            model.UserLongitude  = lon;
            model.ClosestBusStop = nearestBusStop;
            model.BusData        = new List <ArrivalData>();


            var          utcTime     = DateTime.UtcNow;
            TimeZoneInfo pacificZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
            DateTime     pacificTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, pacificZone);
            var          currentTime = pacificTime.ToString("HH:mm:ss");

            //get list of all available buses
            List <int> busList = new List <int>();

            busList.Add(10);
            busList.Add(15);
            busList.Add(16);
            busList.Add(19);
            busList.Add(20);

            //from SQL DB for each bus stop, get next arrival time
            using (var db = new SlugContext())
            {
                foreach (var item in busList)
                {
                    ArrivalData data = new ArrivalData();

                    //Dynamically Choose Fields
                    string fields = "CurrentStatus,BusNumber,Street,ID," + model.ClosestBusStop;

                    //select

                    var e = db.Schedules
                            .Where(m => m.BusNumber == item && TimeSpan.Parse(m.Base) >= TimeSpan.Parse(currentTime))
                            .Select(DynamicSelectGenerator <Schedule>(fields))
                            .FirstOrDefault();

                    if (e == null)
                    {
                        e = db.Schedules
                            .Where(m => m.BusNumber == item && TimeSpan.Parse(m.Base) >= TimeSpan.Parse("07:30:00"))
                            .Select(DynamicSelectGenerator <Schedule>(fields))
                            .FirstOrDefault();
                    }

                    Type           type  = typeof(Schedule);
                    PropertyInfo[] pList = type.GetProperties();
                    foreach (PropertyInfo p in pList)
                    {
                        if (p.GetValue(e) != null)
                        {
                            if (p.Name == "Street")
                            {
                                data.Street = e.Street;
                            }
                            else if (p.Name == "BusNumber")
                            {
                                data.BusNumber = item.ToString();
                            }
                            else if (p.Name == "ID")
                            {
                                data.ID = e.ID;
                            }
                            else if (p.Name == "CurrentStatus")
                            {
                                data.CurrentStatus = e.CurrentStatus;
                            }
                            else
                            {
                                if (p.Name != "LowCapacity" && p.Name != "MediumCapacity" && p.Name != "HighCapacity" && p.Name != "CurrentStatus")
                                {
                                    data.ArrivalTime1 = p.GetValue(e).ToString();

                                    string timed = p.GetValue(e).ToString();
                                    timed = timed.Remove(timed.Length - 3); //removed seconds


                                    string timed1 = timed.Substring(0, 2);
                                    int    h1     = Int32.Parse(timed1);

                                    if (h1 > 12)
                                    {
                                        h1 = h1 - 12;
                                        data.ArrivalTime = h1.ToString() + timed.Substring(2) + (" PM");
                                    }
                                    else
                                    {
                                        data.ArrivalTime = timed + (" AM");
                                    }
                                }
                            }
                        }
                    }

                    if (data.ArrivalTime != "0" && !string.IsNullOrEmpty(data.ArrivalTime))
                    {
                        model.BusData.Add(data);
                    }
                }
            }

            return(View("BusDisplay", model));
        }