Пример #1
0
        public void UpdateSegmentsForSegmentBetweenLocations()
        {
            var             network = GetNetwork();
            NetworkCoverage route   = new NetworkCoverage
            {
                Network = network,
                SegmentGenerationMethod = SegmentGenerationMethod.SegmentBetweenLocations
            };

            // [---------------------------------------------------]
            //      5                        60
            //            40
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 5.0));
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 60.0));
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 40.0));

            // expect location to be sorted uysing offset
            // [    5-----40
            //            40-----------------60

            Assert.AreEqual(2, route.Segments.Values.Count);
            Assert.AreEqual(5.0, route.Segments.Values[0].Chainage);
            Assert.AreEqual(40.0, route.Segments.Values[0].EndChainage);
            Assert.AreEqual(40.0, route.Segments.Values[1].Chainage);
            Assert.AreEqual(60.0, route.Segments.Values[1].EndChainage);
        }
Пример #2
0
        public void NetworkCoverageLocationsAreUpdatedWhenBranchGeometryChanges()
        {
            var network         = RouteHelperTest.GetSnakeHydroNetwork(false, new Point(0, 0), new Point(100, 0));
            var networkCoverage = new NetworkCoverage {
                Network = network
            };

            //define a point halfway the branch
            IBranch firstBranch = network.Branches[0];

            networkCoverage[new NetworkLocation(firstBranch, 50)] = 2.0;

            //make sure we are 'initialized' (CODE SMELL SNIFF UGH)
            Assert.AreEqual(1, networkCoverage.Locations.Values.Count);
            //change the branch geometry
            firstBranch.Length   = 200;
            firstBranch.Geometry = new LineString(new[]
            {
                new Coordinate(0, 0),
                new Coordinate(200, 0)
            });

            //assert the coverage scaled along..so the point should now be at 100
            Assert.AreEqual(100, networkCoverage.Locations.Values[0].Offset);
        }
Пример #3
0
        public void SegmentsForTimeFilteredCoverage()
        {
            var network = CreateNetwork();

            var dateTime = DateTime.Now;

            var networkCoverage = new NetworkCoverage("test", true)
            {
                Network = network
            };
            // test for defaultvalue

            // set values for only one t.
            INetworkLocation nl11 = new NetworkLocation(network.Branches[0], 0.0);
            INetworkLocation nl12 = new NetworkLocation(network.Branches[0], 100.0);
            INetworkLocation nl13 = new NetworkLocation(network.Branches[1], 100.0);

            networkCoverage[dateTime, nl11] = 0.1;
            networkCoverage[dateTime, nl12] = 0.2;
            networkCoverage[dateTime, nl13] = 0.3;

            //action! filter on t1
            var filtered = (INetworkCoverage)networkCoverage.FilterTime(dateTime);

            //segments should not be affected
            Assert.AreEqual(networkCoverage.Segments.Values.Count, filtered.Segments.Values.Count);
        }
        public void WorksWithTimeDependentNetworkCoverage()
        {
            var timeNetworkCoverage = new NetworkCoverage("timedep", true);
            timeNetworkCoverage.Network = network;

            var t1 = new DateTime(2000, 1, 1);
            var t2 = new DateTime(2000, 1, 2);

            timeNetworkCoverage[t1, new NetworkLocation(network.Branches[0], 1)] = 10.0;
            timeNetworkCoverage[t1, new NetworkLocation(network.Branches[1], 2)] = 20.0;
            timeNetworkCoverage[t2, new NetworkLocation(network.Branches[0], 1)] = 30.0;
            timeNetworkCoverage[t2, new NetworkLocation(network.Branches[1], 2)] = 40.0;

            var timeCoverageBindingList = new NetworkCoverageBindingList(timeNetworkCoverage);

            Assert.AreEqual(4, timeCoverageBindingList.ColumnNames.Count());

            //columns shifted
            Assert.AreEqual("Location_Branch", timeCoverageBindingList.GetItemProperties(null)[1].Name);

            var newOffset = 1.5;
            Assert.AreNotEqual(newOffset, timeNetworkCoverage.Locations.Values[0].Chainage);

            timeCoverageBindingList[0][2] = newOffset;

            timeCoverageBindingList[0].EndEdit(); //commit changes

            Assert.AreEqual(newOffset, timeNetworkCoverage.Locations.Values[0].Chainage);

            var gridView = new DataGridView { DataSource = timeCoverageBindingList };
            
            WindowsFormsTestHelper.ShowModal(gridView);
        }
        public void NextValueOnNextBranch()
        {
            var network = new Network();

            var node1 = new Node("node1");
            var node2 = new Node("node2");
            var node3 = new Node("node3");

            network.Nodes.Add(node1);
            network.Nodes.Add(node2);
            network.Nodes.Add(node3);

            var branch1 = new Branch("branch1", node1, node2, 100.0);
            var branch2 = new Branch("branch2", node1, node2, 200.0);

            network.Branches.Add(branch1);
            network.Branches.Add(branch2);

            // create network coverate
            var networkCoverage = new NetworkCoverage {
                Network = network
            };

            NetworkLocationNextValueGenerator networkLocationNextValueGenerator = new NetworkLocationNextValueGenerator(networkCoverage);

            networkCoverage.Locations.Values.Add(new NetworkLocation(branch1, 100));

            Assert.AreEqual(new NetworkLocation(branch1, 101), networkLocationNextValueGenerator.GetNextValue());
        }
Пример #6
0
        public void GeometryForTimeFilteredCoverage()
        {
            var network = RouteHelperTest.GetSnakeHydroNetwork(false, new Point(0, 0), new Point(100, 0), new Point(100, 200));

            var dateTime = DateTime.Now;

            var networkCoverage = new NetworkCoverage("test", true)
            {
                Network = network
            };
            // test for defaultvalue

            // set values for only one t.
            INetworkLocation nl11 = new NetworkLocation(network.Branches[0], 0.0);
            INetworkLocation nl12 = new NetworkLocation(network.Branches[0], 100.0);
            INetworkLocation nl13 = new NetworkLocation(network.Branches[1], 100.0);

            networkCoverage[dateTime, nl11] = 0.1;
            networkCoverage[dateTime, nl12] = 0.2;
            networkCoverage[dateTime, nl13] = 0.3;

            //action! filter on t1
            var filtered = networkCoverage.FilterTime(dateTime);

            //segments should not be affected
            Assert.AreEqual(networkCoverage.Geometry.EnvelopeInternal, filtered.Geometry.EnvelopeInternal);
        }
        public void ShowNetworkCoverageAsLayerWithNoneSegmentationType()
        {
            // create network
            var network = MapTestHelper.CreateMockNetwork();

            mocks.ReplayAll();

            var networkCoverage = new NetworkCoverage {
                Network = network, SegmentGenerationMethod = SegmentGenerationMethod.None
            };
            var networkCoverageLayer = new NetworkCoverageGroupLayer {
                NetworkCoverage = networkCoverage
            };

            // set values
            var branch1 = network.Branches[0];
            var branch2 = network.Branches[1];

            networkCoverage[new NetworkLocation(branch1, 4.0)]  = 0.1;
            networkCoverage[new NetworkLocation(branch1, 16.0)] = 0.2;
            networkCoverage[new NetworkLocation(branch2, 4.0)]  = 0.3;
            networkCoverage[new NetworkLocation(branch2, 12.0)] = 0.4;
            networkCoverage[new NetworkLocation(branch2, 16.0)] = 0.5;

            var map = new Map(new Size(1000, 1000));

            map.Layers.Add(networkCoverageLayer);

            MapTestHelper.ShowModal(map);
        }
Пример #8
0
        public void Evaluate()
        {
            // create network
            var network = new Network();

            var node1 = new Node("node1");
            var node2 = new Node("node2");

            network.Nodes.Add(node1);
            network.Nodes.Add(node2);

            var branch1 = new Branch("branch1", node1, node2, 100.0)
            {
                Geometry = GeometryFromWKT.Parse("LINESTRING (0 0, 100 0)")
            };

            network.Branches.Add(branch1);

            // create network coverage
            INetworkCoverage networkCoverage = new NetworkCoverage {
                Network = network
            };

            networkCoverage.Locations.InterpolationType = ApproximationType.Linear;

            networkCoverage[new NetworkLocation(network.Branches[0], 0.0)]   = 0;
            networkCoverage[new NetworkLocation(network.Branches[0], 100.0)] = 10;

            // evaluate
            var value = networkCoverage.Evaluate <double>(50.0, 0.0);

            value.Should().Be.EqualTo(5); // linear interpolation
        }
