public static void GetGrADSLocationArray() { float lonOrign = 87.08265f; float lonEWidth = 0.13513513f; float latOrign = 6.87960f; float latEWidth = 0.13513513f; float[] levels = { 100, 500, 1000, 1400, 2000, 2400, 3000, 3600, 4200, 4800, 5600, 6300, 7200, 8100, 9200, 10300, 11800, 13500, 16000, 26000 }; for (int i = 0; i < 413; i++) { ncData.lons[i] = GMAngle.FromDegrees(lonOrign + lonEWidth * i); } for (int j = 0; j < 263; j++) { ncData.lats[j] = GMAngle.FromDegrees(latOrign + latEWidth * j); } for (int k = 0; k < 19; k++) { ncData.levels[k] = levels[k]; } }
public static void GetLocationArray() { float lonOrign = 107.6954f; float lonEWidth = 0.1619f; float[] latsf = { 18.82040215f, 18.97357941f, 19.12661743f, 19.27951241f, 19.43226433f, 19.58487320f, 19.73733521f, 19.88965416f, 20.04182625f, 20.19385147f, 20.34572983f, 20.49745750f, 20.64903450f, 20.80046082f, 20.95173645f, 21.10285568f, 21.25382614f, 21.40464020f, 21.55530167f, 21.70580292f, 21.85614777f, 22.00633240f, 22.15636063f, 22.30622673f, 22.45593452f, 22.60548019f, 22.75486374f, 22.90408516f, 23.05314255f, 23.20203400f, 23.35075760f, 23.49931717f, 23.64770889f, 23.79593277f, 23.94398880f, 24.09187317f, 24.23958969f, 24.38713264f, 24.53450394f, 24.68170547f, 24.82872772f, 24.97557831f, 25.12225342f, 25.26875496f, 25.41507721f, 25.56122208f, 25.70718956f, 25.85297775f, 25.99859047f, 26.14401817f, 26.28926659f, 26.43433380f, 26.57921982f, 26.72392082f, 26.86843872f, 27.01277161f, 27.15692139f, 27.30088043f, 27.44465637f, 27.58824348f, 27.73164368f, 27.87485695f, 28.01788330f, 28.16071510f, 28.30335999f, 28.44581223f, 28.58807182f, 28.73013878f, 28.87201309f, 29.01369476f, 29.15518188f, 29.29647446f, 29.43757248f, 29.57847595f, 29.71918106f, 29.85969162f, 30.00000000f, 30.14011383f, 30.28002930f, 30.41974449f, 30.55926132f, 30.69857597f, 30.83769226f, 30.97660446f, 31.11531830f, 31.25382614f, 31.39213181f, 31.53023148f, 31.66813087f, 31.80582619f, 31.94331741f, 32.08060074f, 32.21767807f, 32.35455322f, 32.49121475f, 32.62767029f, 32.76391602f, 32.89995956f, 33.03579330f, 33.17142105f, 33.30683517f, 33.44203949f, 33.57703018f, 33.71181107f, 33.84638214f, 33.98074722f, 34.11489487f, 34.24883270f, 34.38255310f, 34.51606369f, 34.64935684f, 34.78244019f, 34.91530609f, 35.04795837f, 35.18039703f, 35.31262207f, 35.44462967f, 35.57641983f, 35.70799255f, 35.83935165f, 35.97048950f, 36.10141373f, 36.23211670f, 36.36260605f, 36.49287415f, 36.62292480f, 36.75275421f, 36.88236618f, 37.01175690f, 37.14093018f, 37.26988220f, 37.39861298f, 37.52712250f, 37.65541077f, 37.78347778f, 37.91132355f, 38.03894806f, 38.16635132f, 38.29352951f, 38.42049026f, 38.54722595f }; //float[] levels ={ 1000.00f,950.00f,925.00f,900.00f,850.00f,800.00f,750.00f,700.00f,650.00f,600.00f,550.00f,500.00f, // 450.00f,400.00f,350.00f,300.00f,250.00f,200.00f,150.00f,100.00f,50.00f}; float[] levels = { 100, 500, 750, 1000, 1400, 2000, 2400, 3000, 3600, 4200, 4800, 5600, 6300, 7200, 8100, 9200, 10300, 11800, 13500, 16000, 26000 }; for (int i = 0; i < ncData.nRow; i++) { ncData.lons[i] = GMAngle.FromDegrees(lonOrign + lonEWidth * i); ncData.lats[i] = GMAngle.FromDegrees(latsf[i]); } for (int i = 0; i < ncData.nLeval; i++) { ncData.levels[i] = levels[i]; } }
/// <summary> /// 获取气象数据元数据 /// </summary> /// <param name="path">配置文件路径</param> void GetMetaData(string path) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(path); _datasetName = xmlDoc.DocumentElement.Name; if (_datasetName == "MeteorologicalSet") { XmlNode root = xmlDoc.SelectSingleNode("MeteorologicalSet"); if (root.FirstChild.Name == "Metadata") //第一个节点是Metadata { XmlNodeList metaList = root.FirstChild.ChildNodes; foreach (XmlElement e in metaList) { if ("title" == e.Name) { meteorMetaData.Title = e.InnerText; } if ("undef" == e.Name) { meteorMetaData.UnDefine = e.InnerText; } if ("xdef" == e.Name) //经度方向 { meteorMetaData.nColumn = int.Parse(e.GetAttribute("Number")); meteorMetaData.lons = new GMAngle[meteorMetaData.nColumn]; if (e.GetAttribute("Style") == "linear") { meteorMetaData.lonInterval = float.Parse(e.GetAttribute("Interval")); for (int i = 0; i < meteorMetaData.lons.Length; i++) { meteorMetaData.lons[i] = GMAngle.FromDegrees(float.Parse(e.GetAttribute("Orignal")) + float.Parse(e.GetAttribute("Interval")) * i); } } else { string[] data = e.InnerText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < meteorMetaData.lons.Length; i++) { meteorMetaData.lons[i] = GMAngle.FromDegrees(float.Parse(data[i])); } } } if ("ydef" == e.Name) //纬度方向 { meteorMetaData.nRow = int.Parse(e.GetAttribute("Number")); meteorMetaData.lats = new GMAngle[meteorMetaData.nRow]; if (e.GetAttribute("Style") == "linear") { meteorMetaData.latInterval = float.Parse(e.GetAttribute("Interval")); for (int i = 0; i < meteorMetaData.lats.Length; i++) { meteorMetaData.lats[i] = GMAngle.FromDegrees(float.Parse(e.GetAttribute("Orignal")) + float.Parse(e.GetAttribute("Interval")) * i); } } else { string[] data = e.InnerText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < meteorMetaData.lats.Length; i++) { meteorMetaData.lats[i] = GMAngle.FromDegrees(float.Parse(data[i])); } } } if ("zdef" == e.Name) //高程方向 { meteorMetaData.nLevel = int.Parse(e.GetAttribute("Number")); meteorMetaData.levels = new float[meteorMetaData.nLevel]; if (e.GetAttribute("Style") == "linear") { for (int i = 0; i < meteorMetaData.levels.Length; i++) { meteorMetaData.levels[i] = float.Parse(e.GetAttribute("Orignal")) + float.Parse(e.GetAttribute("Interval")) * i; } } else { string[] data = e.InnerText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < meteorMetaData.levels.Length; i++) { meteorMetaData.levels[i] = float.Parse(data[i]); } } } if ("tdef" == e.Name) //时间 { meteorMetaData.nTime = int.Parse(e.GetAttribute("Number")); meteorMetaData.times = new string[meteorMetaData.nTime]; string[] data = e.GetAttribute("Orignal").Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); meteorMetaData.startTime = new DateTime(int.Parse(data[3]), int.Parse(data[2]), int.Parse(data[1]), int.Parse(data[0]), 0, 0); } } } if (root.FirstChild.NextSibling.Name == "Data") { XmlNodeList dataList = root.FirstChild.NextSibling.ChildNodes; foreach (XmlElement e in dataList) { meteorMetaData.varNameList.Add(e.Name); } } if (root.LastChild.Name == "MergeData") { XmlNodeList mergeList = root.LastChild.ChildNodes; foreach (XmlElement e in mergeList) { meteorMetaData.MergeNameList.Add(e.Name); } } } }