Example #1
0
        IEnumerator IEnumerable.GetEnumerator()
        {
            Array  array = GetData();
            object mv    = source.GetMissingValue();

            Type type = source.TypeOfData;

            if (type == typeof(double))
            {
                double[] darr = (double[])array;
                for (int i = 0; i < array.Length; i++)
                {
                    double d = darr[i];
                    if (!d.Equals(mv) && !double.IsNaN(d))
                    {
                        yield return(new Point(i, d));
                    }
                }
            }
            else if (type == typeof(float))
            {
                float[] farr = (float[])array;
                for (int i = 0; i < array.Length; i++)
                {
                    float f = farr[i];
                    if (!f.Equals(mv) && !float.IsNaN(f))
                    {
                        yield return(new Point(i, (double)f));
                    }
                }
            }
            else
            {
                for (int i = 0; i < array.Length; i++)
                {
                    object t = array.GetValue(i);
                    if (!t.Equals(mv))
                    {
                        yield return(new Point(i, Convert.ToDouble(t)));
                    }
                }
            }
            yield break;
        }
Example #2
0
        public static Point[][] SplitSecondDimension(Variable variable)
        {
            if (variable == null)
                throw new ArgumentNullException("variable");
            if (variable.Rank != 2)
                throw new ArgumentException("Only 2d variables are supported");
            int n = variable.GetShape()[1];
            int m = variable.GetShape()[0];
            Array d = variable.GetData();
            Point[][] pts = new Point[n][];

            for (int i = 0; i < n; i++)
            {
                List<Point> tmp = new List<Point>(m);
                if (variable.TypeOfData == typeof(float))
                {
                    float[,] dt = (float[,])d;
                    object mvObj = variable.GetMissingValue();
                    if (mvObj == null)
                    {
                        for (int j = 0; j < m; j++)
                            if (!Double.IsNaN(dt[j, i]))
                                tmp.Add(new Point(j, dt[j, i]));
                    }
                    else
                    {
                        float mv;
                        try
                        {
                            mv = Convert.ToSingle(mvObj);
                        }
                        catch (Exception exc)
                        {
                            Trace.WriteLine("PolyPolyline: cannot convert missing value attribute to float: " + exc.Message);
                            mv = float.NaN;
                        }
                        for (int j = 0; j < m; j++)
                            if (dt[j, i] != mv)
                                tmp.Add(new Point(j, dt[j, i]));
                    }
                }
                else if (variable.TypeOfData == typeof(double))
                {
                    double[,] dt = (double[,])d;

                    object mvObj = variable.GetMissingValue();
                    if (mvObj == null)
                    {
                        for (int j = 0; j < m; j++)
                            if (!Double.IsNaN(dt[j, i]))
                                tmp.Add(new Point(j, dt[j, i]));
                    }
                    else
                    {
                        double mv;
                        try
                        {
                            mv = Convert.ToDouble(mvObj);
                        }
                        catch (Exception exc)
                        {
                            Trace.WriteLine("PolyPolyline: cannot convert missing value attribute to double: " + exc.Message);
                            mv = double.NaN;
                        }
                        for (int j = 0; j < m; j++)
                            if (dt[j, i] != mv)
                                tmp.Add(new Point(j, dt[j, i]));
                    }
                }
                else
                {
                    object mv = variable.GetMissingValue();
                    for (int j = 0; j < m; j++)
                    {
                        object obj = d.GetValue(j, i);
                        if (!Object.Equals(obj, mv))
                            tmp.Add(new Point(j, Convert.ToDouble(obj)));
                    }
                }
                pts[i] = tmp.ToArray();
            }
            return pts;
        }
Example #3
0
        public static Point[][] SplitFirstDimension(Variable variable)
        {
            if (variable == null)
            {
                throw new ArgumentNullException("variable");
            }
            if (variable.Rank != 2)
            {
                throw new ArgumentException("Only 2d variables are supported");
            }
            int   n = variable.GetShape()[0];
            int   m = variable.GetShape()[1];
            Array d = variable.GetData();

            Point[][] pts = new Point[n][];

            for (int i = 0; i < n; i++)
            {
                List <Point> tmp = new List <Point>(m);
                if (variable.TypeOfData == typeof(float))
                {
                    float[,] dt = (float[, ])d;
                    object mvObj = variable.GetMissingValue();
                    if (mvObj == null)
                    {
                        for (int j = 0; j < m; j++)
                        {
                            if (!Double.IsNaN(dt[i, j]))
                            {
                                tmp.Add(new Point(j, dt[i, j]));
                            }
                        }
                    }
                    else
                    {
                        float mv;
                        try
                        {
                            mv = Convert.ToSingle(mvObj);
                        }
                        catch (Exception exc)
                        {
                            Trace.WriteLine("PolyPolyline: cannot convert missing value attribute to Double: " + exc.Message);
                            mv = float.NaN;
                        }
                        for (int j = 0; j < m; j++)
                        {
                            if (dt[i, j] != mv)
                            {
                                tmp.Add(new Point(j, dt[i, j]));
                            }
                        }
                    }
                }
                else if (variable.TypeOfData == typeof(double))
                {
                    double[,] dt = (double[, ])d;
                    object mvObj = variable.GetMissingValue();
                    if (mvObj == null)
                    {
                        for (int j = 0; j < m; j++)
                        {
                            if (!Double.IsNaN(dt[i, j]))
                            {
                                tmp.Add(new Point(j, dt[i, j]));
                            }
                        }
                    }
                    else
                    {
                        double mv = Convert.ToDouble(mvObj);
                        try
                        {
                            mv = Convert.ToDouble(mvObj);
                        }
                        catch (Exception exc)
                        {
                            Trace.WriteLine("PolyPolyline: cannot convert missing value attribute to double: " + exc.Message);
                            mv = double.NaN;
                        }
                        for (int j = 0; j < m; j++)
                        {
                            if (dt[i, j] != mv)
                            {
                                tmp.Add(new Point(j, dt[i, j]));
                            }
                        }
                    }
                }
                else
                {
                    object mv = variable.GetMissingValue();
                    for (int j = 0; j < m; j++)
                    {
                        object obj = d.GetValue(i, j);
                        if (!Object.Equals(obj, mv))
                        {
                            tmp.Add(new Point(j, Convert.ToDouble(obj)));
                        }
                    }
                }
                pts[i] = tmp.ToArray();
            }
            return(pts);
        }