Пример #9
0
        private void AddNetworkCoverageAndTool()
        {
            INetworkCoverage networkCoverage = new NetworkCoverage {
                Network = network
            };

            networkCoverageGroupLayer.NetworkCoverage = networkCoverage;

            ((FeatureCollection)networkCoverageGroupLayer.LocationLayer.DataSource).AddNewFeatureFromGeometryDelegate =
                AddFeatureFromGeometryDelegate;

/* no references to DeltaShell, TODO: move LayerPropertiesEditor into SharpMap.UI
 *          mapControl.MouseDoubleClick += delegate
 *          {
 *              var dialog = new LayerPropertiesEditorDialog(networkCoverageLayer.SegmentLayer);
 *              dialog.Show(mapControl);
 *          };
 */

            mapControl.Map.Layers.Add(networkCoverageGroupLayer);

            var networkCoverageTool = new NewNetworkFeatureTool(l => l.Equals(networkCoverageGroupLayer.LocationLayer), "new location");

            mapControl.Tools.Add(networkCoverageTool);

            networkCoverageGroupLayer.LocationLayer.FeatureEditor.SnapRules.Add(new SnapRule
            {
                SnapRole     = SnapRole.FreeAtObject,
                Obligatory   = true,
                PixelGravity = 40
            });
            return;
        }
Пример #10
0
        public void UpdateSegmentsForSegmentBetweenLocationsReversedForRouteBetweenLocation()
        {
            var             network = GetNetwork();
            NetworkCoverage route   = new NetworkCoverage
            {
                Network = network,
                SegmentGenerationMethod = SegmentGenerationMethod.RouteBetweenLocations
            };

            route.Locations.IsAutoSorted = false;
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 60.0));
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 40.0));
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 5.0));

            // expect location not to be sorted
            // [    60-----40
            //             40-----------------5
            //NetworkCoverageHelper.UpdateSegments(route);
            Assert.AreEqual(2, route.Segments.Values.Count);
            Assert.AreEqual(60.0, route.Segments.Values[0].Chainage);
            Assert.AreEqual(40.0, route.Segments.Values[0].EndChainage);
            Assert.IsFalse(route.Segments.Values[0].DirectionIsPositive);

            Assert.AreEqual(40.0, route.Segments.Values[1].Chainage);
            Assert.AreEqual(5.0, route.Segments.Values[1].EndChainage);
            Assert.IsFalse(route.Segments.Values[1].DirectionIsPositive);
        }
Пример #11
0
        public void GenerateSegmentPerLocation()
        {
            var network = CreateNetwork();

            var networkCoverage = new NetworkCoverage
            {
                Network = network,
                SegmentGenerationMethod = SegmentGenerationMethod.SegmentPerLocation
            };

            networkCoverage[new NetworkLocation(network.Branches[0], 10.0)] = 0.1;
            networkCoverage[new NetworkLocation(network.Branches[0], 50.0)] = 0.5;
            networkCoverage[new NetworkLocation(network.Branches[0], 90.0)] = 0.9;

            Assert.AreEqual(3, networkCoverage.Segments.Values.Count);
            // [--10--------------50-------------------------------90---]
            // [----------][-----------------------][-------------------]
            // 0          30                       70                  100
            Assert.AreEqual(0, networkCoverage.Segments.Values[0].Offset, 1.0e-6);
            Assert.AreEqual(30, networkCoverage.Segments.Values[0].EndOffset, 1.0e-6);
            Assert.AreEqual(30, networkCoverage.Segments.Values[1].Offset, 1.0e-6);
            Assert.AreEqual(70, networkCoverage.Segments.Values[1].EndOffset, 1.0e-6);
            Assert.AreEqual(70, networkCoverage.Segments.Values[2].Offset, 1.0e-6);
            Assert.AreEqual(100, networkCoverage.Segments.Values[2].EndOffset, 1.0e-6);
        }
Пример #12
0
        public void ShowNetworkCoverageAsRoute()
        {
            // create network
            var network = MapTestHelper.CreateMockNetwork();

            mocks.ReplayAll();

            var networkCoverage = new NetworkCoverage { Network = network, SegmentGenerationMethod = SegmentGenerationMethod.RouteBetweenLocations };

            var networkCoverageLayer = new NetworkCoverageLayer {NetworkCoverage = networkCoverage};

            NetworkCoverageLayerHelper.SetupRouteNetworkCoverageLayerTheme(networkCoverageLayer, null);

            // set values
            var branch1 = network.Branches[0];
            var branch2 = network.Branches[1];
            networkCoverage[new NetworkLocation(branch1, 4.0)] = 0.1;
            networkCoverage[new NetworkLocation(branch1, 16.0)] = 0.2;
            networkCoverage[new NetworkLocation(branch2, 4.0)] = 0.3;
            networkCoverage[new NetworkLocation(branch2, 12.0)] = 0.4;
            networkCoverage[new NetworkLocation(branch2, 16.0)] = 0.5;

            var map = new Map(new Size(1000, 1000));
            map.Layers.Add(networkCoverageLayer);

            // add branch layer
            var branchLayer = new VectorLayer {DataSource = new FeatureCollection{Features = (IList) network.Branches} };
            branchLayer.Style.Outline.Width = 25;
            branchLayer.Style.Outline.Color = Pens.LightGray.Color;
            map.Layers.Add(branchLayer);

            MapTestHelper.Show(map);
        }
        public void GetLocationsForAnotherRoute()
        {
            var network = CreateThreeNodesNetwork();
            var branch  = (Branch)network.Branches[0];

            var source = new NetworkCoverage {
                Network = network
            };

            source[new NetworkLocation(branch, 10.0)] = 10.0;
            source[new NetworkLocation(branch, 50.0)] = 30.0;
            source[new NetworkLocation(branch, 60.0)] = 20.0;
            source[new NetworkLocation(branch, 80.0)] = 10.0;

            //90-->0-->80
            var route = RouteHelper.CreateRoute(new[] { new NetworkLocation(branch, 90.0)
                                                        , new NetworkLocation(branch, 0.0), new NetworkLocation(branch, 80) });
            var expectedLocations = new[]
            {
                new NetworkLocation(branch, 90.0)
                , new NetworkLocation(branch, 80.0)
                , new NetworkLocation(branch, 60.0)
                , new NetworkLocation(branch, 50.0)
                , new NetworkLocation(branch, 10.0)
                , new NetworkLocation(branch, 0)
                , new NetworkLocation(branch, 10.0)
                , new NetworkLocation(branch, 50.0)
                , new NetworkLocation(branch, 60.0)
                , new NetworkLocation(branch, 80.0)
            };

            var actualLocations = RouteHelper.GetLocationsInRoute(source, route);

            Assert.AreEqual(expectedLocations, actualLocations);
        }
Пример #14
0
        public void ShowNetworkCoverageAsLayer()
        {
            // create network
            var network = MapTestHelper.CreateMockNetwork();

            mocks.ReplayAll();

            var networkCoverage = new NetworkCoverage {
                Network = network
            };
            var networkCoverageLayer = new NetworkCoverageLayer {
                NetworkCoverage = networkCoverage
            };

            // set values
            var branch1 = network.Branches[0];
            var branch2 = network.Branches[1];

            networkCoverage[new NetworkLocation(branch1, 4.0)]  = 0.1;
            networkCoverage[new NetworkLocation(branch1, 16.0)] = 0.2;
            networkCoverage[new NetworkLocation(branch2, 4.0)]  = 0.3;
            networkCoverage[new NetworkLocation(branch2, 12.0)] = 0.4;
            networkCoverage[new NetworkLocation(branch2, 16.0)] = 0.5;

            var map = new Map(new Size(1000, 1000));

            map.Layers.Add(networkCoverageLayer);

            MapTestHelper.Show(map);
        }
