/// <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); }
/// <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); }