public void ValuesOfFeatureArgumentShouldworkAfterClear() { List <SimpleFeature> features = new List <SimpleFeature>(); features.Add(new SimpleFeature(0, new Point(0, 0))); features.Add(new SimpleFeature(1, new Point(1, 1))); features.Add(new SimpleFeature(2, new Point(2, 2))); FeatureCoverage coverage = new FeatureCoverage(); coverage.Components.Add(new Variable <double>("value")); coverage.Arguments.Add(new Variable <SimpleFeature>("feature")); coverage.Features = new EventedList <IFeature>(features.Cast <IFeature>()); // set values of feature a variable coverage.FeatureVariable.SetValues(features); double[] values = new double[] { 1.0, 2.0, 3.0 }; coverage.SetValues(values); Assert.AreEqual(3, coverage.GetValues <double>().Count); // clear all coverage.Clear(); coverage.SetValues(values, new VariableValueFilter <SimpleFeature>(coverage.FeatureVariable, features.ToArray())); Assert.AreEqual(3, coverage.GetValues <double>().Count); }
public void MultipleFilterTest() { FeatureCoverage waterLevel = new FeatureCoverage("WaterLevel"); Variable <DateTime> timeArgument = new Variable <DateTime>("time"); waterLevel.Arguments.Add(timeArgument); Variable <SimpleFeature> boundariesFunctionArgument = new Variable <SimpleFeature>("cell"); waterLevel.Arguments.Add(boundariesFunctionArgument); waterLevel.Components.Add(new Variable <float>("Level")); waterLevel.Features = (IList)boundaries; waterLevel.SetValues(new[] { 1.0f }, new VariableValueFilter <DateTime>(timeArgument, new[] { new DateTime(2000, 1, 1, 0, 0, 0), new DateTime(2000, 2, 1, 0, 0, 0) })); IList <float> values = waterLevel.GetValues <float>(); Assert.AreEqual(12, values.Count); // 6 for each timestep Assert.AreEqual(1.0, values[0]); Assert.AreEqual(1.0, values[5]); }
public void UseShapefileFeaturesAdFeatureCoverageSource() { string path = Path.Combine(sharpMapGisShapeFilePath, "rivers.shp"); ShapeFile shapeFile = new ShapeFile(path); // select only some features from shapefile Envelope coverageFeatureEnvelope = shapeFile.GetExtents(); coverageFeatureEnvelope.ExpandBy(0.5, 0.5); var coverage = new FeatureCoverage(); coverage.Components.Add(new Variable <double>("value")); coverage.Arguments.Add(new Variable <Feature>("feature")); coverage.Features = new EventedList <IFeature>(shapeFile.Features.Cast <IFeature>()); coverage.FeatureVariable.AddValues(coverage.Features); double[] values = new double[coverage.FeatureVariable.Values.Count]; for (int i = 0; i < values.Length; i++) { values[i] = i; } coverage.SetValues(values); }
public void CreateAndSetValues() { IList<SimpleFeature> features = new List<SimpleFeature> { new SimpleFeature(0, new Point(0, 0)), new SimpleFeature(1, new Point(1, 1)), new SimpleFeature(2, new Point(2, 2)) }; FeatureCoverage coverage = new FeatureCoverage(); coverage.Components.Add(new Variable<double>("value")); coverage.Arguments.Add(new Variable<SimpleFeature>("feature")); coverage.Features = (IList) features; var feature = features[1]; IList<double> values = coverage.GetValues<double>(new VariableValueFilter<SimpleFeature>(coverage.FeatureVariable, feature)); Assert.AreEqual(1, values.Count); Assert.AreEqual(coverage.Components[0].DefaultValue, values[0]); IList<double> allValues = coverage.GetValues<double>(); Assert.AreEqual(3, allValues.Count); double[] valuesArray = new double[3] { 1.0, 2.0, 3.0 }; coverage.SetValues(valuesArray); values = coverage.GetValues<double>(); Assert.AreEqual(3, values.Count); Assert.AreEqual(1.0, values[0]); Assert.AreEqual(2.0, values[1]); Assert.AreEqual(3.0, values[2]); }
public void ClearValuesWhenFeaturesAreSet() { IList <SimpleFeature> features = new List <SimpleFeature>(); features.Add(new SimpleFeature(0, new Point(0, 0))); features.Add(new SimpleFeature(1, new Point(1, 1))); features.Add(new SimpleFeature(2, new Point(2, 2))); FeatureCoverage coverage = new FeatureCoverage(); coverage.Components.Add(new Variable <double>("value")); coverage.Arguments.Add(new Variable <SimpleFeature>("feature")); coverage.Features = new EventedList <IFeature>(features.Cast <IFeature>()); // set values of feature a variable coverage.FeatureVariable.SetValues(features); double[] values = new double[] { 1.0, 2.0, 3.0 }; coverage.SetValues(values); Assert.AreEqual(3, coverage.GetValues <double>().Count); // set features second time coverage.Features = new EventedList <IFeature>(features.Cast <IFeature>()); Assert.AreEqual(3, coverage.GetValues <double>().Count); }
public void CreateAndSetValuesWithTimeAsVariable() { IList <SimpleFeature> features = new List <SimpleFeature>(); features.Add(new SimpleFeature(0, new Point(0, 0))); features.Add(new SimpleFeature(1, new Point(1, 1))); features.Add(new SimpleFeature(2, new Point(2, 2))); FeatureCoverage coverage = new FeatureCoverage(); coverage.Components.Add(new Variable <double>("value")); IVariable timeVariable = new Variable <DateTime>("time"); coverage.Arguments.Add(timeVariable); coverage.Arguments.Add(new Variable <SimpleFeature>("feature")); coverage.Features = new EventedList <IFeature>(features.Cast <IFeature>()); // set values of feature a variable coverage.FeatureVariable.SetValues(features); DateTime time1 = DateTime.Now; double[] values1 = new double[] { 1.0, 2.0, 3.0 }; coverage.SetValues(values1, new VariableValueFilter <DateTime>(timeVariable, time1)); DateTime time2 = time1.AddDays(1); double[] values2 = new double[] { 10.0, 20.0, 30.0 }; coverage.SetValues(values2, new VariableValueFilter <DateTime>(timeVariable, time2)); // t = t1 IList <double> values = coverage.GetValues <double>(new VariableValueFilter <DateTime>(timeVariable, time1)); Assert.AreEqual(3, values.Count); Assert.AreEqual(1.0, values[0]); Assert.AreEqual(2.0, values[1]); Assert.AreEqual(3.0, values[2]); // t = t2 values = coverage.GetValues <double>(new VariableValueFilter <DateTime>(timeVariable, time2)); Assert.AreEqual(3, values.Count); Assert.AreEqual(10.0, values[0]); Assert.AreEqual(20.0, values[1]); Assert.AreEqual(30.0, values[2]); }
public void ValuesOfFeatureArgumentInTimeDependentFunctionAfterClear() { // define features var features = new EventedList <IFeature> { new SimpleFeature(0, new Point(0, 0)), new SimpleFeature(1, new Point(1, 1)), new SimpleFeature(2, new Point(2, 2)) }; // create coverage var coverage = new FeatureCoverage(); // define coverage components (attributes?) coverage.Components.Add(new Variable <double>("value")); // define coverage arguments (dimensionality of coverage attributes?) coverage.Arguments.Add(new Variable <SimpleFeature>("feature")); // 1st dimension is feature IVariable timeVariable = new Variable <DateTime>("time"); // 2nd dimension is time coverage.Arguments.Add(timeVariable); // set features coverage.Features = features; // set values of feature a variable coverage.FeatureVariable.SetValues(features); // set coverage values var values = new[] { 1.0, 2.0, 3.0 }; var time1 = DateTime.Now; coverage.SetValues(values, new VariableValueFilter <DateTime>(timeVariable, time1)); coverage.SetValues(values, new VariableValueFilter <DateTime>(timeVariable, time1.AddDays(1))); // asserts Assert.AreEqual(6, coverage.GetValues <double>().Count); }
public void FilterCoverage() { IList <SimpleFeature> features = new List <SimpleFeature>(); features.Add(new SimpleFeature(0, new Point(0, 0))); features.Add(new SimpleFeature(1, new Point(1, 1))); features.Add(new SimpleFeature(2, new Point(2, 2))); FeatureCoverage coverage = new FeatureCoverage(); coverage.Components.Add(new Variable <double>("value")); IVariable timeVariable = new Variable <DateTime>("time"); coverage.Arguments.Add(timeVariable); coverage.Arguments.Add(new Variable <SimpleFeature>("feature")); coverage.Features = (IList)features; DateTime time1 = DateTime.Now; double[] values1 = new double[] { 1.0, 2.0, 3.0 }; coverage.SetValues(values1, new VariableValueFilter <DateTime>(timeVariable, time1)); DateTime time2 = time1.AddDays(1); double[] values2 = new double[] { 10.0, 20.0, 30.0 }; coverage.SetValues(values2, new VariableValueFilter <DateTime>(timeVariable, time2)); Assert.AreEqual(6, coverage.Components[0].Values.Count); //filter the created coverage IFeatureCoverage filteredCoverage = coverage.Filter(new VariableValueFilter <DateTime>(timeVariable, time2)); //should not change the original! Assert.AreEqual(6, coverage.Components[0].Values.Count); Assert.AreEqual(coverage.Features.Count, filteredCoverage.Features.Count); Assert.AreEqual(3, filteredCoverage.Components[0].Values.Count); }
public void CreateAndSetValues() { IList <SimpleFeature> features = new List <SimpleFeature> { new SimpleFeature(0, new Point(0, 0)), new SimpleFeature(1, new Point(1, 1)), new SimpleFeature(2, new Point(2, 2)) }; FeatureCoverage coverage = new FeatureCoverage(); coverage.Components.Add(new Variable <double>("value")); coverage.Arguments.Add(new Variable <SimpleFeature>("feature")); coverage.Features = new EventedList <IFeature>(features.Cast <IFeature>()); // nicer API is: coverage[features[0]] = 0.1; // set values of feature a variable coverage.FeatureVariable.SetValues(features); var feature = features[1]; IList <double> values = coverage.GetValues <double>(new VariableValueFilter <SimpleFeature>(coverage.FeatureVariable, feature)); Assert.AreEqual(1, values.Count); Assert.AreEqual(coverage.Components[0].DefaultValue, values[0]); IList <double> allValues = coverage.GetValues <double>(); Assert.AreEqual(3, allValues.Count); double[] valuesArray = new double[3] { 1.0, 2.0, 3.0 }; coverage.SetValues(valuesArray); values = coverage.GetValues <double>(); Assert.AreEqual(3, values.Count); Assert.AreEqual(1.0, values[0]); Assert.AreEqual(2.0, values[1]); Assert.AreEqual(3.0, values[2]); }
public void ClearValuesWhenFeaturesAreSet() { IList<SimpleFeature> features = new List<SimpleFeature>(); features.Add(new SimpleFeature(0, new Point(0, 0))); features.Add(new SimpleFeature(1, new Point(1, 1))); features.Add(new SimpleFeature(2, new Point(2, 2))); FeatureCoverage coverage = new FeatureCoverage(); coverage.Components.Add(new Variable<double>("value")); coverage.Arguments.Add(new Variable<SimpleFeature>("feature")); coverage.Features = (IList) features; double[] values = new double[] { 1.0, 2.0, 3.0 }; coverage.SetValues(values); Assert.AreEqual(3, coverage.GetValues<double>().Count); // set features second time coverage.Features = (IList) features; Assert.AreEqual(3, coverage.GetValues<double>().Count); }
public void FilterCoverage() { IList<SimpleFeature> features = new List<SimpleFeature>(); features.Add(new SimpleFeature(0, new Point(0, 0))); features.Add(new SimpleFeature(1, new Point(1, 1))); features.Add(new SimpleFeature(2, new Point(2, 2))); FeatureCoverage coverage = new FeatureCoverage(); coverage.Components.Add(new Variable<double>("value")); IVariable timeVariable = new Variable<DateTime>("time"); coverage.Arguments.Add(timeVariable); coverage.Arguments.Add(new Variable<SimpleFeature>("feature")); coverage.Features = (IList) features; DateTime time1 = DateTime.Now; double[] values1 = new double[] { 1.0, 2.0, 3.0 }; coverage.SetValues(values1, new VariableValueFilter<DateTime>(timeVariable, time1)); DateTime time2 = time1.AddDays(1); double[] values2 = new double[] { 10.0, 20.0, 30.0 }; coverage.SetValues(values2, new VariableValueFilter<DateTime>(timeVariable, time2)); Assert.AreEqual(6,coverage.Components[0].Values.Count); //filter the created coverage IFeatureCoverage filteredCoverage = coverage.Filter(new VariableValueFilter<DateTime>(timeVariable, time2)); //should not change the original! Assert.AreEqual(6,coverage.Components[0].Values.Count); Assert.AreEqual(coverage.Features.Count, filteredCoverage.Features.Count); Assert.AreEqual(3,filteredCoverage.Components[0].Values.Count); }
public void DeleteTimeStepTest() { //waterLevel = f(cell,time) IFeatureCoverage waterLevelCoverage = new FeatureCoverage("WaterLevelCoverage"); IVariable<int> timeVariable = new Variable<int>("timestep"); IVariable<SimpleFeature> boundariesVariable = new Variable<SimpleFeature>("cell"); IVariable<float> waterLevelVariable = new Variable<float>("Level"); waterLevelCoverage.Arguments.Add(timeVariable); waterLevelCoverage.Arguments.Add(boundariesVariable); waterLevelCoverage.Components.Add(waterLevelVariable); waterLevelCoverage.Features = (IList)boundaries; for (int i = 0; i < 12; i++) { waterLevelCoverage.SetValues(new[] { (i * 10) + 1.0f, (i * 10) + 2.0f, (i * 10) + 3.0f, (i * 10) + 4.0f, (i * 10) + 5.0f, (i * 10) + 6.0f } , new VariableValueFilter<int>(timeVariable, i)); } // content should be now: // t=0 : 1.0 2.0 3.0 4.0 5.0 6.0 // t=1 : 11.0 12.0 13.0 14.0 15.0 16.0 // .. // .. // t=11 :111.0 112.0 113.0 114.0 115.0 116.0 IList<float> values = waterLevelVariable.GetValues(); Assert.AreEqual(6 * 12, values.Count); Assert.AreEqual(14.0, values[9]); Assert.AreEqual(114.0, values[69]); values = waterLevelVariable.GetValues(new VariableValueFilter<int>(timeVariable, 5)); Assert.AreEqual(6, values.Count); Assert.AreEqual(51, values[0]); Assert.AreEqual(56, values[5]); // Remove values at t=2 timeVariable.Values.Remove(2); values = waterLevelVariable.GetValues(); Assert.AreEqual(6 * 11, values.Count); timeVariable.Values.Remove(3); timeVariable.Values.Remove(4); IList argumentValues = waterLevelCoverage.Arguments[0].Values; Assert.AreEqual(9, argumentValues.Count); Assert.AreEqual(11, argumentValues[8]); timeVariable.Values.Remove(5); timeVariable.Values.Remove(6); timeVariable.Values.Remove(7); argumentValues = waterLevelCoverage.Arguments[0].Values; Assert.AreEqual(6, argumentValues.Count); Assert.AreEqual(11, argumentValues[5]); waterLevelCoverage.RemoveValues(new VariableValueFilter<int>(timeVariable, new [] { 0, 1, 8, 9, 10, 11 })); values = waterLevelVariable.GetValues(); Assert.AreEqual(0, values.Count); argumentValues = waterLevelCoverage.Arguments[0].Values; Assert.AreEqual(0, argumentValues.Count); }
public void MultipleFilterTest() { FeatureCoverage waterLevel = new FeatureCoverage("WaterLevel"); Variable<DateTime> timeArgument = new Variable<DateTime>("time"); waterLevel.Arguments.Add(timeArgument); Variable<SimpleFeature> boundariesFunctionArgument = new Variable<SimpleFeature>("cell"); waterLevel.Arguments.Add(boundariesFunctionArgument); waterLevel.Components.Add(new Variable<float>("Level")); waterLevel.Features = (IList)boundaries; waterLevel.SetValues(new[] {1.0f}, new VariableValueFilter<DateTime>(timeArgument, new[] { new DateTime(2000, 1, 1, 0, 0, 0), new DateTime(2000, 2, 1, 0, 0, 0) })); IList<float> values = waterLevel.GetValues<float>(); Assert.AreEqual(12, values.Count); // 6 for each timestep Assert.AreEqual(1.0, values[0]); Assert.AreEqual(1.0, values[5]); }
public void BranchSegmentBoundaryAsFunctionArgument_TimeDependent() { // Test with 2 arguments. A FeatureVariable DateTime as timestep // Add values to the store and test the retieved values object defaultValue = default(float); FeatureCoverage waterLevelCoverage = new FeatureCoverage("WaterLevel"); Variable <DateTime> timeArgument = new Variable <DateTime>("time"); waterLevelCoverage.Arguments.Add(timeArgument); Variable <SimpleFeature> boundariesFunctionArgument = new Variable <SimpleFeature>("cell"); waterLevelCoverage.Arguments.Add(boundariesFunctionArgument); waterLevelCoverage.Components.Add(new Variable <float>("depth")); waterLevelCoverage.Features = (IList)boundaries; // no data added; we expect 0 rows in the table IList <float> values = waterLevelCoverage.GetValues <float>(); Assert.AreEqual(0, values.Count); // Add 1 value for a boundary. The store will add rows with default values for all // boundaries in the network.BranchSegmentBoundaries collection and set // the value 1.0 to the explicit referenced boundary11. waterLevelCoverage[new DateTime(2000, 1, 1, 0, 0, 0), boundary11] = 1.0; values = waterLevelCoverage.GetValues <float>(); Assert.AreEqual(6, values.Count); Assert.AreEqual(1.0, values[0]); Assert.AreEqual(defaultValue, values[1]); Assert.AreEqual(defaultValue, values[2]); Assert.AreEqual(defaultValue, values[3]); Assert.AreEqual(defaultValue, values[4]); Assert.AreEqual(defaultValue, values[5]); // Add a new timestep and set lavel for all boundaries for this step to 2.0 waterLevelCoverage.SetValues(new[] { 2.0f }, new VariableValueFilter <DateTime>(timeArgument, new DateTime(2000, 2, 1, 0, 0, 0))); values = waterLevelCoverage.GetValues <float>(); Assert.AreEqual(12, values.Count); // Overwrite the waterlevels of the first timestep to 1.0; there are no default values in the // internal table // content should be now: // t=2000, 1, 1 1.0 1.0 1.0 1.0 1.0 1.0 // t=2000, 2, 1 2.0 2.0 2.0 2.0 2.0 2.0 waterLevelCoverage.SetValues(new[] { 1.0f }, new VariableValueFilter <DateTime>(timeArgument, new DateTime(2000, 1, 1, 0, 0, 0))); values = waterLevelCoverage.GetValues <float>(); Assert.AreEqual(12, values.Count); // Overwrite the waterlevels of the 2nd timestep. // content should be now: // t=2000, 1, 1 1.0 1.0 1.0 1.0 1.0 1.0 // t=2000, 2, 1 1.0 2.0 3.0 4.0 5.0 6.0 waterLevelCoverage.SetValues(new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }, new VariableValueFilter <DateTime>(timeArgument, new DateTime(2000, 2, 1, 0, 0, 0))); values = waterLevelCoverage.GetValues <float>(); Assert.AreEqual(12, values.Count); // Add a 3rd timestep to the function. // content should be now: // t=2000, 1, 1 1.0 1.0 1.0 1.0 1.0 1.0 // t=2000, 2, 1 1.0 2.0 3.0 4.0 5.0 6.0 // t=2000, 3, 1 11.0 12.0 13.0 14.0 15.0 16.0 waterLevelCoverage.SetValues(new[] { 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }, new VariableValueFilter <DateTime>(timeArgument, new DateTime(2000, 3, 1, 0, 0, 0))); values = waterLevelCoverage.GetValues <float>(); Assert.AreEqual(18, values.Count); // Ask all timesteps for boundary 21 values = waterLevelCoverage.GetValues <float>(new VariableValueFilter <SimpleFeature>(boundariesFunctionArgument, boundary21)); Assert.AreEqual(3, values.Count); Assert.AreEqual(1.0, values[0]); Assert.AreEqual(4.0, values[1]); Assert.AreEqual(14.0, values[2]); // Use 2 filters to get values; multiple filters work as a logical AND; only 1 values expected values = waterLevelCoverage.GetValues <float>(new VariableValueFilter <SimpleFeature>(boundariesFunctionArgument, boundary21), new VariableValueFilter <DateTime>(timeArgument, new DateTime(2000, 2, 1, 0, 0, 0))); Assert.AreEqual(1, values.Count); Assert.AreEqual(4.0, values[0]); }
public void DeleteTimeStepTest() { //waterLevel = f(cell,time) IFeatureCoverage waterLevelCoverage = new FeatureCoverage("WaterLevelCoverage"); IVariable <int> timeVariable = new Variable <int>("timestep"); IVariable <SimpleFeature> boundariesVariable = new Variable <SimpleFeature>("cell"); IVariable <float> waterLevelVariable = new Variable <float>("Level"); waterLevelCoverage.Arguments.Add(timeVariable); waterLevelCoverage.Arguments.Add(boundariesVariable); waterLevelCoverage.Components.Add(waterLevelVariable); waterLevelCoverage.Features = (IList)boundaries; for (int i = 0; i < 12; i++) { waterLevelCoverage.SetValues(new[] { (i * 10) + 1.0f, (i * 10) + 2.0f, (i * 10) + 3.0f, (i * 10) + 4.0f, (i * 10) + 5.0f, (i * 10) + 6.0f }, new VariableValueFilter <int>(timeVariable, i)); } // content should be now: // t=0 : 1.0 2.0 3.0 4.0 5.0 6.0 // t=1 : 11.0 12.0 13.0 14.0 15.0 16.0 // .. // .. // t=11 :111.0 112.0 113.0 114.0 115.0 116.0 IList <float> values = waterLevelVariable.GetValues(); Assert.AreEqual(6 * 12, values.Count); Assert.AreEqual(14.0, values[9]); Assert.AreEqual(114.0, values[69]); values = waterLevelVariable.GetValues(new VariableValueFilter <int>(timeVariable, 5)); Assert.AreEqual(6, values.Count); Assert.AreEqual(51, values[0]); Assert.AreEqual(56, values[5]); // Remove values at t=2 timeVariable.Values.Remove(2); values = waterLevelVariable.GetValues(); Assert.AreEqual(6 * 11, values.Count); timeVariable.Values.Remove(3); timeVariable.Values.Remove(4); IList argumentValues = waterLevelCoverage.Arguments[0].Values; Assert.AreEqual(9, argumentValues.Count); Assert.AreEqual(11, argumentValues[8]); timeVariable.Values.Remove(5); timeVariable.Values.Remove(6); timeVariable.Values.Remove(7); argumentValues = waterLevelCoverage.Arguments[0].Values; Assert.AreEqual(6, argumentValues.Count); Assert.AreEqual(11, argumentValues[5]); waterLevelCoverage.RemoveValues(new VariableValueFilter <int>(timeVariable, new [] { 0, 1, 8, 9, 10, 11 })); values = waterLevelVariable.GetValues(); Assert.AreEqual(0, values.Count); argumentValues = waterLevelCoverage.Arguments[0].Values; Assert.AreEqual(0, argumentValues.Count); }
public void ValuesOfFeatureArgumentShouldworkAfterClear() { List<SimpleFeature> features = new List<SimpleFeature>(); features.Add(new SimpleFeature(0, new Point(0, 0))); features.Add(new SimpleFeature(1, new Point(1, 1))); features.Add(new SimpleFeature(2, new Point(2, 2))); FeatureCoverage coverage = new FeatureCoverage(); coverage.Components.Add(new Variable<double>("value")); coverage.Arguments.Add(new Variable<SimpleFeature>("feature")); coverage.Features = (IList)features; double[] values = new double[] { 1.0, 2.0, 3.0 }; coverage.SetValues(values); Assert.AreEqual(3, coverage.GetValues<double>().Count); // clear all coverage.Clear(); coverage.SetValues(values, new VariableValueFilter<SimpleFeature>(coverage.FeatureVariable, features.ToArray())); Assert.AreEqual(3, coverage.GetValues<double>().Count); }
public void ValuesOfFeatureArgumentInTimeDependentFunctionAfterClear() { // define features var features = new List<SimpleFeature> { new SimpleFeature(0, new Point(0, 0)), new SimpleFeature(1, new Point(1, 1)), new SimpleFeature(2, new Point(2, 2)) }; // create coverage var coverage = new FeatureCoverage(); // define coverage components (attributes?) coverage.Components.Add(new Variable<double>("value")); // define coverage arguments (dimensionality of coverage attributes?) coverage.Arguments.Add(new Variable<SimpleFeature>("feature")); // 1st dimension is feature IVariable timeVariable = new Variable<DateTime>("time"); // 2nd dimension is time coverage.Arguments.Add(timeVariable); // set feature values coverage.Features = features; // set coverage values var values = new[] { 1.0, 2.0, 3.0 }; var time1 = DateTime.Now; coverage.SetValues(values, new VariableValueFilter<DateTime>(timeVariable, time1)); coverage.SetValues(values, new VariableValueFilter<DateTime>(timeVariable, time1.AddDays(1))); // asserts Assert.AreEqual(6, coverage.GetValues<double>().Count); }
public void BranchSegmentBoundaryAsFunctionArgument_TimeDependent() { // Test with 2 arguments. A FeatureVariable DateTime as timestep // Add values to the store and test the retieved values object defaultValue = default(float); FeatureCoverage waterLevelCoverage = new FeatureCoverage("WaterLevel"); Variable<DateTime> timeArgument = new Variable<DateTime>("time"); waterLevelCoverage.Arguments.Add(timeArgument); Variable<SimpleFeature> boundariesFunctionArgument = new Variable<SimpleFeature>("cell"); waterLevelCoverage.Arguments.Add(boundariesFunctionArgument); waterLevelCoverage.Components.Add(new Variable<float>("depth")); waterLevelCoverage.Features = (IList)boundaries; // no data added; we expect 0 rows in the table IList<float> values = waterLevelCoverage.GetValues<float>(); Assert.AreEqual(0, values.Count); // Add 1 value for a boundary. The store will add rows with default values for all // boundaries in the network.BranchSegmentBoundaries collection and set // the value 1.0 to the explicit referenced boundary11. waterLevelCoverage[new DateTime(2000, 1, 1, 0, 0, 0), boundary11] = 1.0; values = waterLevelCoverage.GetValues<float>(); Assert.AreEqual(6, values.Count); Assert.AreEqual(1.0, values[0]); Assert.AreEqual(defaultValue, values[1]); Assert.AreEqual(defaultValue, values[2]); Assert.AreEqual(defaultValue, values[3]); Assert.AreEqual(defaultValue, values[4]); Assert.AreEqual(defaultValue, values[5]); // Add a new timestep and set lavel for all boundaries for this step to 2.0 waterLevelCoverage.SetValues(new[] { 2.0f } , new VariableValueFilter<DateTime>(timeArgument, new DateTime(2000, 2, 1, 0, 0, 0))); values = waterLevelCoverage.GetValues<float>(); Assert.AreEqual(12, values.Count); // Overwrite the waterlevels of the first timestep to 1.0; there are no default values in the // internal table // content should be now: // t=2000, 1, 1 1.0 1.0 1.0 1.0 1.0 1.0 // t=2000, 2, 1 2.0 2.0 2.0 2.0 2.0 2.0 waterLevelCoverage.SetValues(new[] { 1.0f } , new VariableValueFilter<DateTime>(timeArgument, new DateTime(2000, 1, 1, 0, 0, 0))); values = waterLevelCoverage.GetValues<float>(); Assert.AreEqual(12, values.Count); // Overwrite the waterlevels of the 2nd timestep. // content should be now: // t=2000, 1, 1 1.0 1.0 1.0 1.0 1.0 1.0 // t=2000, 2, 1 1.0 2.0 3.0 4.0 5.0 6.0 waterLevelCoverage.SetValues(new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f } , new VariableValueFilter<DateTime>(timeArgument, new DateTime(2000, 2, 1, 0, 0, 0))); values = waterLevelCoverage.GetValues<float>(); Assert.AreEqual(12, values.Count); // Add a 3rd timestep to the function. // content should be now: // t=2000, 1, 1 1.0 1.0 1.0 1.0 1.0 1.0 // t=2000, 2, 1 1.0 2.0 3.0 4.0 5.0 6.0 // t=2000, 3, 1 11.0 12.0 13.0 14.0 15.0 16.0 waterLevelCoverage.SetValues(new[] { 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f } , new VariableValueFilter<DateTime>(timeArgument, new DateTime(2000, 3, 1, 0, 0, 0))); values = waterLevelCoverage.GetValues<float>(); Assert.AreEqual(18, values.Count); // Ask all timesteps for boundary 21 values = waterLevelCoverage.GetValues<float>(new VariableValueFilter<SimpleFeature>(boundariesFunctionArgument, boundary21)); Assert.AreEqual(3, values.Count); Assert.AreEqual(1.0, values[0]); Assert.AreEqual(4.0, values[1]); Assert.AreEqual(14.0, values[2]); // Use 2 filters to get values; multiple filters work as a logical AND; only 1 values expected values = waterLevelCoverage.GetValues<float>(new VariableValueFilter<SimpleFeature>(boundariesFunctionArgument, boundary21), new VariableValueFilter<DateTime>(timeArgument, new DateTime(2000, 2, 1, 0, 0, 0))); Assert.AreEqual(1, values.Count); Assert.AreEqual(4.0, values[0]); }
public void UseShapefileFeaturesAdFeatureCoverageSource() { string path = Path.Combine(sharpMapGisShapeFilePath,"rivers.shp"); ShapeFile shapeFile = new ShapeFile(path); // select only some features from shapefile IEnvelope coverageFeatureEnvelope = shapeFile.GetExtents(); coverageFeatureEnvelope.ExpandBy(0.5, 0.5); FeatureCoverage coverage = new FeatureCoverage(); coverage.Components.Add(new Variable<double>("value")); coverage.Arguments.Add(new Variable<FeatureDataRow>("feature")); coverage.Features = shapeFile.GetFeatures(coverageFeatureEnvelope); double[] values = new double[coverage.FeatureVariable.Values.Count]; for (int i = 0; i < values.Length; i++) { values[i] = i; } coverage.SetValues(values); }
public void CreateAndSetValuesWithTimeAsVariable() { IList<SimpleFeature> features = new List<SimpleFeature>(); features.Add(new SimpleFeature(0, new Point(0, 0))); features.Add(new SimpleFeature(1, new Point(1, 1))); features.Add(new SimpleFeature(2, new Point(2, 2))); FeatureCoverage coverage = new FeatureCoverage(); coverage.Components.Add(new Variable<double>("value")); IVariable timeVariable = new Variable<DateTime>("time"); coverage.Arguments.Add(timeVariable); coverage.Arguments.Add(new Variable<SimpleFeature>("feature")); coverage.Features = (IList) features; DateTime time1 = DateTime.Now; double[] values1 = new double[] { 1.0, 2.0, 3.0 }; coverage.SetValues(values1, new VariableValueFilter<DateTime>(timeVariable, time1)); DateTime time2 = time1.AddDays(1); double[] values2 = new double[] { 10.0, 20.0, 30.0 }; coverage.SetValues(values2, new VariableValueFilter<DateTime>(timeVariable, time2)); // t = t1 IList<double> values = coverage.GetValues<double>(new VariableValueFilter<DateTime>(timeVariable, time1)); Assert.AreEqual(3, values.Count); Assert.AreEqual(1.0, values[0]); Assert.AreEqual(2.0, values[1]); Assert.AreEqual(3.0, values[2]); // t = t2 values = coverage.GetValues<double>(new VariableValueFilter<DateTime>(timeVariable, time2)); Assert.AreEqual(3, values.Count); Assert.AreEqual(10.0, values[0]); Assert.AreEqual(20.0, values[1]); Assert.AreEqual(30.0, values[2]); }