Пример #15
0
        public void AddCoverages()
        {
            var network = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0),
                                                          new Point(100, 100));
            var location  = new NetworkLocation(network.Branches[0], 0);
            var coverageA = new NetworkCoverage {
                Network = network
            };
            var coverageB = new NetworkCoverage {
                Network = network
            };

            //add a uniform coverage B to a
            coverageB.DefaultValue = 100.0;

            coverageA[location] = 40.0;
            coverageA.Add(coverageB);

            Assert.AreEqual(140.0, coverageA[location]);

            //define a value for B so it no longer uses default value
            coverageB[location] = -20.0;

            //should substract the -20 now
            coverageA.Add(coverageB);
            Assert.AreEqual(120.0, coverageA[location]);
        }
Пример #16
0
        public void UpdateSegmentsForSegmentBetweenLocations()
        {
            var network = GetNetwork();
            NetworkCoverage route = new NetworkCoverage
            {
                Network = network,
                SegmentGenerationMethod = SegmentGenerationMethod.SegmentBetweenLocations
            };
            // [---------------------------------------------------]
            //      5                        60
            //            40
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 5.0));
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 60.0));
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 40.0));

            // expect location to be sorted uysing offset
            // [    5-----40
            //            40-----------------60

            Assert.AreEqual(2, route.Segments.Values.Count);
            Assert.AreEqual(5.0, route.Segments.Values[0].Chainage);
            Assert.AreEqual(40.0, route.Segments.Values[0].EndChainage);
            Assert.AreEqual(40.0, route.Segments.Values[1].Chainage);
            Assert.AreEqual(60.0, route.Segments.Values[1].EndChainage);
        }
Пример #17
0
        public void SubstractTimeDependentCoverages()
        {
            var network = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0),
                                                          new Point(100, 100));
            var location  = new NetworkLocation(network.Branches[0], 0);
            var coverageA = new NetworkCoverage {
                Network = network, IsTimeDependent = true
            };
            var coverageB = new NetworkCoverage {
                Network = network, IsTimeDependent = true
            };

            var dates = new[] { new DateTime(2000, 1, 1), new DateTime(2001, 1, 1) };

            //add a uniform coverage B to a
            coverageB.DefaultValue = 100.0;
            coverageB.Time.SetValues(dates);

            coverageA[dates[0], location] = 40.0;
            coverageA[dates[1], location] = 10.0;
            coverageA.Substract(coverageB);

            Assert.AreEqual(-60.0, coverageA[dates[0], location]);
            Assert.AreEqual(-90.0, coverageA[dates[1], location]);
        }
Пример #18
0
        public void AnotherInterpolationNoTime()
        {
            var network = CreateNetwork();

            INetworkCoverage networkCoverage = new NetworkCoverage {
                Network = network
            };

            networkCoverage[new NetworkLocation(network.Branches[0], 10.0)] = 0.1;
            networkCoverage[new NetworkLocation(network.Branches[0], 90.0)] = 0.9;

            networkCoverage.Locations.ExtrapolationType = ApproximationType.Constant;
            networkCoverage.Locations.InterpolationType = ApproximationType.Linear;

            // at the exact locations
            Assert.AreEqual(0.1, networkCoverage.Evaluate(new NetworkLocation(network.Branches[0], 10.0)));
            Assert.AreEqual(0.9, networkCoverage.Evaluate(new NetworkLocation(network.Branches[0], 90.0)));

            // at start and end outside the locations
            Assert.AreEqual(0.10, networkCoverage.Evaluate(new NetworkLocation(network.Branches[0], 5.0)));
            Assert.AreEqual(0.90, networkCoverage.Evaluate(new NetworkLocation(network.Branches[0], 95.0)), 1e-6);

            // in between the 2 locations
            Assert.AreEqual(0.35, networkCoverage.Evaluate(new NetworkLocation(network.Branches[0], 35.0)), 1e-6);
        }
Пример #19
0
        public void PropertyChangedIsFiredOnValuesAdd()
        {
            var network = MapTestHelper.CreateMockNetwork();

            var networkCoverage = new NetworkCoverage {
                Network = network
            };
            var networkCoverageFeatureCollection = new NetworkCoverageFeatureCollection
            {
                NetworkCoverage            = networkCoverage,
                NetworkCoverageFeatureType = NetworkCoverageFeatureType.Locations
            };

            var callCount = 0;


            ((INotifyPropertyChanged)networkCoverageFeatureCollection).PropertyChanged += (s, e) => { callCount++; };

            networkCoverage.Locations.Values.Add(new NetworkLocation {
                Branch = network.Branches[0], Offset = 0.0
            });

            //2 one for component, one for argument
            Assert.AreEqual(2, callCount);
        }
Пример #20
0
        public void CreateFeatureCollectionForNetworkLocationsAndSegments()
        {
            var network = MapTestHelper.CreateMockNetwork();

            var networkCoverage = new NetworkCoverage {
                Network = network
            };
            var networkLocationFeatureProvider = new NetworkCoverageFeatureCollection
            {
                NetworkCoverage            = networkCoverage,
                NetworkCoverageFeatureType = NetworkCoverageFeatureType.Locations
            };
            var segmentFeatureProvider = new NetworkCoverageFeatureCollection
            {
                NetworkCoverage            = networkCoverage,
                NetworkCoverageFeatureType = NetworkCoverageFeatureType.Segments
            };

            networkCoverage.Locations.Values.Add(new NetworkLocation {
                Branch = network.Branches[0], Offset = 0.0
            });

            Assert.AreEqual(1, networkLocationFeatureProvider.Features.Count);
            Assert.AreEqual(1, segmentFeatureProvider.Features.Count);
        }
        public void SetUp()
        {
            network = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0), new Point(100, 100));

            networkCoverage = new NetworkCoverage { Network = network };
            
            networkCoverage.Locations.NextValueGenerator = new NetworkLocationNextValueGenerator(networkCoverage);

            networkCoverageBindingList = new NetworkCoverageBindingList(networkCoverage);
        }
Пример #22
0
        public void FilterCoverageDoesNotReturnCoverageWhenReduced()
        {
            NetworkCoverage coverage = new NetworkCoverage();

            coverage.IsTimeDependent = true;
            //fix the coverage on a location so we have a funtion with only one argument...time.
            var filtered = coverage.Filter(new VariableReduceFilter(coverage.Locations));

            Assert.IsFalse(filtered is INetworkCoverage);
        }
Пример #23
0
        public void AddingTimeSlicesShouldBeFastUsingMemoryStore()
        {
            var random = new Random();
            //50 branches 
            var network = RouteHelperTest.GetSnakeNetwork(false, 50);
            //10 offsets
            var offsets = new[] { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 };

            //500 locations
            var locations = offsets.SelectMany(o => network.Branches, (o, b) => new NetworkLocation(b, o)).ToList();

            var values = (from o in locations
                          select (double)random.Next(100) / 10).ToList();

            //setup the coverage with fixed size locations
            var networkCoverage = new NetworkCoverage() { IsTimeDependent = true, Network = network };
            networkCoverage.Locations.FixedSize = 500;
            networkCoverage.Locations.SetValues(locations.OrderBy(l => l));

            var startTime = new DateTime(2000, 1, 1);
            // add 10000 slices in time..
            var times = from i in Enumerable.Range(1, 1000)
                        select startTime.AddDays(i);

            int outputTimeStepIndex = 0;
            //write like a flowmodel ..
            TestHelper.AssertIsFasterThan(2000, () =>
                                                    {
                                                        foreach (var t in times)
                                                        {
                                                            //high performance writing. Using indexes instead of values.
                                                            var locationsIndexFilter =
                                                                new VariableIndexRangeFilter(networkCoverage.Locations,
                                                                                             0,
                                                                                             networkCoverage.Locations.
                                                                                                 FixedSize - 1);
                                                            //current timestep starts at 1 and is increased before outputvalues are set now..hence -2 to get a 0 for the 1st
                                                            //int timeIndex = currentTimeStep - 1;

                                                            var timeIndexFilter =
                                                                new VariableIndexRangeFilter(networkCoverage.Time,
                                                                                             outputTimeStepIndex);

                                                            networkCoverage.Time.AddValues(new[] { t });
                                                            networkCoverage.SetValues(values,
                                                                                      new[]
                                                                                          {
                                                                                              locationsIndexFilter,
                                                                                              timeIndexFilter
                                                                                          });
                                                            outputTimeStepIndex++;
                                                        }
                                                    });
        }
