Esempio n. 1
0
        /// <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("");
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
            ///////////////////////////////////////////////////////////////////////////////
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        /// <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");
            }
        }