public void EvaluateWithinBranchPerformsProperInterAndExtrapolation() { //network 2 branches var network = RouteHelperTest.GetSnakeNetwork(false, new Point(0, 0), new Point(100, 0), new Point(100, 100)); var networkCoverage = new NetworkCoverage {Network = network}; IBranch branch = network.Branches[0]; networkCoverage[new NetworkLocation(branch, 1)] = 1.0; networkCoverage[new NetworkLocation(branch, 2)] = 2.0; networkCoverage[new NetworkLocation(branch, 3)] = 3.0; var knownLocations = networkCoverage.GetLocationsForBranch(branch); networkCoverage.Locations.ExtrapolationType = ExtrapolationType.Constant; networkCoverage.Locations.InterpolationType = InterpolationType.Linear; var offsetValues = knownLocations.Select(l => l.Chainage).Concat(new[] {0, 1.4, 2.4, 3.1}).OrderBy(o => o); var results = networkCoverage.EvaluateWithinBranch(branch, offsetValues, knownLocations); results[0].Should("1").Be.EqualTo(1.0); results[2].Should("2").Be.EqualTo(1.4); results[4].Should("3").Be.EqualTo(2.4); results[6].Should("4").Be.EqualTo(3.0); /* * Linear extrapolation is not support until the 'normal' evaluate does this also to prevent differences networkCoverage.Locations.ExtrapolationType = ExtrapolationType.Linear; networkCoverage.Locations.InterpolationType = InterpolationType.Constant; results = networkCoverage.EvaluateWithinBranch(locations); results[0].Should("5").Be.EqualTo(0.0); results[2].Should("6").Be.EqualTo(1.0); results[4].Should("7").Be.EqualTo(2.0); results[6].Should("8").Be.EqualTo(3.1); */ }
public void EvaluateWithinBranchThrowsExceptionForNonConstantExtraPolation() { var network = RouteHelperTest.GetSnakeNetwork(false, 1); var networkCoverage = new NetworkCoverage { Network = network }; IBranch branch = network.Branches[0]; networkCoverage[new NetworkLocation(branch, 10)] = 1.0; networkCoverage[new NetworkLocation(branch, 20)] = 2.0; networkCoverage[new NetworkLocation(branch, 30)] = 3.0; networkCoverage.Locations.ExtrapolationType = ExtrapolationType.Linear; var locations = networkCoverage.GetLocationsForBranch(branch); networkCoverage.EvaluateWithinBranch( branch, new [] {5.0}.OrderBy(o => o), locations); }
public void EvaluateAndEvaluateWithinBranchesAreConsistent() { // create network with two branches connected by // order number: // // nr=1 nr=1 nr=-1 // X-----A------X-----B------X-----C------X // var network = new Network(); var node1 = new Node("node1"); var node2 = new Node("node2"); var node3 = new Node("node3"); var node4 = new Node("node4"); network.Nodes.Add(node1); network.Nodes.Add(node2); network.Nodes.Add(node3); network.Nodes.Add(node4); var branchA = new Branch("branchA", node1, node2, 100.0) { Geometry = GeometryFromWKT.Parse("LINESTRING (0 0, 100 0)"), OrderNumber = 1 }; var branchB = new Branch("branchB", node2, node3, 100.0) { Geometry = GeometryFromWKT.Parse("LINESTRING (100 0, 200 0)"), OrderNumber = 1 }; var branchC = new Branch("branchC", node3, node4, 100.0) { Geometry = GeometryFromWKT.Parse("LINESTRING (200 0, 300 0)"), OrderNumber = -1 }; network.Branches.Add(branchA); network.Branches.Add(branchB); network.Branches.Add(branchC); // set up coverage with some values INetworkCoverage networkCoverage = new NetworkCoverage { Network = network }; networkCoverage.Locations.InterpolationType = InterpolationType.Linear; networkCoverage[new NetworkLocation(branchA, 0.50 * branchA.Length)] = 103.8; networkCoverage[new NetworkLocation(branchB, 0.32 * branchB.Length)] = 7.6; networkCoverage[new NetworkLocation(branchB, 0.66 * branchB.Length)] = 12.0; networkCoverage[new NetworkLocation(branchB, 0.98 * branchB.Length)] = 30.0; networkCoverage[new NetworkLocation(branchC, 0.50 * branchC.Length)] = -20.0; var knownLocations = networkCoverage.GetLocationsForBranch(branchB); var allLocations = knownLocations.Concat( new[] { new NetworkLocation(branchB, 0.0), new NetworkLocation(branchB, branchB.Length/2.015), new NetworkLocation(branchB, branchB.Length) }).ToList(); var sortedLocations = allLocations.OrderBy(o => o).ToList(); var sortedOffsets = sortedLocations.Select(l => l.Chainage).OrderBy(o => o); var result = networkCoverage.EvaluateWithinBranch(branchB, sortedOffsets, knownLocations); int index = 0; foreach (var location in sortedLocations) { Assert.AreEqual(result[index++], networkCoverage.Evaluate(location), String.Format("Where offset equals {0}", location.Chainage)); } }