Пример #24
0
        public void AddCoveragesThrowsExceptionIfNetworksDontMatch()
        {
            var coverageA = new NetworkCoverage {
                Network = new Network()
            };
            var coverageB = new NetworkCoverage {
                Network = new Network()
            };

            coverageA.Add(coverageB);
        }
        public void ShowNetworkCoverageAsLayerWithSegmentBetweenLocationsFullyCoveredType()
        {
            // create network
            var network = MapTestHelper.CreateMockNetwork();

            mocks.ReplayAll();

            var networkCoverage = new NetworkCoverage
            {
                Network                 = network,
                IsTimeDependent         = true,
                SegmentGenerationMethod = SegmentGenerationMethod.SegmentBetweenLocationsFullyCovered
            };
            var networkCoverageLayer = new NetworkCoverageGroupLayer {
                NetworkCoverage = networkCoverage
            };
            var time1 = new DateTime(2010, 1, 1);

            // set values
            var branch1 = network.Branches[0];
            var branch2 = network.Branches[1];

            networkCoverage[time1, new NetworkLocation(branch1, 0.0)]   = 0.1;
            networkCoverage[time1, new NetworkLocation(branch1, 10.0)]  = 0.2;
            networkCoverage[time1, new NetworkLocation(branch1, 50.0)]  = 0.3;
            networkCoverage[time1, new NetworkLocation(branch1, 100.0)] = 0.4;

            // no coverage point for branch2 offset 0
            // the fully covered option will look for the begin node point
            // on other branches (branch 1 offset 100 == node2 == branch2 offset 0)

            networkCoverage[time1, new NetworkLocation(branch2, 20.0)]  = 0.5;
            networkCoverage[time1, new NetworkLocation(branch2, 40.0)]  = 0.6;
            networkCoverage[time1, new NetworkLocation(branch2, 60.0)]  = 0.7;
            networkCoverage[time1, new NetworkLocation(branch2, 100.0)] = 0.8;

            var time2 = new DateTime(2010, 1, 2);

            foreach (var location in networkCoverage.Locations.Values)
            {
                networkCoverage[time2, location] = (double)networkCoverage[time1, location] * 2;
            }

            networkCoverage.Locations.InterpolationType = InterpolationType.Constant;
            networkCoverageLayer.SegmentLayer.LabelLayer.LabelColumn = "SegmentNumber";
            networkCoverageLayer.SegmentLayer.LabelLayer.Visible     = true;

            var map = new Map(new Size(1000, 1000));

            map.Layers.Add(networkCoverageLayer);

            networkCoverageLayer.SetCurrentTimeSelection(time2, time2);
            MapTestHelper.ShowModal(map);
        }
Пример #26
0
        public void DefaultValueTest()
        {
            var network = CreateNetwork();

            INetworkCoverage networkCoverage = new NetworkCoverage {
                Network = network, DefaultValue = 0.33
            };
            INetworkLocation nl11 = new NetworkLocation(network.Branches[0], 0.0);

            // no network location set in networkCoverage expect the default value to return
            Assert.AreEqual(0.33, networkCoverage.Evaluate(nl11));
        }
Пример #27
0
        public void SetUp()
        {
            network = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0), new Point(100, 100));

            networkCoverage = new NetworkCoverage {
                Network = network
            };

            networkCoverage.Locations.NextValueGenerator = new NetworkLocationNextValueGenerator(networkCoverage);

            networkCoverageBindingList = new NetworkCoverageBindingList(networkCoverage);
        }
Пример #28
0
        public void ExtractTimeSliceUseLocationsFromTarget()
        {
            var network         = GetNetwork();
            var networkCoverage = new NetworkCoverage("test", true)
            {
                Network = network
            };

            DateTime[] dateTimes = new DateTime[10];

            for (int i = 0; i < 10; i++)
            {
                dateTimes[i] = new DateTime(2000, 1, 1, 1, /* minute */ i, 0);
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[0], 10.0)] = 10.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[0], 50.0)] = 50.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[0], 90.0)] = 90.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[1], 10.0)] = 110.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[1], 50.0)] = 150.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[1], 90.0)] = 190.0 + i;
            }

            var slice = new NetworkCoverage("slice", false)
            {
                Network = network
            };

            Assert.AreEqual(false, slice.IsTimeDependent);
            slice[new NetworkLocation(network.Branches[0], 20.0)] = 2;
            slice[new NetworkLocation(network.Branches[0], 80.0)] = 8;
            slice[new NetworkLocation(network.Branches[1], 20.0)] = 12;
            slice[new NetworkLocation(network.Branches[1], 80.0)] = 18;

            NetworkCoverageHelper.ExtractTimeSlice(networkCoverage, slice,
                                                   new DateTime(2000, 1, 1, 1, /* minute */ 0, 0), false);

            // expected results at time step 0 are 20 80 120 180; this are interpolated values
            Assert.AreEqual(4, slice.Locations.Values.Count);
            Assert.AreEqual(10 /*20*/, slice.Evaluate(new NetworkLocation(network.Branches[0], 20.0)), 1.0e-6);
            Assert.AreEqual(50 /*80*/, slice.Evaluate(new NetworkLocation(network.Branches[0], 80.0)), 1.0e-6);
            Assert.AreEqual(90 /*120*/, slice.Evaluate(new NetworkLocation(network.Branches[1], 20.0)), 1.0e-6);
            Assert.AreEqual(110 /*180*/, slice.Evaluate(new NetworkLocation(network.Branches[1], 80.0)), 1.0e-6);

            NetworkCoverageHelper.ExtractTimeSlice(networkCoverage, slice,
                                                   new DateTime(2000, 1, 1, 1, /* minute */ 3, 0), false);

            // expected results at time step 3 are 23 83 123 183; this are interpolated values
            Assert.AreEqual(4, slice.Locations.Values.Count);
            Assert.AreEqual(13 /*23*/, slice.Evaluate(new NetworkLocation(network.Branches[0], 20.0)), 1.0e-6);
            Assert.AreEqual(53 /*83*/, slice.Evaluate(new NetworkLocation(network.Branches[0], 80.0)), 1.0e-6);
            Assert.AreEqual(93 /*123*/, slice.Evaluate(new NetworkLocation(network.Branches[1], 20.0)), 1.0e-6);
            Assert.AreEqual(113 /*183*/, slice.Evaluate(new NetworkLocation(network.Branches[1], 80.0)), 1.0e-6);
        }
Пример #29
0
        public void LayerCollectionIsReadOnly()
        {
            //create a layer with a coverate
            NetworkCoverage networkCoverage = GetNetworkCoverage();

            networkCoverage.Components[0].Name = "kees";

            var networkCoverageLayer = new NetworkCoverageGroupLayer {
                NetworkCoverage = networkCoverage
            };

            Assert.IsTrue(networkCoverageLayer.HasReadOnlyLayersCollection);
        }
Пример #30
0
        public void SubstractComplexCoveragesFromClonedNetworks()
        {
            var network   = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0), new Point(200, 0));
            var blNetwork = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0), new Point(100, 100));

            var waterLevel = new NetworkCoverage {
                Network = network
            };
            var bedLevel = new NetworkCoverage {
                Network = blNetwork
            };

            var branchA   = network.Branches[0];
            var branchB   = network.Branches[1];
            var blBranchB = blNetwork.Branches[1];

            var locationA1 = new NetworkLocation(branchA, 0);
            var locationA2 = new NetworkLocation(branchA, branchA.Length / 2);
            var locationA3 = new NetworkLocation(branchA, branchA.Length);
            var locationB1 = new NetworkLocation(branchB, 0);
            var locationB2 = new NetworkLocation(branchB, branchB.Length / 2);
            var locationB3 = new NetworkLocation(branchB, branchB.Length);

            var blLocationB1 = new NetworkLocation(blBranchB, 0);
            var blLocationB2 = new NetworkLocation(blBranchB, blBranchB.Length / 2);
            var blLocationB3 = new NetworkLocation(blBranchB, blBranchB.Length);

            //add a uniform coverage B to a
            bedLevel.DefaultValue  = 100.0;
            bedLevel[blLocationB1] = 100.0;
            bedLevel[blLocationB2] = 120.0;
            bedLevel[blLocationB3] = 80.0;

            waterLevel[locationA1] = 140.0;
            waterLevel[locationA2] = 110.0;
            waterLevel[locationA3] = 90.0;
            waterLevel[locationB1] = 120.0;
            waterLevel[locationB2] = 130.0;
            waterLevel[locationB3] = 140.0;

            waterLevel.Substract(bedLevel);

            var waterDepth = waterLevel;

            Assert.AreEqual(40.0, waterDepth[locationA1]);
            Assert.AreEqual(10.0, waterDepth[locationA2]);
            Assert.AreEqual(-10.0, waterDepth[locationA3]);
            Assert.AreEqual(20.0, waterDepth[locationB1]);
            Assert.AreEqual(130.0, waterDepth[locationB2]);
            Assert.AreEqual(140.0, waterDepth[locationB3]);
        }
