public MOE.Common.Business.TMC.TMCInfo CreateMetric() { base.LogMetricRun(); MOE.Common.Models.Repositories.ISignalsRepository repository = MOE.Common.Models.Repositories.SignalsRepositoryFactory.Create(); Common.Models.Signal signal = repository.GetSignalBySignalID(SignalID); TmcInfo = new MOE.Common.Business.TMC.TMCInfo(); MOE.Common.Business.PlanCollection plans = new MOE.Common.Business.PlanCollection(StartDate, EndDate, SignalID); MOE.Common.Models.Repositories.ILaneTypeRepository ltr = MOE.Common.Models.Repositories.LaneTypeRepositoryFactory.Create(); List <Common.Models.LaneType> laneTypes = ltr.GetAllLaneTypes(); MOE.Common.Models.Repositories.IMovementTypeRepository mtr = MOE.Common.Models.Repositories.MovementTypeRepositoryFactory.Create(); List <Common.Models.MovementType> movementTypes = mtr.GetAllMovementTypes(); MOE.Common.Models.Repositories.IDirectionTypeRepository dtr = MOE.Common.Models.Repositories.DirectionTypeRepositoryFactory.Create(); List <Common.Models.DirectionType> directions = dtr.GetAllDirections(); CreateLaneTypeCharts(signal, "Vehicle", laneTypes, movementTypes, directions, plans, TmcInfo); CreateLaneTypeCharts(signal, "Exit", laneTypes, movementTypes, directions, plans, TmcInfo); CreateLaneTypeCharts(signal, "Bike", laneTypes, movementTypes, directions, plans, TmcInfo); return(TmcInfo); }
private void CreateLaneTypeCharts(Common.Models.Signal signal, string laneTypeDescription, List <Common.Models.LaneType> laneTypes, List <Common.Models.MovementType> movementTypes, List <Common.Models.DirectionType> directions, MOE.Common.Business.PlanCollection plans, MOE.Common.Business.TMC.TMCInfo tmcInfo) { foreach (Common.Models.DirectionType direction in directions) { List <Models.Approach> approaches = (from r in signal.Approaches where r.DirectionType.DirectionTypeID == direction.DirectionTypeID select r).ToList(); List <Models.Detector> DetectorsByDirection = new List <Models.Detector>(); foreach (Models.Approach a in approaches) { foreach (Models.Detector d in a.Detectors) { if (d.DetectorSupportsThisMetric(5)) { DetectorsByDirection.Add(d); } } } //Loop through the major movement types List <int> movementTypeIdsSorted = new List <int> { 3, 1, 2 }; foreach (int x in movementTypeIdsSorted) { Common.Models.LaneType lanetype = (from r in laneTypes where r.Description == laneTypeDescription select r).FirstOrDefault(); Common.Models.MovementType movementType = (from r in movementTypes where r.MovementTypeID == x select r).FirstOrDefault(); List <Models.Detector> DetectorsForChart = (from r in DetectorsByDirection where r.MovementType.MovementTypeID == movementType.MovementTypeID && r.LaneType.LaneTypeID == lanetype.LaneTypeID select r).ToList(); //movement type 1 is the thru movement. We have to add the thru/turn lanes to the thru movment count. if (x == 1) { List <Models.Detector> turnthrudetectors = (from r in DetectorsByDirection where (r.MovementType.MovementTypeID == 4 || r.MovementType.MovementTypeID == 5) && r.LaneType.LaneTypeID == lanetype.LaneTypeID select r).ToList(); if (turnthrudetectors != null && turnthrudetectors.Count > 0) { DetectorsForChart.AddRange(turnthrudetectors); } } if (DetectorsForChart.Count > 0) { MOE.Common.Business.TMC.TMCMetric TMCchart = new MOE.Common.Business.TMC.TMCMetric(StartDate, EndDate, signal, direction, DetectorsForChart, lanetype, movementType, this, tmcInfo); Chart chart = TMCchart.chart; SetSimplePlanStrips(plans, chart, StartDate); //Create the File Name string chartName = CreateFileName(); //Save an image of the chart chart.SaveImage(MetricFileLocation + chartName, System.Web.UI.DataVisualization.Charting.ChartImageFormat.Jpeg); //ReturnList.Add(MetricWebPath + chartName); tmcInfo.ImageLocations.Add(MetricWebPath + chartName); } } } }