Ejemplo n.º 1
0
 public IList <User_Driving_Events> Checkacc(IList <User_Driving_Data> DrivingData)
 {
     foreach (User_Driving_Data dData in DrivingData)
     {
         if (dData.User_Acceleration_Y > eventThresholdPositve)
         {
             User_Driving_Events evnt = new User_Driving_Events();
             evnt.Event_Type_Id = (int)EventType.Sudden_Acceleration;
             evnt.Event_Time    = dData.TimeStamp;
             evnt.Session_Id    = dData.Session_Id;
             eventAll.Add(evnt);
         }
         else if (dData.User_Acceleration_Y < eventThresholdNegative)
         {
             User_Driving_Events evnt = new User_Driving_Events();
             evnt.Event_Type_Id = Convert.ToInt32(EventType.Sudden_Braking);
             evnt.Event_Time    = dData.TimeStamp;
             evnt.Session_Id    = dData.Session_Id;
             eventAll.Add(evnt);
         }
     }
     return(eventAll);
 }
Ejemplo n.º 2
0
        public IList <User_Driving_Events> CheckAgressiveTurning_And_LaneChange(IList <User_Driving_Data> Datalist)
        {
            var frequency       = Datalist.FirstOrDefault().Frequency;
            var listSize        = Datalist.Count();
            var RemainderOfList = listSize % frequency;
            var DatachuckSize   = listSize - RemainderOfList;
            IList <User_Driving_Data>   DataChunkList = new List <User_Driving_Data>();
            IList <User_Driving_Events> AggressiveTurning_EventsList = new List <User_Driving_Events>();
            IList <User_Driving_Events> LaneChange_EventsList        = new List <User_Driving_Events>();
            IList <User_Driving_Events> Events = new List <User_Driving_Events>();
            double AgressiveTurningEventCount  = 0;

            //double LaneChangeEventCount = 0;
            //LaneChange lanechange = new LaneChange();
            for (int i = 0; i < DatachuckSize; i = i + frequency)
            {
                for (int j = i; j < i + frequency; j++)
                {
                    DataChunkList.Add(Datalist.ElementAt(j));
                }
                var FirstEntry = DataChunkList.First();
                var LastEntry  = DataChunkList.Last();
                var Heading    = TurningAngle(FirstEntry, LastEntry);
                if (Heading > 30)
                {
                    //Create aggresive turning event
                    AgressiveTurningEventCount++;
                    User_Driving_Events events = new User_Driving_Events();
                    events.Session_Id    = FirstEntry.Session_Id;
                    events.Event_Type_Id = Convert.ToInt32(EventType.Agressive_Turning);
                    events.Event_Time    = FirstEntry.TimeStamp;
                    Events.Add(events);
                }
                else
                if (Heading > 0 & Heading < 20)
                {
                    var laneChangeAlgo   = new LaneChange();
                    var laneChangeEvents = laneChangeAlgo.CheckLaneChange(DataChunkList);
                    foreach (var e in laneChangeEvents)
                    {
                        Events.Add(e);
                    }
                }
                FirstEntry = null;
                LastEntry  = null;
                DataChunkList.Clear();
            }
            if (RemainderOfList != 0)
            {
                for (var i = DatachuckSize; i < listSize; i++)
                {
                    DataChunkList.Add(Datalist.ElementAt(i));
                }
                var FirstEntry = DataChunkList.First();
                var LastEntry  = DataChunkList.Last();
                var Heading    = TurningAngle(FirstEntry, LastEntry);
                if (Heading >= 30)
                {
                    //Create aggresive turning event
                    AgressiveTurningEventCount++;
                    AgressiveTurningEventCount++;
                    User_Driving_Events events = new User_Driving_Events();
                    events.Session_Id    = FirstEntry.Session_Id;
                    events.Event_Type_Id = Convert.ToInt32(EventType.Agressive_Turning);
                    events.Event_Time    = FirstEntry.TimeStamp;
                    Events.Add(events);
                }
                else
                if (Heading > 0 & Heading < 20)
                {
                    var laneChangeAlgo   = new LaneChange();
                    var laneChangeEvents = laneChangeAlgo.CheckLaneChange(DataChunkList);
                    foreach (var e in laneChangeEvents)
                    {
                        Events.Add(e);
                    }
                }
                FirstEntry = null;
                LastEntry  = null;
                DataChunkList.Clear();
            }

            return(Events);
        }