Пример #31
0
        public void DefaultValueTestInvalidTime()
        {
            var network = CreateNetwork();

            var networkCoverage = new NetworkCoverage("test", true)
            {
                Network = network, DefaultValue = 0.33
            };

            INetworkLocation nl11 = new NetworkLocation(network.Branches[0], 0.0);

            // no network location set in networkCoverage expect the default value to return
            Assert.AreEqual(0.33, networkCoverage.Evaluate(DateTime.Now, nl11));
        }
        public void SetUp()
        {
            network = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0), new Point(100, 100));

            networkCoverage = new NetworkCoverage { Network = network };
            
            //add locations
            networkCoverage[new NetworkLocation(network.Branches[0], 1.0)] = 10.0;
            networkCoverage[new NetworkLocation(network.Branches[0], 2.0)] = 20.0;
            
            networkCoverage.Locations.NextValueGenerator = new NetworkLocationNextValueGenerator(networkCoverage);
            
            networkCoverageBindingList = new NetworkCoverageBindingList(networkCoverage);
        }
Пример #33
0
        public void GenerageSegmentsWhenLocationsAreAdded()
        {
            var network = CreateNetwork();

            var networkCoverage = new NetworkCoverage {
                Network = network
            };

            networkCoverage[new NetworkLocation(network.Branches[0], 10.0)] = 0.1;
            networkCoverage[new NetworkLocation(network.Branches[0], 50.0)] = 0.5;
            networkCoverage[new NetworkLocation(network.Branches[0], 90.0)] = 0.9;

            Assert.AreEqual(3, networkCoverage.Segments.Values.Count);
        }
Пример #34
0
        public void DoesNotBubbleEventsFromNetwork()
        {
            var network         = RouteHelperTest.GetSnakeHydroNetwork(false, new Point(0, 0), new Point(100, 0), new Point(100, 200));
            var networkCoverage = new NetworkCoverage("test", true)
            {
                Network = network
            };

            (networkCoverage as INotifyPropertyChanged).PropertyChanged += (s, e) =>
            {
                Assert.Fail("No Bubbling please!");
            };

            network.Nodes[0].Name = "kees";
        }
Пример #35
0
        public void ExtraTimeSliceFromNonTimeDependentNetworkCoverage()
        {
            var network         = GetNetwork();
            var networkCoverage = new NetworkCoverage("test", false)
            {
                Network = network
            };

            networkCoverage[new NetworkLocation(network.Branches[0], 10.0)] = 10.0;
            networkCoverage[new NetworkLocation(network.Branches[0], 90.0)] = 90.0;
            networkCoverage[new NetworkLocation(network.Branches[1], 10.0)] = 110.0;
            networkCoverage[new NetworkLocation(network.Branches[1], 90.0)] = 190.0;
            // networkcoverage is not time dependent thus expect an argumentexception
            NetworkCoverageHelper.ExtractTimeSlice(networkCoverage, DateTime.Now);
        }
        public void SubstractCoverages()
        {
            var network = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0),
                                                               new Point(100, 100));
            var location = new NetworkLocation(network.Branches[0], 0);
            var coverageA = new NetworkCoverage { Network = network };
            var coverageB = new NetworkCoverage { Network = network };

            //add a uniform coverage B to a 
            coverageB.DefaultValue = 100.0;

            coverageA[location] = 40.0;
            coverageA.Substract(coverageB);
            
            Assert.AreEqual(-60.0, coverageA[location]);
        }
Пример #37
0
        public void SetUp()
        {
            network = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0), new Point(100, 100));

            networkCoverage = new NetworkCoverage {
                Network = network
            };

            //add locations
            networkCoverage[new NetworkLocation(network.Branches[0], 1.0)] = 10.0;
            networkCoverage[new NetworkLocation(network.Branches[0], 2.0)] = 20.0;

            networkCoverage.Locations.NextValueGenerator = new NetworkLocationNextValueGenerator(networkCoverage);

            networkCoverageBindingList = new NetworkCoverageBindingList(networkCoverage);
        }
Пример #38
0
        public IFunction CreateFunction(IEnumerable<IVariable> variables)
        {
            IVariable component = variables.First(f => !f.IsIndependent);

            //TODO: set name correctly
            INetworkCoverage networkCoverage = new NetworkCoverage
                                                   {
                                                       Name = "networkcoverage",
                                                       Arguments = new EventedList<IVariable>(component.Arguments),
                                                       Components = new EventedList<IVariable>(new[] {component}),
                                                       Network = network
                                                   };

            //component.Store.Functions.Add(networkCoverage);

            return networkCoverage;
        }
Пример #39
0
 /// <summary>
 /// Add a new empty route to the map in a newly added coverage Layer.
 /// </summary>
 /// <param name="map"></param>
 /// <param name="network"></param>
 /// <returns></returns>
 public static void AddNewRoute2Map(Map map, INetwork network)
 {
     int count = map.Layers.Count(l => l is INetworkCoverageLayer);
     var routeCoverage = new NetworkCoverage(string.Format("route_{0}", (count + 1)), false, "Offset", "m")
     {
         Network = network,
         SegmentGenerationMethod = SegmentGenerationMethod.RouteBetweenLocations
     };
     //no sorting on route locations.
     routeCoverage.Locations.AutoSort = false;
     routeCoverage.Segments.AutoSort = false;
     var networkCoverageLayer = new NetworkCoverageLayer
                                    {
                                        NetworkCoverage = routeCoverage,
                                        Name = routeCoverage.Name,
                                        Map = map
                                    };
     map.Layers.Insert(0, networkCoverageLayer);
 }
        public void FeaturesChangedIsFiredOnValuesAdd()
        {
            var network = MapTestHelper.CreateMockNetwork();

            var networkCoverage = new NetworkCoverage { Network = network };
            var networkCoverageFeatureCollection = new NetworkCoverageFeatureCollection
                                                       {
                                                           NetworkCoverage = networkCoverage,
                                                           NetworkCoverageFeatureType = NetworkCoverageFeatureType.Locations
                                                       };
            
            var callCount = 0;

            networkCoverageFeatureCollection.FeaturesChanged += (s, e) => { callCount++; };

            networkCoverage.Locations.Values.Add(new NetworkLocation { Branch = network.Branches[0], Chainage = 0.0 });

            Assert.AreEqual(2, callCount);
        }
        public void SubstractComplexCoverages()
        {
            var network = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0),
                                                               new Point(100, 100));
            
            var waterLevel = new NetworkCoverage { Network = network };
            var bedLevel = new NetworkCoverage { Network = network };
            
            var branchA = network.Branches[0];
            var branchB = network.Branches[1];

            var locationA1 = new NetworkLocation(branchA, 0);
            var locationA2 = new NetworkLocation(branchA, branchA.Length/2);
            var locationA3 = new NetworkLocation(branchA, branchA.Length);
            var locationB1 = new NetworkLocation(branchB, 0);
            var locationB2 = new NetworkLocation(branchB, branchB.Length/2);
            var locationB3 = new NetworkLocation(branchB, branchB.Length);

            //add a uniform coverage B to a 
            bedLevel.DefaultValue = 100.0;
            bedLevel[locationB1] = 100.0;
            bedLevel[locationB2] = 120.0;
            bedLevel[locationB3] = 80.0;

            waterLevel[locationA1] = 140.0;
            waterLevel[locationA2] = 110.0;
            waterLevel[locationA3] = 90.0;
            waterLevel[locationB1] = 120.0;
            waterLevel[locationB2] = 130.0;
            waterLevel[locationB3] = 140.0;
            
            waterLevel.Substract(bedLevel);

            var waterDepth = waterLevel;

            Assert.AreEqual(40.0, waterDepth[locationA1]);
            Assert.AreEqual(10.0, waterDepth[locationA2]);
            Assert.AreEqual(-10.0, waterDepth[locationA3]);
            Assert.AreEqual(20.0, waterDepth[locationB1]);
            Assert.AreEqual(10.0, waterDepth[locationB2]);
            Assert.AreEqual(60.0, waterDepth[locationB3]);
        }
