示例#1
0
        /// <summary>
        /// Override operator / between a double data and a station data
        /// </summary>
        /// <param name="aData">a double data</param>
        /// <param name="aStData">a station data</param>
        /// <returns>result station data</returns>
        public static StationData operator /(double aData, StationData aStData)
        {
            StationData cStData = new StationData(aStData);

            for (int i = 0; i < aStData.Stations.Count; i++)
            {
                double aValue = aStData.Data[2, i];
                if (MIMath.DoubleEquals(aValue, aStData.MissingValue))
                {
                    cStData.Data[2, i] = aStData.MissingValue;
                }
                else
                {
                    cStData.Data[2, i] = aData / aValue;
                }
            }

            return(cStData);
        }
示例#2
0
        /// <summary>
        /// Override operator / for two station data
        /// </summary>
        /// <param name="aStData">a station data</param>
        /// <param name="bStData">a station data</param>
        /// <returns>result station data</returns>
        public static StationData operator /(StationData aStData, StationData bStData)
        {
            if (!MIMath.IsExtentCross(aStData.DataExtent, bStData.DataExtent))
            {
                return(null);
            }

            StationData     cStData = new StationData();
            List <double[]> cData   = new List <double[]>();
            string          aStid;
            int             stIdx = -1;
            double          minX, maxX, minY, maxY;

            minX = 0;
            maxX = 0;
            minY = 0;
            maxY = 0;
            for (int i = 0; i < aStData.Stations.Count; i++)
            {
                aStid = aStData.Stations[i];
                if (aStid == "99999")
                {
                    continue;
                }

                double aValue = aStData.Data[2, i];
                if (aValue == aStData.MissingValue)
                {
                    //aValue = 0;
                    continue;
                }

                stIdx = bStData.Stations.IndexOf(aStid);
                if (stIdx >= 0)
                {
                    double bValue = bStData.Data[2, stIdx];
                    if (bValue == bStData.MissingValue)
                    {
                        //bValue = 0;
                        continue;
                    }

                    cStData.Stations.Add(aStid);
                    double[] theData = new double[3];
                    theData[0] = aStData.Data[0, i];
                    theData[1] = aStData.Data[1, i];
                    theData[2] = aValue / bValue;
                    cData.Add(theData);

                    if (cStData.Stations.Count == 1)
                    {
                        minX = theData[0];
                        maxX = minX;
                        minY = theData[1];
                        maxY = minY;
                    }
                    else
                    {
                        if (minX > theData[0])
                        {
                            minX = theData[0];
                        }
                        else if (maxX < theData[0])
                        {
                            maxX = theData[0];
                        }
                        if (minY > theData[1])
                        {
                            minY = theData[1];
                        }
                        else if (maxY < theData[1])
                        {
                            maxY = theData[1];
                        }
                    }
                }
            }
            cStData.DataExtent.minX = minX;
            cStData.DataExtent.maxX = maxX;
            cStData.DataExtent.minY = minY;
            cStData.DataExtent.maxY = maxY;
            cStData.Data            = new double[3, cData.Count];
            for (int i = 0; i < cData.Count; i++)
            {
                cStData.Data[0, i] = cData[i][0];
                cStData.Data[1, i] = cData[i][1];
                cStData.Data[2, i] = cData[i][2];
            }

            return(cStData);
        }