Ejemplo n.º 3
0
        public IList <User_Driving_Events> CheckLaneChange(IList <User_Driving_Data> data)
        {
            foreach (var x in data)
            {
                //starting with postive values
                if (x.User_Acceleration_X > eventThresholdPositve)
                {
                    if (isPositiveEventCreated)
                    {
                        if (x.User_Acceleration_X > safetyThresholdPositive)
                        {
                            eventAccelarations.Add(x.User_Acceleration_X);
                        }
                    }
                    else if (isNegativeEventCreated)
                    {
                        isNegativeEventCreated = false;
                        eventAccelarations.Add(x.User_Acceleration_X);
                        //events.Add(eventAccelarations);
                        User_Driving_Events LaneChangeEvent = new User_Driving_Events();
                        LaneChangeEvent.Session_Id    = x.Session_Id;
                        LaneChangeEvent.Event_Type_Id = Convert.ToInt32(EventType.Agressive_Lane_Change);
                        LaneChangeEvent.Event_Time    = x.TimeStamp;
                        eventsList.Add(LaneChangeEvent);
                    }
                    else if (!isPositiveEventCreated)
                    {
                        isPositiveEventCreated = true;
                        if (x.User_Acceleration_X > safetyThresholdPositive)
                        {
                            eventAccelarations.Add(x.User_Acceleration_X);
                        }
                    }
                    else if (!isNegativeEventCreated)
                    {
                    }
                }

                //starting with negative values
                if (x.User_Acceleration_X < eventThresholdNegative)
                {
                    if (isNegativeEventCreated)
                    {
                        if (x.User_Acceleration_X < safetyThresholdNegative)
                        {
                            eventAccelarations.Add(x.User_Acceleration_X);
                        }
                    }
                    else if (isPositiveEventCreated)
                    {
                        isPositiveEventCreated = false;
                        eventAccelarations.Add(x.User_Acceleration_X);
                        User_Driving_Events LaneChangeEvent = new User_Driving_Events();
                        LaneChangeEvent.Session_Id    = x.Session_Id;
                        LaneChangeEvent.Event_Type_Id = Convert.ToInt32(EventType.Agressive_Lane_Change);
                        LaneChangeEvent.Event_Time    = x.TimeStamp;
                        eventsList.Add(LaneChangeEvent);
                    }
                    else if (!isNegativeEventCreated)
                    {
                        isNegativeEventCreated = true;
                        if (x.User_Acceleration_X < safetyThresholdNegative)
                        {
                            eventAccelarations.Add(x.User_Acceleration_X);
                        }
                    }
                    else if (!isPositiveEventCreated)
                    {
                    }
                }
            }
            return(eventsList);
        }
Ejemplo n.º 4
0
        public IList <User_Driving_Events> GetSpeedData(IList <User_Driving_Data> aDriving_DataList)
        {
            //double CurrentSpeed = Driving_Data1.Speed;
            //double Speedlimit = Driving_Data1.Speed_Limit;


            List <User_Driving_Events> eventList = new List <User_Driving_Events>();

            List <SpeedResultTimer> unsafeTimer = new List <SpeedResultTimer>();
            string   sessionIdTemp = "";
            DateTime startTime     = DateTime.Now;
            DateTime?startTimer    = null;
            DateTime?finishTimer   = null;
            int      flag          = 0;

            foreach (User_Driving_Data aDriving_Data in aDriving_DataList)
            {
                if (aDriving_Data.Speed_Limit >= aDriving_Data.Speed)
                {
                    //flag = 0;
                    if (flag == 0)
                    {
                    }
                    else if (flag == 1)
                    {
                        flag = 0;
                    }
                    else if (flag == 2)
                    {
                        /////Unused ////////////////////////////////
                        //SpeedResultTimer aSpeedResultTimer = new SpeedResultTimer();
                        //aSpeedResultTimer.startTime = startTimer;
                        //aSpeedResultTimer.finishTime = finishTimer;
                        //aSpeedResultTimer.exceedTime = finishTimer.Value.Subtract(startTimer.Value);
                        //unsafeTimer.Add(aSpeedResultTimer);
                        ////////////////////////////////////////////
                        //int count = finishTimer.Value.Subtract(startTimer.Value).Seconds;
                        //if (count >= 5)
                        //{
                        flag          = 0;
                        sessionIdTemp = aDriving_Data.Session_Id;
                        User_Driving_Events aEvent = new User_Driving_Events();
                        aEvent.Event_Type_Id = (int)EventType.Speeding_Event;
                        aEvent.Event_Time    = startTime;
                        aEvent.Session_Id    = sessionIdTemp;
                        eventList.Add(aEvent);
                        //}
                    }
                }
                else
                {
                    //unsafe speed;
                    if (flag == 0)
                    {
                        startTime  = aDriving_Data.TimeStamp;
                        startTimer = DateTime.Now;
                        flag       = 1;
                    }
                    else if (flag == 1)
                    {
                        finishTimer = DateTime.Now;
                        flag        = 2;
                    }
                }
            }

            if (flag == 1)
            {
                User_Driving_Events aEvent = new User_Driving_Events();
                aEvent.Event_Type_Id = (int)EventType.Speeding_Event;
                aEvent.Event_Time    = startTime;
                aEvent.Session_Id    = sessionIdTemp;
                eventList.Add(aEvent);
            }

            return(eventList);
        }