/// <summary> /// 根据行政区域,起止时间从CIMISS通过SURF_CHN_MAIN_MIN获取分钟温度 /// </summary> /// <param name="sDate">开始时间</param> /// <param name="eDate">结束时间</param> /// <param name="adminCodes">行政区域编码</param> /// <returns>CIMISS返回的数据</returns> public string CIMISS_SK_Tem_Minute_byTimeRangeAndRegion_SURF_CHN_MAIN_MIN(DateTime sDate, DateTime eDate, string adminCodes) { try { /* 1. 定义client对象 */ DataQueryClient client = new DataQueryClient(); /* 2. 调用方法的参数定义,并赋值 */ /* 2.1 用户名&密码 */ String userId = _userId; // String pwd = _pwd; // /* 2.2 接口ID */ String interfaceId1 = "getSurfEleInRegionByTimeRange"; /* 2.3 接口参数,多个参数间无顺序 */ Dictionary <String, String> paramsqx = new Dictionary <String, String>(); // 必选参数 paramsqx.Add("dataCode", "SURF_CHN_MAIN_MIN"); // 资料代码 //检索时间段 paramsqx.Add("timeRange", '[' + sDate.ToUniversalTime().ToString("yyyyMMddHHmm00,") + eDate.ToUniversalTime().ToString("yyyyMMddHHmm00]")); paramsqx.Add("elements", "Datetime,Station_Id_C,TEM"); paramsqx.Add("adminCodes", adminCodes); // 可选参数 //paramsqx.Add("orderby", "Station_ID_C:ASC"); // 排序:按照站号从小到大 /* 2.4 返回文件的格式 */ String dataFormat = "tabText"; StringBuilder QXSK = new StringBuilder();//返回字符串 // 初始化接口服务连接资源 client.initResources(); // 调用接口 int rst = client.callAPI_to_serializedStr(userId, pwd, interfaceId1, paramsqx, dataFormat, QXSK); // 释放接口服务连接资源 client.destroyResources(); paramsqx = null; string strData = Convert.ToString(QXSK); QXSK = null; try { strData = strData.Replace("\r\n", "\n"); string strLS = strData.Split('\n')[0].Split()[0].Split('=')[1]; rst = Convert.ToInt32(Regex.Replace(strLS, "\"", "")); if (rst == 0) { return(strData); } else { strData = ""; } } catch { strData = ""; } return(strData); } catch (Exception) { return(""); } }
String pwd = "YZHHGDJM"; // //根据起报时间从CIMISS获取中央指导预报 public List <CIMISS文件信息> 获取中央指导预报(DateTime qbDatetime) { List <CIMISS文件信息> fileLists = new List <CIMISS文件信息>(); /* 1. 定义client对象 */ DataQueryClient client = new DataQueryClient(); /* 2. 调用方法的参数定义,并赋值 */ /* 2.2 接口ID */ String interfaceId1 = "getSevpFileByTime"; /* 2.3 接口参数,多个参数间无顺序 */ Dictionary <String, String> paramsqx = new Dictionary <String, String>(); // 必选参数 paramsqx.Add("dataCode", "SEVP_WEFC"); // 资料代码 paramsqx.Add("times", qbDatetime.ToUniversalTime().ToString("yyyyMMddHHmmss")); paramsqx.Add("elements", "File_URL,Prod_Code,FILE_NAME_ORIG"); // 可选参数 //paramsqx.Add("orderby", "Station_ID_C:ASC"); // 排序:按照站号从小到大 /* 2.4 返回文件的格式 */ String dataFormat = "text"; StringBuilder QXSK = new StringBuilder();//返回字符串 // 初始化接口服务连接资源 client.initResources(); // 调用接口 int rst = client.callAPI_to_serializedStr(userId, pwd, interfaceId1, paramsqx, dataFormat, QXSK); // 释放接口服务连接资源 client.destroyResources(); string strData = Convert.ToString(QXSK); try { strData = Regex.Replace(strData, "\r\n", "\n"); string strLS = strData.Split('\n')[0].Split()[0].Split('=')[1]; rst = Convert.ToInt32(Regex.Replace(strLS, "\"", "")); if (rst == 0) { string[] szls = strData.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 2; i < szls.Length; i++) { string[] datals = szls[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); fileLists.Add(new CIMISS文件信息() { fileName = datals[6], fileUrl = datals[3] }); } return(fileLists); } } catch { } return(fileLists); }
static void Main(string[] args) { /////////////////////////////////////////////////////////////////////////////// //介绍性开头 Console.WriteLine("++++++++++++++++++++++++++++++++++++++++++++++++++++++"); Console.WriteLine("+++ Download Hour Rain From CmissServer V1.0 +++"); Console.WriteLine("+++++ Supported By CaoYong 2018.08.29 +++++++++"); Console.WriteLine("+++++ QQ: 403637605 +++++++++"); Console.WriteLine("++++++++++++++++++++++++++++++++++++++++++++++++++++++"); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// //打开计时器 Stopwatch sw = new Stopwatch(); //创建计时器 sw.Start(); //开启计数器 /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// ///通用设置 string appDir = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase; //程序启动文件夹 //string appDir = @"E:/Test/DownloadHourRainCimissData_V1/"; //程序启动文件夹测试 Environment.CurrentDirectory = appDir; //设置shell启动文件夹 string logPath = StringProcess.DateReplace(appDir + "log/YYYYMMDD.txt", DateTime.Now, 000); //日志文件夹地址 Log simpleLog = new Log(logPath); //建立log对象,用于日志的记录 //输出站点ID计算信息 /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// try { /////////////////////////////////////////////////////////////////////////// //时间处理(北京时) DateTime dtNow = DateTime.Now; //程序启动时间(北京时) if (args.Length == 0) //实时运算处理 { dtNow = DateTime.Now; //实际运行 //dtNow = new DateTime(2018, 12, 06, 10, 05, 00); //测试运行 } else if (args.Length == 1 && args[0].Length == 12) //指定日期运算处理 { try { dtNow = DateTime.ParseExact(args[0], "yyyyMMddHHmm", System.Globalization.CultureInfo.CurrentCulture); } catch { simpleLog.WriteError("Date Args Content Is Not Right!", 1); return; } } else { simpleLog.WriteError("Date Args Number Is Not Right!", 1); return; } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// //读取控制文件 string paraFilePath = appDir + @"para/para.ini"; //控制文件地址 string r01hStaSamplePath = null; //站点数据保存地址(小时降水) if (!File.Exists(paraFilePath)) { simpleLog.WriteError("Para File Is Not Exist!", 1); return; } else { FileStream paraFS = new FileStream(paraFilePath, FileMode.Open, FileAccess.Read); StreamReader paraSR = new StreamReader(paraFS, Encoding.GetEncoding("gb2312")); { try { string strTmp = paraSR.ReadLine(); string[] strArrayTmp = strTmp.Split(new char[] { '=' }); r01hStaSamplePath = strArrayTmp[1].Trim(); //站点数据保存地址 } catch { simpleLog.WriteError("Para Content Is Not Right!", 1); return; } } paraSR.Close(); paraFS.Close(); } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// //下载小时级站点降水 { Console.WriteLine("Step2: Download Hour Pre Data..."); DataQueryClient client = new DataQueryClient(); string userId = ConCmiss.USERID; string pwd = ConCmiss.PWD; string interfaceId = "getSurfEleByTime"; Dictionary <String, String> paramsData = new Dictionary <String, String> { { "dataCode", "SURF_CHN_MUL_HOR" }, // 资料代码 { "elements", "Station_Id_d,Lon,Lat,PRE_1h" }, // 检索要素:站号、小时降水 { "orderby", "Station_Id_d:ASC" }, // 排序:按照站号从小到大 { "times", "20180831030000" } // 检索时间 }; RetArray2D rddata = new RetArray2D(); client.initResources(); DateTime dtBase = new DateTime(dtNow.Year, dtNow.Month, dtNow.Day, dtNow.Hour, 00, 00).AddHours(-8); //下载数据基准时间,并转化为世界时 for (int beforeMin = 0; beforeMin <= 60 * 24; beforeMin = beforeMin + 60) //冗余设置,下载过去24小时内的逐1小时降水 { DateTime dtNeed = dtBase.AddMinutes(-1.0 * beforeMin); //所需下载数据所在时间 paramsData["times"] = dtNeed.ToString("yyyyMMddHHmm00"); //更新下载参数中时间 string outputPath = StringProcess.DateReplace(r01hStaSamplePath, dtNeed, 000); if (File.Exists(outputPath)) //如果文件存在则不予下载 { continue; } client.callAPI_to_array2D(userId, pwd, interfaceId, paramsData, rddata); List <PointData> ltOutput = new List <PointData>(); for (int n = 0; n < rddata.data.GetLength(0); n++) { ltOutput.Add(new PointData(rddata.data[n][0].Trim(), double.Parse(rddata.data[n][1]), double.Parse(rddata.data[n][2]), double.Parse(rddata.data[n][3]))); } ScatterData sdOutput = new ScatterData(ltOutput.ToArray()); sdOutput.ClearToNumGreaterThan(0.0, 100.0); //简单质量控制 sdOutput.ClearToNumLessThan(0.0, 0.0); if (sdOutput.StaData.Length >= 55000) //如果数据量超过5500条,则认为数据已经完整,则写出数据,否则不予写出,配合更新数据 { string strHeader = StringProcess.DateReplace("diamond 3 YYYY年MM月DD日HH时NN分_逐01小时降水 YY MM DD HH -1 0 1 0 0", dtNeed, 000); sdOutput.WriterToMicaps3(outputPath, strHeader); } Console.Write("\rfinish {0,8:f2} %", 100.0 * (beforeMin) / (60 * 24)); } client.destroyResources(); Console.WriteLine("\rfinish ok! "); } /////////////////////////////////////////////////////////////////////////////// } catch (Exception ex) { simpleLog.WriteError(ex.Message, 1); } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// sw.Stop(); simpleLog.WriteInfo("Time Elasped: " + sw.Elapsed, 1); /////////////////////////////////////////////////////////////////////////////// }
public string CIMISS_ZDbyID(string StationID, ref string error) { /* 1. 定义client对象 */ DataQueryClient client = new DataQueryClient(); /* 2. 调用方法的参数定义,并赋值 */ /* 2.1 用户名&密码 */ String userId = "BEHT_BFHT_2131"; // String pwd = "YZHHGDJM"; // /* 2.2 接口ID */ String interfaceId1 = "getStaInfoByStaId"; /* 2.3 接口参数,多个参数间无顺序 */ Dictionary <String, String> paramsqx = new Dictionary <String, String>(); // 必选参数 paramsqx.Add("dataCode", "STA_INFO_SURF_CHN"); // 资料代码 //检索时间段 paramsqx.Add("staIds", StationID); //选择区站号 //此处增加风要素 paramsqx.Add("elements", "Station_Id_C,Station_Name,Station_levl,Lat,Lon,Alti"); // 检索要素:站号、站名、过去24h最高、最低气温、24小时降水量 // 可选参数 //paramsqx.Add("orderby", "Station_ID_C:ASC"); // 排序:按照站号从小到大 /* 2.4 返回文件的格式 */ String dataFormat = "Text"; StringBuilder QXSK = new StringBuilder();//返回字符串 // 初始化接口服务连接资源 client.initResources(); // 调用接口 int rst = client.callAPI_to_serializedStr(userId, pwd, interfaceId1, paramsqx, dataFormat, QXSK); // 释放接口服务连接资源 client.destroyResources(); string strData = Convert.ToString(QXSK); string strLS = strData.Split('"')[1]; rst = Convert.ToInt32(strLS); try { if (rst == 0) { string[] SZlinshi = strData.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); strData = ""; /*删掉CIMISS返回数据第一行的返回信息以及第二行的列标题,只保留数据*/ for (int i = 0; i < SZlinshi.Length; i++) { if (i > 1) { strData += SZlinshi[i] + '\n'; } } strData = strData.Substring(0, strData.Length - 1); } else { error += strData + "\r\n"; strData = ""; } } catch { strData = ""; } return(strData); }
/// <summary> /// 根据起报时间、时效、预报要素、经纬度范围从CIMISS获取区局智能网格要素格点数据 /// </summary> /// <param name="strTime">起报时间,北京时格式:YYYYMMDD</param> /// <param name="sx">预报时效</param> /// <param name="cc">预报层次,如果没有则空,区局智能网格除了风要素是10意外都为空</param> /// <param name="fcstEle">预报要素</param> /// <param name="swd">起始纬度</param> /// <param name="ewd">结束纬度</param> /// <param name="sjd">起始经度</param> /// <param name="ejd">结束经度</param> /// <returns></returns> public string CIMISSQJZNbyTimeJWD(string strTime, Int16 sc, string sx, string cc, string fcstEle, double swd, double ewd, double sjd, double ejd, ref string error) { /* 1. 定义client对象 */ DataQueryClient client = new DataQueryClient(); /* 2. 调用方法的参数定义,并赋值 */ /* 2.1 用户名&密码 */ String userId = "BEHT_BFHT_2131"; // String pwd = "YZHHGDJM"; // /* 2.2 接口ID */ String interfaceId1 = "getNafpEleGridInRectByTimeAndLevelAndValidtime"; /* 2.3 接口参数,多个参数间无顺序 */ Dictionary <String, String> paramsqx = new Dictionary <String, String>(); // 必选参数 paramsqx.Add("dataCode", "NAFP_NWFD_SPCC"); // 资料代码 //检索时间段 paramsqx.Add("time", strTime + sc.ToString().PadLeft(2, '0') + "0000"); paramsqx.Add("minLon", sjd.ToString()); paramsqx.Add("maxLon", ejd.ToString()); paramsqx.Add("minLat", swd.ToString()); paramsqx.Add("maxLat", ewd.ToString()); paramsqx.Add("fcstEle", fcstEle); paramsqx.Add("validTime", sx); if (cc.Trim().Length > 0) { paramsqx.Add("fcstLevel", cc); } // 可选参数 //paramsqx.Add("orderby", "Station_ID_C:ASC"); // 排序:按照站号从小到大 /* 2.4 返回文件的格式 */ String dataFormat = "Text"; StringBuilder QXSK = new StringBuilder();//返回字符串 // 初始化接口服务连接资源 client.initResources(); // 调用接口 int rst = client.callAPI_to_serializedStr(userId, pwd, interfaceId1, paramsqx, dataFormat, QXSK); // 释放接口服务连接资源 client.destroyResources(); string strData = Convert.ToString(QXSK); try { string strLS = strData.Split('\n')[0].Split()[0].Split('=')[1]; rst = Convert.ToInt32(Regex.Replace(strLS, "\"", "")); if (rst == 0) { return(strData); } else { error += strTime + "日" + sc + "时" + sx.ToString().PadLeft(2, '0') + fcstEle + "获取失败\r\n"; strData = ""; } } catch { strData = ""; } return(strData); }
public string CIMISS6H(DateTime dateTime) { /* 1. 定义client对象 */ DataQueryClient client = new DataQueryClient(); /* 2. 调用方法的参数定义,并赋值 */ /* 2.1 用户名&密码 */ string userId = "BEHT_BFHT_2131"; // string pwd = "YZHHGDJM"; // /* 2.2 接口ID */ string interfaceId1 = "getSevpFileByTime"; /* 2.3 接口参数,多个参数间无顺序 */ Dictionary <string, string> paramsqx = new Dictionary <string, string>(); // 必选参数 paramsqx.Add("dataCode", "SEVP_WEFC_6H"); // 资料代码 //检索时间段 paramsqx.Add("times", dateTime.ToUniversalTime().ToString("yyyyMMddHHmmss")); paramsqx.Add("elements", "File_URL,FILE_NAME_ORIG"); // 可选参数 //paramsqx.Add("orderby", "Station_ID_C:ASC"); // 排序:按照站号从小到大 /* 2.4 返回文件的格式 */ string dataFormat = "tabText"; StringBuilder QXSK = new StringBuilder(); //返回字符串 // 初始化接口服务连接资源 client.initResources(); // 调用接口 int rst = client.callAPI_to_serializedStr(userId, pwd, interfaceId1, paramsqx, dataFormat, QXSK); // 释放接口服务连接资源 client.destroyResources(); string strData = Convert.ToString(QXSK); try { string strLS = strData.Split('\n')[0].Split()[0].Split('=')[1]; rst = Convert.ToInt32(Regex.Replace(strLS, "\"", "")); if (rst == 0) { XmlConfig util = new XmlConfig(Environment.CurrentDirectory + @"\config\智能网格设置.xml"); string myPath = util.Read("Path6Hour"); string[] dataSz = strData.Split('\n')[2].Split(); myPath += dataSz[dataSz.Length - 1]; bool fhbs = 保存网址文件(dataSz[3], myPath); if (fhbs) { return(""); } return($"{dateTime.ToString("yyyy年MM月dd日HH时")}6小时指导预保存失败\r\n"); } return($"{dateTime.ToString("yyyy年MM月dd日HH时")}6小时指导预报获取失败\r\n"); } catch { return($"{dateTime.ToString("yyyy年MM月dd日HH时")}6小时指导预保存失败\r\n"); } }