Пример #42
0
        public void UpdateSegmentsForRoute()
        {
            var network = GetNetwork();
            NetworkCoverage route = new NetworkCoverage
                                        {
                                            Network = network,
                                            SegmentGenerationMethod = SegmentGenerationMethod.RouteBetweenLocations
                                        };
            // [---------------------------------------------------]
            //      5                        60
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 5.0));
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 60.0));

            // expected result
            //      [5-----------------------60]

            Assert.AreEqual(1, route.Segments.Values.Count);
            Assert.AreEqual(5.0, route.Segments.Values[0].Chainage);
            Assert.AreEqual(60.0, route.Segments.Values[0].EndChainage);
        }
        public void SubstractTimeDependentCoverages()
        {
            var network = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0),
                                                               new Point(100, 100));
            var location = new NetworkLocation(network.Branches[0], 0);
            var coverageA = new NetworkCoverage {Network = network, IsTimeDependent = true};
            var coverageB = new NetworkCoverage {Network = network, IsTimeDependent = true};

            var dates = new[] {new DateTime(2000, 1, 1), new DateTime(2001, 1, 1)};

            //add a uniform coverage B to a 
            coverageB.DefaultValue = 100.0;
            coverageB.Time.SetValues(dates);

            coverageA[dates[0], location] = 40.0;
            coverageA[dates[1], location] = 10.0;
            coverageA.Substract(coverageB);

            Assert.AreEqual(-60.0, coverageA[dates[0], location]);
            Assert.AreEqual(-90.0, coverageA[dates[1], location]);
        }
        public void CreateFeatureCollectionForNetworkLocationsAndSegments()
        {
            var network = MapTestHelper.CreateMockNetwork();

            var networkCoverage = new NetworkCoverage { Network = network };
            var networkLocationFeatureProvider = new NetworkCoverageFeatureCollection
                                                     {
                                                         NetworkCoverage = networkCoverage,
                                                         NetworkCoverageFeatureType = NetworkCoverageFeatureType.Locations
                                                     };
            var segmentFeatureProvider = new NetworkCoverageFeatureCollection
                                             {
                                                 NetworkCoverage = networkCoverage,
                                                 NetworkCoverageFeatureType = NetworkCoverageFeatureType.Segments
                                             };

            networkCoverage.Locations.Values.Add(new NetworkLocation {Branch = network.Branches[0], Offset = 0.0 });

            Assert.AreEqual(1, networkLocationFeatureProvider.Features.Count);
            Assert.AreEqual(1, segmentFeatureProvider.Features.Count);
        }
        public void AddCoverages()
        {
            var network = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0),
                                                               new Point(100, 100));
            var location = new NetworkLocation(network.Branches[0], 0);
            var coverageA = new NetworkCoverage { Network = network };
            var coverageB = new NetworkCoverage { Network = network };

            //add a uniform coverage B to a 
            coverageB.DefaultValue = 100.0;

            coverageA[location] = 40.0;
            coverageA.Add(coverageB);

            Assert.AreEqual(140.0,coverageA[location]);

            //define a value for B so it no longer uses default value
            coverageB[location] = -20.0;

            //should substract the -20 now
            coverageA.Add(coverageB);
            Assert.AreEqual(120.0,coverageA[location]);
        }
        public void NextValueOnSameBranch()
        {
            var network = new Network();

            var node1 = new Node("node1");
            var node2 = new Node("node2");
            network.Nodes.Add(node1);
            network.Nodes.Add(node2);
            
            var branch1 = new Branch("branch1", node1, node2, 100.0);
            network.Branches.Add(branch1);
            
            // create network coverate
            var networkCoverage = new NetworkCoverage { Network = network };
            
            NetworkLocationNextValueGenerator networkLocationNextValueGenerator = new NetworkLocationNextValueGenerator(networkCoverage);
            
            INetworkLocation location = networkLocationNextValueGenerator.GetNextValue();
            Assert.AreEqual(new NetworkLocation(branch1, 0), location);
            networkCoverage.Locations.Values.Add(location);
            
            Assert.AreEqual(new NetworkLocation(branch1, 1), networkLocationNextValueGenerator.GetNextValue());
        }
Пример #47
0
        public void WriteSlicesUsingTimeFilterShouldBeTheSameAsUsingIndexFilter()
        {
            var network = CreateNetwork();

            
            var networkCoverage = new NetworkCoverage("test", true) { Network = network };
            var locations = new[] { new NetworkLocation(network.Branches[0], 0.0),
                                    new NetworkLocation(network.Branches[0], 100.0), 
                                    new NetworkLocation(network.Branches[1], 100.0) };
            networkCoverage.SetLocations(locations);
            networkCoverage.Locations.FixedSize = locations.Length;

            var networkCoverage2 = new NetworkCoverage("test", true) { Network = network };
            networkCoverage2.SetLocations(locations);
            networkCoverage2.Locations.FixedSize = locations.Length;
            

            // set 1000 values using time filters in coverage 1 and 2
            var startTime = new DateTime(2000, 1, 1);
            for (int i = 0; i < 1000;i++ )
            {
                IEnumerable<double> values = new[] { 1.0, 2.0, 3.0 }.Select(d => d * i);
                DateTime currentTime = startTime.AddMinutes(i);
                //set values for coverage 1 using value filter
                networkCoverage.Time.AddValues(new[] { currentTime });
                var timeValueFilter = new VariableValueFilter<DateTime>(networkCoverage.Time, currentTime);
                networkCoverage.SetValues(values,timeValueFilter);

                //set values for coverage 2 using index filter
                networkCoverage2.Time.AddValues(new[] { currentTime });
                var timeIndexFilter = new VariableIndexRangeFilter(networkCoverage2.Time, i);
                networkCoverage2.SetValues(values, timeIndexFilter);

            }
            
            Assert.AreEqual(networkCoverage.Components[0].Values,networkCoverage2.Components[0].Values);
        }
        public void ShowNetworkCoverageAsLayer()
        {
            // create network
            var network = MapTestHelper.CreateMockNetwork();

            mocks.ReplayAll();

            var networkCoverage = new NetworkCoverage { Network = network };
            var networkCoverageLayer = new NetworkCoverageGroupLayer {NetworkCoverage = networkCoverage};

            // set values
            var branch1 = network.Branches[0];
            var branch2 = network.Branches[1];
            networkCoverage[new NetworkLocation(branch1, 4.0)] = 0.1;
            networkCoverage[new NetworkLocation(branch1, 16.0)] = 0.2;
            networkCoverage[new NetworkLocation(branch2, 4.0)] = 0.3;
            networkCoverage[new NetworkLocation(branch2, 12.0)] = 0.4;
            networkCoverage[new NetworkLocation(branch2, 16.0)] = 0.5;

            var map = new Map(new Size(1000, 1000));
            map.Layers.Add(networkCoverageLayer);

            MapTestHelper.ShowModal(map);
        }
