public ZoneInfoSnapshot(
     ZonePoint point,
     IAreaZoneConsumption areaZoneConsumption,
     Func <IEnumerable <QueryResult <IZoneInfo, RelativeZoneInfoQuery> > > getNorthEastSouthWestFunc,
     TrafficDensity trafficDensity)
 {
     Point = point;
     AreaZoneConsumption        = areaZoneConsumption;
     _getNorthEastSouthWestFunc = getNorthEastSouthWestFunc;
     TrafficDensity             = trafficDensity;
 }
Example #2
0
 public RoadIntersections(
     TrafficDensity trafficDensity,
     DirectionalCellBitmap powerNsRoadEw,
     DirectionalCellBitmap railNsRoadEw,
     DirectionalCellBitmap waterNsRoadEw)
 {
     TrafficDensity = trafficDensity;
     _powerNsRoadEw = powerNsRoadEw;
     _railNsRoadEw  = railNsRoadEw;
     _waterNsRoadEw = waterNsRoadEw;
 }
Example #3
0
 public static RoadIntersections CreateFor(string suffix, TrafficDensity trafficDensity)
 {
     return(new EmbeddedBitmapExtractor()
            .GetBitmapsFromNamespace("Mirage.Urbanization.Tilesets.IntersectingZones.Road" + suffix)
            .ToArray()
            .Pipe(bitmaps =>
     {
         return new RoadIntersections(
             trafficDensity: trafficDensity,
             powerNsRoadEw: new DirectionalCellBitmap(
                 cellBitmapSet: new AnimatedCellBitmapSetLayers(
                     new AnimatedCellBitmapSet(
                         FramerateDelay.TrafficFramerate,
                         bitmaps
                         .Where(x => string.Equals(x.FileName, "powernsroadew", StringComparison.CurrentCultureIgnoreCase))
                         .Select(x => new CellBitmap(x.Bitmap))
                         .ToArray()
                         ),
                     null
                     )
                 ),
             railNsRoadEw: new DirectionalCellBitmap(
                 cellBitmapSet: new AnimatedCellBitmapSetLayers(
                     new AnimatedCellBitmapSet(
                         FramerateDelay.TrafficFramerate,
                         bitmaps
                         .Where(x => string.Equals(x.FileName, "railnsroadew", StringComparison.CurrentCultureIgnoreCase))
                         .Select(x => new CellBitmap(x.Bitmap))
                         .ToArray()
                         ),
                     null
                     )
                 ),
             waterNsRoadEw: new DirectionalCellBitmap(
                 cellBitmapSet: new AnimatedCellBitmapSetLayers(
                     new AnimatedCellBitmapSet(
                         FramerateDelay.TrafficFramerate,
                         new EmbeddedBitmapExtractor()
                         .GetBitmapsFromNamespace("Mirage.Urbanization.Tilesets.NetworkZones.Water.waternwes.png")
                         .Select(x => new CellBitmap(x.Bitmap))
                         .Single()
                         ),
                     new AnimatedCellBitmapSet(
                         FramerateDelay.TrafficFramerate,
                         bitmaps
                         .Where(x => string.Equals(x.FileName, "waternsroadew", StringComparison.CurrentCultureIgnoreCase))
                         .Select(x => new CellBitmap(x.Bitmap))
                         .ToArray()
                         )
                     )
                 ));
     }));
 }
Example #4
0
 /// <summary>
 /// 填充密度集合缓存
 /// </summary>
 /// <param name="memoryCache">缓存</param>
 /// <param name="density">密度数据</param>
 /// <returns>密度数据</returns>
 public static TrafficDensity FillDensity(this IMemoryCache memoryCache, TrafficDensity density)
 {
     if (density != null)
     {
         TrafficRegion region = memoryCache.GetRegion(density.DataId);
         if (region != null)
         {
             density.RegionName = region.RegionName;
         }
     }
     return(density);
 }
