Example #1
0
        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);
        }
Example #2
0
        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]);
        }
Example #3
0
        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);
        }
Example #4
0
        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]);
        }
Example #5
0
        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);
        }
Example #6
0
        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]);
        }
Example #7
0
        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);
        }
Example #8
0
        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);
        }
Example #9
0
        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]);
        }
Example #10
0
        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);
        }
Example #11
0
        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);
        }
Example #12
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);
        }
Example #13
0
        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]);
        }
Example #14
0
        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]);
        }
Example #15
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);
        }
Example #16
0
        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);            
        }
Example #17
0
        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);
        }
Example #18
0
        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]);
        }
Example #19
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);
        }
Example #20
0
        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]);
        }