Пример #49
0
        public void ShowNetworkCoverageAsLayerWithNoneSegmentationType()
        {
            // create network
            var network = MapTestHelper.CreateMockNetwork();

            mocks.ReplayAll();

            var networkCoverage = new NetworkCoverage { Network = network, SegmentGenerationMethod = SegmentGenerationMethod.None };
            var networkCoverageLayer = new NetworkCoverageLayer { NetworkCoverage = networkCoverage };

            // set values
            var branch1 = network.Branches[0];
            var branch2 = network.Branches[1];
            networkCoverage[new NetworkLocation(branch1, 4.0)] = 0.1;
            networkCoverage[new NetworkLocation(branch1, 16.0)] = 0.2;
            networkCoverage[new NetworkLocation(branch2, 4.0)] = 0.3;
            networkCoverage[new NetworkLocation(branch2, 12.0)] = 0.4;
            networkCoverage[new NetworkLocation(branch2, 16.0)] = 0.5;

            var map = new Map(new Size(1000, 1000));
            map.Layers.Add(networkCoverageLayer);

            MapTestHelper.Show(map);
        }
Пример #50
0
 public void ExtraTimeSliceFromNonTimeDependentNetworkCoverage()
 {
     var network = GetNetwork();
     var networkCoverage = new NetworkCoverage("test", false) { Network = network };
     networkCoverage[new NetworkLocation(network.Branches[0], 10.0)] = 10.0;
     networkCoverage[new NetworkLocation(network.Branches[0], 90.0)] = 90.0;
     networkCoverage[new NetworkLocation(network.Branches[1], 10.0)] = 110.0;
     networkCoverage[new NetworkLocation(network.Branches[1], 90.0)] = 190.0;
     // networkcoverage is not time dependent thus expect an argumentexception
     NetworkCoverageHelper.ExtractTimeSlice(networkCoverage, DateTime.Now);
 }
Пример #51
0
        public void ExtractNonExistingTimeSliceFromNetworkCoverage()
        {
            var network = GetNetwork();
            var networkCoverage = new NetworkCoverage("test", true) { Network = network };

            DateTime dateTime = DateTime.Now;
            networkCoverage[dateTime, new NetworkLocation(network.Branches[0], 10.0)] = 10.0;
            networkCoverage[dateTime, new NetworkLocation(network.Branches[0], 90.0)] = 90.0;
            networkCoverage[dateTime, new NetworkLocation(network.Branches[1], 10.0)] = 110.0;
            networkCoverage[dateTime, new NetworkLocation(network.Branches[1], 90.0)] = 190.0;
            // networkcoverage is time dependent but queried time is not available.
            NetworkCoverageHelper.ExtractTimeSlice(networkCoverage, dateTime + new TimeSpan(1, 0, 0));
        }
Пример #52
0
        public void GetLocationsForSegmentInCorrectOrder()
        {
            var network = CreateThreeNodesNetwork();
            var branch = (Branch) network.Branches[0];
            
            var source = new NetworkCoverage { Network = network };
            source[new NetworkLocation(branch, 10.0)] = 10;
            source[new NetworkLocation(branch, 50.0)] = 30;
            source[new NetworkLocation(branch, 60.0)] = 20;
            source[new NetworkLocation(branch, 80.0)] = 10;

            // retrieve the location of source that overlap with segmentUp
            var segmentUp = new NetworkSegment { Branch = branch, Offset = 30, Length = 40 };
            var locationsUp = RouteHelper.GetLocationsForSegment(segmentUp, source, false).ToList();

            Assert.AreEqual(new NetworkLocation(branch, 50.0),locationsUp[0]);
            Assert.AreEqual(new NetworkLocation(branch, 60.0), locationsUp[1]);

            // retrieve the location of source that overlap with segmentDown; the direction
            // is negative and the location offset are thus descending
            var segmentDown = new NetworkSegment
                                  {
                                      Branch = branch,
                                      Offset = 90,
                                      Length = 50,
                                      DirectionIsPositive = false
                                  };
            var locationsDown = RouteHelper.GetLocationsForSegment(segmentDown, source, false).ToList();
            Assert.AreEqual(new NetworkLocation(branch, 80.0), locationsDown[0]);
            Assert.AreEqual(new NetworkLocation(branch, 60.0), locationsDown[1]);
            Assert.AreEqual(new NetworkLocation(branch, 50.0), locationsDown[2]);
        }
Пример #53
0
        public void ExtractTimeSlice()
        {
            var network = GetNetwork();
            var networkCoverage = new NetworkCoverage("test", true) { Network = network };

            DateTime []dateTimes = new DateTime[10];

            for (int i = 0; i < 10; i++)
            {
                dateTimes[i] = new DateTime(2000, 1, 1, 1, /* minute */i, 0);
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[0], 10.0)] = 10.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[0], 90.0)] = 90.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[1], 10.0)] = 110.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[1], 90.0)] = 190.0 + i;
            }

            INetworkCoverage slice = NetworkCoverageHelper.ExtractTimeSlice(networkCoverage, new DateTime(2000, 1, 1, 1, /* minute */0, 0));
            Assert.AreEqual(false, slice.IsTimeDependent);
            Assert.AreEqual(10.0 + 0, slice.Evaluate(new NetworkLocation(network.Branches[0], 10.0)));
            Assert.AreEqual(90.0 + 0, slice.Evaluate(new NetworkLocation(network.Branches[0], 90.0)));
            Assert.AreEqual(110.0 + 0, slice.Evaluate(new NetworkLocation(network.Branches[1], 10.0)));
            Assert.AreEqual(190.0 + 0, slice.Evaluate(new NetworkLocation(network.Branches[1], 90.0)));

            //slice = NetworkCoverageHelper.ExtractTimeSlice(networkCoverage, new DateTime(2000, 1, 1, 1, /* minute */9, 0));
            slice = new NetworkCoverage(networkCoverage.Name, false);
            NetworkCoverageHelper.ExtractTimeSlice(networkCoverage, slice,
                                                           new DateTime(2000, 1, 1, 1, /* minute */9, 0), true);
            Assert.AreEqual(false, slice.IsTimeDependent);
            Assert.AreEqual(10.0 + 9, slice.Evaluate(new NetworkLocation(network.Branches[0], 10.0)));
            Assert.AreEqual(90.0 + 9, slice.Evaluate(new NetworkLocation(network.Branches[0], 90.0)));
            Assert.AreEqual(110.0 + 9, slice.Evaluate(new NetworkLocation(network.Branches[1], 10.0)));
            Assert.AreEqual(190.0 + 9, slice.Evaluate(new NetworkLocation(network.Branches[1], 90.0)));

            // just repeat the previous action; refilling a coverage should also work
            NetworkCoverageHelper.ExtractTimeSlice(networkCoverage, slice,
                                                           new DateTime(2000, 1, 1, 1, /* minute */9, 0), true);
            Assert.AreEqual(false, slice.IsTimeDependent);
            Assert.AreEqual(10.0 + 9, slice.Evaluate(new NetworkLocation(network.Branches[0], 10.0)));
            Assert.AreEqual(90.0 + 9, slice.Evaluate(new NetworkLocation(network.Branches[0], 90.0)));
            Assert.AreEqual(110.0 + 9, slice.Evaluate(new NetworkLocation(network.Branches[1], 10.0)));
            Assert.AreEqual(190.0 + 9, slice.Evaluate(new NetworkLocation(network.Branches[1], 90.0)));
        }
Пример #54
0
        public void ExtractTimeSliceNoDataValues()
        {
            var network = GetNetwork();
            var networkCoverage = new NetworkCoverage("test", true) { Network = network };

            DateTime dateTime = DateTime.Now;

            networkCoverage[dateTime, new NetworkLocation(network.Branches[0], 10.0)] = 10.0;
            networkCoverage[dateTime, new NetworkLocation(network.Branches[0], 90.0)] = 90.0;
            networkCoverage[dateTime, new NetworkLocation(network.Branches[1], 10.0)] = 110.0;
            networkCoverage[dateTime, new NetworkLocation(network.Branches[1], 90.0)] = 190.0;
            networkCoverage.Components[0].NoDataValues.Add(16.0);

            INetworkCoverage slice = NetworkCoverageHelper.ExtractTimeSlice(networkCoverage, dateTime);

            Assert.AreEqual(networkCoverage.Components[0].NoDataValues.Count, slice.Components[0].NoDataValues.Count);
            for (int i = 0; i < slice.Components[0].NoDataValues.Count; i++)
            {
                Assert.AreEqual(networkCoverage.Components[0].NoDataValues[i], slice.Components[0].NoDataValues[i]);
            }
        }