Example #5
0
        public static Dictionary <TrafficRegion, int> CreateData(IServiceProvider serviceProvider, List <DensityDevice> devices, List <DataCreateMode> modes, List <DateTime> startTimes, List <DateTime> endTimes, bool initDatabase = false)
        {
            if (initDatabase)
            {
                ResetDatabase(serviceProvider);
            }



            Dictionary <TrafficRegion, int> regions = new Dictionary <TrafficRegion, int>();

            for (int i = 0; i < startTimes.Count; ++i)
            {
                DateTime           minTime = TimePointConvert.CurrentTimePoint(BranchDbConvert.DateLevel, startTimes[i]);
                DateTime           maxTime = TimePointConvert.NextTimePoint(BranchDbConvert.DateLevel, minTime);
                DensityBranchBlock branch  = new DensityBranchBlock(serviceProvider);
                branch.Open(devices, minTime, maxTime);
                Random random = new Random();
                foreach (DensityDevice device in devices)
                {
                    foreach (var relation in device.DensityDevice_DensityChannels)
                    {
                        foreach (TrafficRegion region in relation.Channel.Regions)
                        {
                            int randomValue = random.Next(1, 1000);
                            if (modes[i] == DataCreateMode.Random)
                            {
                                regions[region] = randomValue;
                            }

                            int value = 1;
                            for (int m = 0; m < 1440; ++m)
                            {
                                DateTime dataTime = startTimes[i].AddMinutes(m);
                                if (dataTime > DateTime.Now)
                                {
                                    break;
                                }
                                if (dataTime >= startTimes[i] && dataTime < endTimes[i])
                                {
                                    TrafficDensity density;
                                    if (modes[i] == DataCreateMode.Fixed)
                                    {
                                        density = new TrafficDensity
                                        {
                                            MatchId  = $"{device.Ip}_{relation.Channel.ChannelIndex}_{region.RegionIndex}",
                                            DateTime = new DateTime(dataTime.Year, dataTime.Month, dataTime.Day, dataTime.Hour, dataTime.Minute, 0),
                                            Value    = 1
                                        };
                                    }
                                    else if (modes[i] == DataCreateMode.Sequence)
                                    {
                                        density = new TrafficDensity
                                        {
                                            MatchId  = $"{device.Ip}_{relation.Channel.ChannelIndex}_{region.RegionIndex}",
                                            DateTime = new DateTime(dataTime.Year, dataTime.Month, dataTime.Day, dataTime.Hour, dataTime.Minute, 0),
                                            Value    = value
                                        };
                                    }
                                    else
                                    {
                                        density = new TrafficDensity
                                        {
                                            MatchId  = $"{device.Ip}_{relation.Channel.ChannelIndex}_{region.RegionIndex}",
                                            DateTime = new DateTime(dataTime.Year, dataTime.Month, dataTime.Day, dataTime.Hour, dataTime.Minute, 0),
                                            Value    = randomValue
                                        };
                                    }
                                    branch.Post(density);
                                }
                                ++value;
                            }
                        }
                    }
                }

                branch.Close();
                if (i == startTimes.Count - 1)
                {
                    DateTime currentTime = TimePointConvert.CurrentTimePoint(BranchDbConvert.DateLevel);
                    if (minTime != currentTime)
                    {
                        using (DensityContext context = serviceProvider.GetRequiredService <DensityContext>())
                        {
                            context.ChangeDatabase(BranchDbConvert.GetTableName(minTime));
                        }
                        branch.SwitchBranch(maxTime, TimePointConvert.NextTimePoint(BranchDbConvert.DateLevel, maxTime));
                    }
                }
                else
                {
                    DateTime nextItem = TimePointConvert.CurrentTimePoint(BranchDbConvert.DateLevel, startTimes[i + 1]);
                    if (minTime != nextItem)
                    {
                        using (DensityContext context = serviceProvider.GetRequiredService <DensityContext>())
                        {
                            context.ChangeDatabase(BranchDbConvert.GetTableName(minTime));
                        }
                        branch.SwitchBranch(maxTime, TimePointConvert.NextTimePoint(BranchDbConvert.DateLevel, maxTime));
                    }
                }
            }

            return(regions);
        }
