public void SetParameters(GridDataSetting aGDP) { TB_MinX.Text = aGDP.DataExtent.minX.ToString(); TB_MaxX.Text = aGDP.DataExtent.maxX.ToString(); TB_MinY.Text = aGDP.DataExtent.minY.ToString(); TB_MaxY.Text = aGDP.DataExtent.maxY.ToString(); TB_XNum.Text = aGDP.XNum.ToString(); TB_YNum.Text = aGDP.YNum.ToString(); SetXYSize(); }
/// <summary> /// Create grid X/y coordinate from discrete data /// </summary> /// <param name="aGDP"></param> /// <param name="X"></param> /// <param name="Y"></param> public static void CreateGridXY(GridDataSetting aGDP, ref double[] X, ref double[] Y) { double XDelt, YDelt; X = new double[aGDP.XNum]; Y = new double[aGDP.YNum]; XDelt = (aGDP.DataExtent.maxX - aGDP.DataExtent.minX) / Convert.ToDouble(aGDP.XNum - 1); YDelt = (aGDP.DataExtent.maxY - aGDP.DataExtent.minY) / Convert.ToDouble(aGDP.YNum - 1); //m_Contour.CreateGridXY_Num(Xlb, Ylb, Xrt, Yrt, cols - 1, rows - 1, ref m_X, ref m_Y); wContour.Interpolate.CreateGridXY_Delt(aGDP.DataExtent.minX, aGDP.DataExtent.minY, aGDP.DataExtent.maxX, aGDP.DataExtent.maxY, XDelt, YDelt, ref X, ref Y); }
public void GetParameters(ref GridDataSetting aGDP) { Single minX, maxX, minY, maxY; minX = Convert.ToSingle(TB_MinX.Text); maxX = Convert.ToSingle(TB_MaxX.Text); minY = Convert.ToSingle(TB_MinY.Text); maxY = Convert.ToSingle(TB_MaxY.Text); aGDP.DataExtent.minX = minX; aGDP.DataExtent.maxX = maxX; aGDP.DataExtent.minY = minY; aGDP.DataExtent.maxY = maxY; aGDP.XNum = Convert.ToInt32(TB_XNum.Text); aGDP.YNum = Convert.ToInt32(TB_YNum.Text); }
public void GetParameters(ref InterpolationSetting GI) { Single minX, maxX, minY, maxY; minX = Convert.ToSingle(TB_MinX.Text); maxX = Convert.ToSingle(TB_MaxX.Text); minY = Convert.ToSingle(TB_MinY.Text); maxY = Convert.ToSingle(TB_MaxY.Text); GridDataSetting aGDP = new GridDataSetting(); aGDP.DataExtent.minX = minX; aGDP.DataExtent.maxX = maxX; aGDP.DataExtent.minY = minY; aGDP.DataExtent.maxY = maxY; aGDP.XNum = Convert.ToInt32(TB_XNum.Text); aGDP.YNum = Convert.ToInt32(TB_YNum.Text); GI.GridDataSet = aGDP; GI.InterpolationMethod = (InterpolationMethods)Enum.Parse(typeof(InterpolationMethods), CB_Method.Text, true); switch (GI.InterpolationMethod) { case InterpolationMethods.Cressman: if (TB_Radius.Text.Trim() != string.Empty) { string[] radStrs = TB_Radius.Text.Split(';'); GI.RadList = new List <double>(); for (int i = 0; i < radStrs.Length; i++) { GI.RadList.Add(double.Parse(radStrs[i])); } } else { GI.RadList = new List <double>(); } GI.MinPointNum = Convert.ToInt32(TB_MinNum.Text); break; case InterpolationMethods.IDW_Neighbors: case InterpolationMethods.IDW_Radius: GI.Radius = double.Parse(TB_Radius.Text); GI.MinPointNum = Convert.ToInt32(TB_MinNum.Text); break; } }
private void SavGrADSMaskoutFile() { SaveFileDialog SFDlg = new SaveFileDialog(); SFDlg.Filter = "GrADS File (*.ctl)|*.ctl"; if (SFDlg.ShowDialog() == DialogResult.OK) { string aFile = SFDlg.FileName; int i; bool hasSelShape = _currentLayer.HasSelectedShapes(); //Get grid set PolygonShape aPGS = new PolygonShape(); Extent aExtent = new Extent(); int n = 0; for (i = 0; i < _currentLayer.ShapeNum; i++) { aPGS = (PolygonShape)_currentLayer.ShapeList[i]; if (hasSelShape) { if (!aPGS.Selected) { continue; } } if (n == 0) { aExtent = aPGS.Extent; } else { aExtent = MIMath.GetLagerExtent(aExtent, aPGS.Extent); } n += 1; } GridDataSetting aGDP = new GridDataSetting(); aGDP.DataExtent.minX = Math.Floor(aExtent.minX); aGDP.DataExtent.maxX = Math.Ceiling(aExtent.maxX); aGDP.DataExtent.minY = Math.Floor(aExtent.minY); aGDP.DataExtent.maxY = Math.Ceiling(aExtent.maxY); aGDP.XNum = 20; aGDP.YNum = 20; frmGridSet aFrmGS = new frmGridSet(); aFrmGS.SetParameters(aGDP); if (aFrmGS.ShowDialog() == DialogResult.OK) { aFrmGS.GetParameters(ref aGDP); //Show progressbar this.toolStripProgressBar1.Visible = true; this.toolStripProgressBar1.Value = 0; this.Cursor = Cursors.WaitCursor; Application.DoEvents(); //Get grid data double[,] gridData = new double[aGDP.YNum, aGDP.XNum]; int j, p; MeteoInfoC.PointD aPoint = new MeteoInfoC.PointD(); double xSize, ySize; xSize = (aGDP.DataExtent.maxX - aGDP.DataExtent.minX) / (aGDP.XNum - 1); ySize = (aGDP.DataExtent.maxY - aGDP.DataExtent.minY) / (aGDP.YNum - 1); bool isIn = false; for (i = 0; i < aGDP.YNum; i++) { aPoint.Y = aGDP.DataExtent.minY + i * ySize; for (j = 0; j < aGDP.XNum; j++) { aPoint.X = aGDP.DataExtent.minX + j * xSize; isIn = false; for (p = 0; p < _currentLayer.ShapeNum; p++) { aPGS = (PolygonShape)_currentLayer.ShapeList[p]; if (hasSelShape) { if (!aPGS.Selected) { continue; } } if (MIMath.PointInPolygon(aPGS, aPoint)) { isIn = true; break; } } if (isIn) { gridData[i, j] = 1; } else { gridData[i, j] = -1; } } this.toolStripProgressBar1.Value = (i + 1) * 100 / aGDP.YNum; Application.DoEvents(); } //Get GrADS data info string dFile = Path.ChangeExtension(aFile, ".dat"); GrADSDataInfo aDataInfo = new GrADSDataInfo(); aDataInfo.TITLE = "Mask data"; aDataInfo.DSET = dFile; aDataInfo.DTYPE = "GRIDDED"; aDataInfo.XDEF.Type = "LINEAR"; aDataInfo.XDEF.XNum = aGDP.XNum; aDataInfo.XDEF.XMin = (Single)aGDP.DataExtent.minX; aDataInfo.XDEF.XDelt = (Single)(xSize); aDataInfo.YDEF.Type = "LINEAR"; aDataInfo.YDEF.YNum = aGDP.YNum; aDataInfo.YDEF.YMin = (Single)aGDP.DataExtent.minY; aDataInfo.YDEF.YDelt = (Single)(ySize); aDataInfo.ZDEF.Type = "LINEAR"; aDataInfo.ZDEF.ZNum = 1; aDataInfo.ZDEF.SLevel = 1; aDataInfo.ZDEF.ZDelt = 1; aDataInfo.TDEF.Type = "LINEAR"; aDataInfo.TDEF.TNum = 1; aDataInfo.TDEF.STime = DateTime.Now; aDataInfo.TDEF.TDelt = "1mo"; Variable aVar = new Variable(); aVar.Name = "mask"; //aVar.LevelNum = 0; aVar.Units = "99"; aVar.Description = "background mask data"; aDataInfo.VARDEF.AddVar(aVar); //Save files aDataInfo.WriteGrADSCTLFile(); aDataInfo.WriteGrADSData_Grid(dFile, gridData); //Hide progressbar this.toolStripProgressBar1.Visible = false; this.Cursor = Cursors.Default; } } }