Пример #55
0
        public void GetLocationsForRoute()
        {
            var network = CreateThreeNodesNetwork();
            var branch = (Branch)network.Branches[0];

            var source = new NetworkCoverage { Network = network };
            source[new NetworkLocation(branch, 10.0)] = 10;
            source[new NetworkLocation(branch, 50.0)] = 30;
            source[new NetworkLocation(branch, 60.0)] = 20;
            source[new NetworkLocation(branch, 80.0)] = 10;

            var route = RouteHelper.CreateRoute(new[] { new NetworkLocation(branch, 0.0)
                , new NetworkLocation(branch, 90.0) });
            var expectedLocations = new[]
                                        {
                                            new NetworkLocation(branch, 0.0)
                                            , new NetworkLocation(branch, 10.0)
                                            , new NetworkLocation(branch, 50.0)
                                            , new NetworkLocation(branch, 60.0)
                                            , new NetworkLocation(branch, 80.0)
                                            , new NetworkLocation(branch, 90)
                                        };
            Assert.AreEqual(expectedLocations, RouteHelper.GetLocationsInRoute(source, route));
        }
Пример #56
0
 public void GetRouteSegments()
 {
     INetwork network = CreateThreeNodesNetwork();
     NetworkCoverage route = new NetworkCoverage
                                 {
                                     Network = network,
                                     SegmentGenerationMethod = SegmentGenerationMethod.RouteBetweenLocations
                                 };
     route.Locations.AutoSort = false;
     route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 0));
     route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 100.0));
     Assert.AreEqual(1, route.Segments.Values.Count);
     Assert.AreEqual(100, route.Segments.Values[0].EndOffset);
     Assert.AreEqual(0, route.Segments.Values[0].Offset);
 }
Пример #57
0
        public void LocationAreUniqueIsCorrect()
        {
            //take a input coverage e.g depth Ci
            //take a route coverage Cr
            //result is Function dependend of X with components equal to the components of Ci
            //where x is distance along Cr
            var network = CreateThreeNodesNetwork();

            NetworkCoverage source = new NetworkCoverage { Network = network };
            source[new NetworkLocation(network.Branches[0], 10.0)] = 10;
            source[new NetworkLocation(network.Branches[0], 50.0)] = 30;
            source[new NetworkLocation(network.Branches[1], 50.0)] = 20;
            source[new NetworkLocation(network.Branches[1], 150.0)] = 10;
            
            NetworkCoverage returningRoute = new NetworkCoverage
            {
                Network = network,
                SegmentGenerationMethod = SegmentGenerationMethod.RouteBetweenLocations
            };
            //route going back to branch 0
            returningRoute.Locations.Values.Add(new NetworkLocation(network.Branches[0], 5.0));
            returningRoute.Locations.Values.Add(new NetworkLocation(network.Branches[1], 60.0));
            returningRoute.Locations.Values.Add(new NetworkLocation(network.Branches[0], 10.0));

            Assert.IsFalse((RouteHelper.LocationsAreUniqueOnRoute(source, returningRoute)));

            NetworkCoverage singleRoute = new NetworkCoverage
            {
                Network = network,
                SegmentGenerationMethod = SegmentGenerationMethod.SegmentBetweenLocations
            };
            //route going one way
            singleRoute.Locations.Values.Add(new NetworkLocation(network.Branches[0], 5.0));
            singleRoute.Locations.Values.Add(new NetworkLocation(network.Branches[1], 60.0));

            Assert.IsTrue((RouteHelper.LocationsAreUniqueOnRoute(source, singleRoute)));
        }
Пример #58
0
        public void ExtractTimeSliceUseLocationsFromTarget()
        {
            var network = GetNetwork();
            var networkCoverage = new NetworkCoverage("test", true) { Network = network };

            DateTime[] dateTimes = new DateTime[10];

            for (int i = 0; i < 10; i++)
            {
                dateTimes[i] = new DateTime(2000, 1, 1, 1, /* minute */i, 0);
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[0], 10.0)] = 10.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[0], 50.0)] = 50.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[0], 90.0)] = 90.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[1], 10.0)] = 110.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[1], 50.0)] = 150.0 + i;
                networkCoverage[dateTimes[i], new NetworkLocation(network.Branches[1], 90.0)] = 190.0 + i;
            }

            var slice = new NetworkCoverage("slice", false) { Network = network };
            Assert.AreEqual(false, slice.IsTimeDependent);
            slice[new NetworkLocation(network.Branches[0], 20.0)] = 2;
            slice[new NetworkLocation(network.Branches[0], 80.0)] = 8;
            slice[new NetworkLocation(network.Branches[1], 20.0)] = 12;
            slice[new NetworkLocation(network.Branches[1], 80.0)] = 18;

            NetworkCoverageHelper.ExtractTimeSlice(networkCoverage, slice,
                                                           new DateTime(2000, 1, 1, 1, /* minute */0, 0), false);

            // expected results at time step 0 are 20 80 120 180; this are interpolated values
            Assert.AreEqual(4, slice.Locations.Values.Count);
            Assert.AreEqual(10 /*20*/, slice.Evaluate(new NetworkLocation(network.Branches[0], 20.0)), 1.0e-6);
            Assert.AreEqual(50 /*80*/, slice.Evaluate(new NetworkLocation(network.Branches[0], 80.0)), 1.0e-6);
            Assert.AreEqual(90 /*120*/, slice.Evaluate(new NetworkLocation(network.Branches[1], 20.0)), 1.0e-6);
            Assert.AreEqual(110 /*180*/, slice.Evaluate(new NetworkLocation(network.Branches[1], 80.0)), 1.0e-6);

            NetworkCoverageHelper.ExtractTimeSlice(networkCoverage, slice,
                                                           new DateTime(2000, 1, 1, 1, /* minute */3, 0), false);

            // expected results at time step 3 are 23 83 123 183; this are interpolated values
            Assert.AreEqual(4, slice.Locations.Values.Count);
            Assert.AreEqual(13 /*23*/, slice.Evaluate(new NetworkLocation(network.Branches[0], 20.0)), 1.0e-6);
            Assert.AreEqual(53 /*83*/, slice.Evaluate(new NetworkLocation(network.Branches[0], 80.0)), 1.0e-6);
            Assert.AreEqual(93 /*123*/, slice.Evaluate(new NetworkLocation(network.Branches[1], 20.0)), 1.0e-6);
            Assert.AreEqual(113 /*183*/, slice.Evaluate(new NetworkLocation(network.Branches[1], 80.0)), 1.0e-6);
        }
Пример #59
0
        public void GetRouteLength()
        {
            var network = CreateThreeNodesNetwork();

            NetworkCoverage route = new NetworkCoverage
            {
                Network = network,
                SegmentGenerationMethod = SegmentGenerationMethod.RouteBetweenLocations
            };
            route.Locations.AutoSort = false;
            //route going back to branch 0
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 5.0));
            route.Locations.Values.Add(new NetworkLocation(network.Branches[1], 60.0));
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 10.0));
            Assert.AreEqual(305.0, RouteHelper.GetRouteLength(route));            
        }
Пример #60
0
        public void UpdateSegmentsForSegmentBetweenLocationsReversed()
        {
            var network = GetNetwork();
            NetworkCoverage route = new NetworkCoverage
            {
                Network = network,
                SegmentGenerationMethod = SegmentGenerationMethod.SegmentBetweenLocations
            };
            route.Locations.IsAutoSorted = false;
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 60.0));
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 40.0));
            route.Locations.Values.Add(new NetworkLocation(network.Branches[0], 5.0));

            // expect location not to be sorted
            // [    60-----40
            //             40-----------------5
            //NetworkCoverageHelper.UpdateSegments(route);
            Assert.AreEqual(2, route.Segments.Values.Count);
            Assert.AreEqual(60.0, route.Segments.Values[0].Chainage);
            Assert.AreEqual(40.0, route.Segments.Values[0].EndChainage);
            Assert.IsFalse(route.Segments.Values[0].DirectionIsPositive);
            
            Assert.AreEqual(40.0, route.Segments.Values[1].Chainage);
            Assert.AreEqual(5.0, route.Segments.Values[1].EndChainage);
            Assert.IsFalse(route.Segments.Values[1].DirectionIsPositive);
        }