Example #6
0
        public void TestDensityTimeSpanBlock(int startYear, int startMonth, int startDay, int endYear, int endMonth, int endDay)
        {
            DateTime startDate = new DateTime(startYear, startMonth, startDay);
            DateTime endDate   = new DateTime(endYear, endMonth, endDay);
            int      days      = Convert.ToInt32((endDate - startDate).TotalDays + 1);

            DensityTimeSpanBlock         oneMinuteBlock  = new DensityTimeSpanBlock(DateTimeLevel.Minute, TestInit.ServiceProvider);
            BufferBlock <TrafficDensity> oneMinuteResult = new BufferBlock <TrafficDensity>();

            oneMinuteBlock.LinkTo(oneMinuteResult);

            DensityTimeSpanBlock         fiveMinuteBlock  = new DensityTimeSpanBlock(DateTimeLevel.FiveMinutes, TestInit.ServiceProvider);
            BufferBlock <TrafficDensity> fiveMinuteResult = new BufferBlock <TrafficDensity>();

            fiveMinuteBlock.LinkTo(fiveMinuteResult);

            DensityTimeSpanBlock         fifteenMinuteBlock  = new DensityTimeSpanBlock(DateTimeLevel.FifteenMinutes, TestInit.ServiceProvider);
            BufferBlock <TrafficDensity> fifteenMinuteResult = new BufferBlock <TrafficDensity>();

            fifteenMinuteBlock.LinkTo(fifteenMinuteResult);

            DensityTimeSpanBlock         sixtyMinuteBlock  = new DensityTimeSpanBlock(DateTimeLevel.Hour, TestInit.ServiceProvider);
            BufferBlock <TrafficDensity> sixtyMinuteResult = new BufferBlock <TrafficDensity>();

            sixtyMinuteBlock.LinkTo(sixtyMinuteResult);
            for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
            {
                for (int i = 0; i < 24 * 60 * 60; ++i)
                {
                    TrafficDensity flow = new TrafficDensity
                    {
                        DateTime = date.AddSeconds(i),
                        Value    = 3
                    };
                    oneMinuteBlock.InputBlock.Post(flow);
                    fiveMinuteBlock.InputBlock.Post(flow);
                    fifteenMinuteBlock.InputBlock.Post(flow);
                    sixtyMinuteBlock.InputBlock.Post(flow);
                }
            }

            oneMinuteBlock.InputBlock.Complete();
            oneMinuteBlock.WaitCompletion();
            fiveMinuteBlock.InputBlock.Complete();
            fiveMinuteBlock.WaitCompletion();
            fifteenMinuteBlock.InputBlock.Complete();
            fifteenMinuteBlock.WaitCompletion();
            sixtyMinuteBlock.InputBlock.Complete();
            sixtyMinuteBlock.WaitCompletion();

            oneMinuteResult.TryReceiveAll(out IList <TrafficDensity> oneMinuteDensities);
            Assert.AreEqual(days * 24 * 60, oneMinuteDensities.Count);
            for (int i = 0; i < oneMinuteDensities.Count; ++i)
            {
                Assert.AreEqual(startDate.AddMinutes(i), oneMinuteDensities[i].DateTime);
                Assert.AreEqual(3, oneMinuteDensities[i].Value);
            }

            fiveMinuteResult.TryReceiveAll(out IList <TrafficDensity> fiveDensities);
            Assert.AreEqual(days * 24 * 60 / 5, fiveDensities.Count);
            for (int i = 0; i < fiveDensities.Count; ++i)
            {
                Assert.AreEqual(startDate.AddMinutes(i * 5), fiveDensities[i].DateTime);
                Assert.AreEqual(3, fiveDensities[i].Value);
            }

            fifteenMinuteResult.TryReceiveAll(out IList <TrafficDensity> fifteenDensities);
            Assert.AreEqual(days * 24 * 60 / 15, fifteenDensities.Count);
            for (int i = 0; i < fifteenDensities.Count; ++i)
            {
                Assert.AreEqual(startDate.AddMinutes(i * 15), fifteenDensities[i].DateTime);
                Assert.AreEqual(3, fifteenDensities[i].Value);
            }

            sixtyMinuteResult.TryReceiveAll(out IList <TrafficDensity> sixtyDensities);
            Assert.AreEqual(days * 24, sixtyDensities.Count);
            for (int i = 0; i < sixtyDensities.Count; ++i)
            {
                Assert.AreEqual(startDate.AddHours(i), sixtyDensities[i].DateTime);
                Assert.AreEqual(3, sixtyDensities[i].Value);
            }
        }