Example #4
0
        private IEnumerator <Point> GetPoints()
        {
            Array  gridA = grid.GetData();
            Array  dataA = data.GetData();
            object gmv   = grid.GetMissingValue();
            object dmv   = data.GetMissingValue();

            int len = Math.Min(gridA.Length, dataA.Length);

            Type gt = grid.TypeOfData;
            Type dt = data.TypeOfData;

            if (dt == typeof(double))
            {
                if (gt == typeof(double)) // data: double, grid: double
                {
                    double[] darr = (double[])dataA;
                    double[] garr = (double[])gridA;
                    for (int i = 0; i < len; i++)
                    {
                        double g = garr[i];
                        double d = darr[i];

                        if (g.Equals(gmv) || double.IsNaN(g))
                        {
                            continue;
                        }
                        if (d.Equals(dmv) || double.IsNaN(d))
                        {
                            continue;
                        }
                        yield return(new Point(gridValueConverter(g), d));
                    }
                }
                else if (gt == typeof(float)) // data: double, grid: float
                {
                    double[] darr = (double[])dataA;
                    float[]  garr = (float[])gridA;
                    for (int i = 0; i < len; i++)
                    {
                        float  g = garr[i];
                        double d = darr[i];

                        if (g.Equals(gmv) || float.IsNaN(g))
                        {
                            continue;
                        }
                        if (d.Equals(dmv) || double.IsNaN(d))
                        {
                            continue;
                        }
                        yield return(new Point(gridValueConverter(g), d));
                    }
                }
                else  // data: double, grid: other
                {
                    double[] darr = (double[])dataA;
                    for (int i = 0; i < len; i++)
                    {
                        object g = gridA.GetValue(i);
                        if (g.Equals(gmv))
                        {
                            continue;
                        }
                        double d = darr[i];
                        if (d.Equals(dmv) || double.IsNaN(d))
                        {
                            continue;
                        }
                        yield return(new Point(gridValueConverter(g), d));
                    }
                }
            }
            else if (dt == typeof(float))
            {
                if (gt == typeof(double))  // data: float, grid: double
                {
                    float[]  darr = (float[])dataA;
                    double[] garr = (double[])gridA;
                    for (int i = 0; i < len; i++)
                    {
                        double g = garr[i];
                        float  d = darr[i];

                        if (g.Equals(gmv) || double.IsNaN(g))
                        {
                            continue;
                        }
                        if (d.Equals(dmv) || float.IsNaN(d))
                        {
                            continue;
                        }
                        yield return(new Point(gridValueConverter(g), (double)d));
                    }
                }
                else if (gt == typeof(float)) // data: float, grid: float
                {
                    float[] darr = (float[])dataA;
                    float[] garr = (float[])gridA;
                    for (int i = 0; i < len; i++)
                    {
                        float g = garr[i];
                        float d = darr[i];

                        if (g.Equals(gmv) || float.IsNaN(g))
                        {
                            continue;
                        }
                        if (d.Equals(dmv) || float.IsNaN(d))
                        {
                            continue;
                        }
                        yield return(new Point(gridValueConverter(g), (double)d));
                    }
                }
                else  // data: float, grid: other
                {
                    float[] darr = (float[])dataA;
                    for (int i = 0; i < len; i++)
                    {
                        object g = gridA.GetValue(i);
                        if (g.Equals(gmv))
                        {
                            continue;
                        }
                        float d = darr[i];
                        if (d.Equals(dmv) || float.IsNaN(d))
                        {
                            continue;
                        }
                        yield return(new Point(gridValueConverter(g), (double)d));
                    }
                }
            }
            else
            {
                if (gt == typeof(double))  // data: other, grid: double
                {
                    double[] garr = (double[])gridA;
                    for (int i = 0; i < len; i++)
                    {
                        double g = garr[i];

                        if (g.Equals(gmv) || double.IsNaN(g))
                        {
                            continue;
                        }
                        object d = dataA.GetValue(i);
                        if (d.Equals(dmv))
                        {
                            continue;
                        }
                        yield return(new Point(gridValueConverter(g), Convert.ToDouble(d)));
                    }
                }
                else if (gt == typeof(float))  // data: other, grid: float
                {
                    float[] garr = (float[])gridA;
                    for (int i = 0; i < len; i++)
                    {
                        float g = garr[i];

                        if (g.Equals(gmv) || float.IsNaN(g))
                        {
                            continue;
                        }
                        object d = dataA.GetValue(i);
                        if (d.Equals(dmv))
                        {
                            continue;
                        }
                        yield return(new Point(gridValueConverter(g), Convert.ToDouble(d)));
                    }
                }
                else  // data: other, grid: other
                {
                    for (int i = 0; i < len; i++)
                    {
                        object g = gridA.GetValue(i);
                        if (g.Equals(gmv))
                        {
                            continue;
                        }
                        object d = dataA.GetValue(i);
                        if (d.Equals(dmv))
                        {
                            continue;
                        }
                        yield return(new Point(gridValueConverter(g), Convert.ToDouble(d)));
                    }
                }
            }
            yield break;
        }