/// <summary>
        /// 转换表中的值
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static DataTable Convert_TableValue(DataTable dt)
        {
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Columns.Count == 4)                 //根据输出列数判断是否是Soil
                {
                    if (dt.Columns[0].ColumnName == "作业站") //根据列名判断作物范围
                    {
                        dt.Rows[i][0] = DataBaseOperate.getVillName(dt.Rows[i][0].ToString());
                    }
                    else if (dt.Columns[0].ColumnName == "作业区")
                    {
                        dt.Rows[i][0] = DataBaseOperate.getTownName(dt.Rows[i][0].ToString());
                    }
                    string date_vale = ((DateTime)dt.Rows[i][1]).ToShortDateString();

                    dt.Rows[i][1] = date_vale.ToString();

                    dt.Rows[i][2] = DataBaseOperate.get_CropCHName(dt.Rows[i][2].ToString());
                    if (!string.IsNullOrEmpty(dt.Rows[i][3].ToString()))
                    {
                        dt.Rows[i][3] = Math.Round((double)dt.Rows[i][3], 3);
                    }
                }
                else //soil
                {
                    if (dt.Columns[0].ColumnName == "作业站")
                    {
                        dt.Rows[i][0] = DataBaseOperate.getVillName(dt.Rows[i][0].ToString());
                    }
                    else if (dt.Columns[0].ColumnName == "作业区")
                    {
                        dt.Rows[i][0] = DataBaseOperate.getTownName(dt.Rows[i][0].ToString());
                    }
                    string date_vale = ((DateTime)dt.Rows[i][1]).ToShortDateString();
                    dt.Rows[i][1] = date_vale.ToString();
                    //dt.Rows[i][1] = ((DateTime)dt.Rows[i][1]).ToShortDateString();
                    dt.Rows[i][2] = DataBaseOperate.get_CropCHName(dt.Rows[i][2].ToString());
                    dt.Rows[i][3] = DataBaseOperate.get_NutrientCHName(dt.Rows[i][3].ToString());
                    if (!string.IsNullOrEmpty(dt.Rows[i][4].ToString()))
                    {
                        dt.Rows[i][4] = Math.Round((double)dt.Rows[i][4], 4);
                    }
                }
            }
            return(dt);
        }
Esempio n. 2
0
        //转换表中的值
        public static DataTable convert_TableValue(string rankname, string typename, DataTable dt)
        {
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                switch (rankname)
                {
                case "PLOT":
                    dt.Rows[i][0] = DataBaseOperate.get_PlotName(dt.Rows[i][0].ToString());
                    break;

                case "COUNTY":
                    dt.Rows[i][0] = DataBaseOperate.getCountyName(dt.Rows[i][0].ToString());
                    break;

                case "VILLAGE":
                    dt.Rows[i][0] = DataBaseOperate.getVillName(dt.Rows[i][0].ToString());
                    break;

                case "TOWN":
                    dt.Rows[i][0] = DataBaseOperate.getTownName(dt.Rows[i][0].ToString());
                    break;
                }
                dt.Rows[i][2] = DataBaseOperate.get_CropCHName(dt.Rows[i][2].ToString());

                if (!typename.Contains("SOILNUTRIENT"))
                {
                    if (!string.IsNullOrEmpty(dt.Rows[i][3].ToString()))
                    {
                        dt.Rows[i][3] = Math.Round(Convert.ToDecimal(dt.Rows[i][3].ToString()), 3);
                    }
                }
                else
                {
                    dt.Rows[i][3] = DataBaseOperate.get_NutrientCHName(dt.Rows[i][3].ToString());
                    if (!string.IsNullOrEmpty(dt.Rows[i][4].ToString()))
                    {
                        dt.Rows[i][4] = Math.Round(Convert.ToDecimal(dt.Rows[i][4].ToString()), 3);
                    }
                }
            }

            return(dt);
        }
        private void btn_calculation_Click(object sender, EventArgs e)
        {
            date_count = DataBaseOperate.get_DateCount(dT_maize_s.Value, dT_maize_e.Value, "SOILNUTRIENT_PLOT");
            date_list  = DataBaseOperate.get_DateDetail(dT_maize_s.Value, dT_maize_e.Value, "SOILNUTRIENT_PLOT");
            //获取Towncount
            TownCount = AggregateToTown.get_TownCount();
            //获取具体的TownCode
            TownCode_list = AggregateToTown.get_TownCode();
            CropCount     = DataBaseOperate.get_CropCount();
            CropCode_list = DataBaseOperate.get_CropCode();
            nutrientCount = DataBaseOperate.get_NutrientCount();
            nutrient_list = DataBaseOperate.get_NutrientCode();
            if (date_count != 0)
            {
                for (int i = 0; i < date_count; i++)        //datetime循环
                {
                    for (int j = 0; j < TownCount; j++)     //villagecode循环
                    {
                        for (int k = 0; k < CropCount; k++) //crop_count循环
                        {
                            for (int h = 0; h < nutrientCount; h++)
                            {
                                //输入查询限制条件,执行存储过程
                                SqlParameter[] param = new SqlParameter[] {
                                    new SqlParameter("@time", Convert.ToDateTime(date_list[i])),
                                    new SqlParameter("@code", CropCode_list[k]),
                                    new SqlParameter("@towncode", TownCode_list[j]),
                                    new SqlParameter("@nutrient_code", nutrient_list[h]),
                                    new SqlParameter("@sum_result", SqlDbType.Float)
                                };
                                param[4].Direction = ParameterDirection.Output;
                                string value = AggregateToTown.get_SoilTownValue("calc_Town_SOILNUTRIENT", param);
                                if (value != "")
                                {
                                    DataRow row = dt.NewRow();
                                    row["作业区"]  = DataBaseOperate.getTownName(TownCode_list[j]);
                                    row["监测时间"] = Convert.ToDateTime(date_list[i]).ToShortDateString();
                                    row["作物类型"] = DataBaseOperate.get_CropCHName(CropCode_list[k]);
                                    row["养分类型"] = DataBaseOperate.get_NutrientCHName(nutrient_list[h]);
                                    row["汇总结果"] = float.Parse(value);
                                    row["汇总时间"] = DateTime.Now.ToShortDateString();
                                    dt.Rows.Add(row);
                                }
                            }
                        }
                    }
                }
                if (dt.Rows.Count == 0)
                {
                    MessageBox.Show("请检查输入条件或统计数据!");
                }
                else
                {
                    dataGridView1.DataSource = dt;
                }
            }

            else
            {
                MessageBox.Show("此时间段内,没有统计数据!");
            }

            InitDataSet();
        }
Esempio n. 4
0
        private void btn_classstatis_Click(object sender, EventArgs e)
        {
            #region 输入与输出路径条件判断

            string sImageInput = this.txt_ImageInput.Text.Trim();
            if (sImageInput.Equals(""))
            {
                MessageBox.Show("请选择待统计影像!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            //string filename = sImageInput.Substring(sImageInput.LastIndexOf("\\") + 1);
            //res = filename.Split(new char[] { '_', '.' }, StringSplitOptions.RemoveEmptyEntries);
            string filename = Path.GetFileNameWithoutExtension(sImageInput);
            res = filename.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
            string sMorTime     = res[4];
            string sResultTitle = this.cbx_VIType.Text.Trim();

            #endregion

            //调用进度条界面线程
            //Thread t = new Thread(new ThreadStart(thread1));
            //t.Start();
            #region 执行统计

            try
            {
                ProgressFunc pd  = new ProgressFunc(this.ProgressBarInfo);
                IntPtr       pre = this.Handle;
                int          ire = 0;

                //string strInFile = @"D:\share\Hongxingtest\wxf\text_data\soil\soil_organic1.tif";
                char[] strInFileList = sImageInput.ToCharArray();

                string strRegionFile     = this.txt_SHPFile.Text.Trim();
                char[] strRegionFileList = strRegionFile.ToCharArray();

                string strField     = "RASTERID";
                char[] strFieldList = strField.ToCharArray();

                int nCount = ReadShape.getShapeCount(strRegionFile);

                int[] pRegionCodeList = new int[nCount];

                double[] padfResultList = new double[nCount];
                ire = GdalAlgInterface.ImageStatisticalByVector(strInFileList, strRegionFileList, strFieldList, 2, pRegionCodeList, padfResultList, padfResultList.Length, pd, pre);
                //第三步
                //运行成功或失败,停止线程,即终止进度条。
                //t.Abort();
                string[,] arrStatistic = new string[nCount, 6];
                for (int i = 0; i < nCount; i++)
                {
                    string sRASTERID = pRegionCodeList[i].ToString();
                    arrStatistic[i, 0] = sMorTime;//文件名中的时间,从文件名中解析,此处获取的系统时间只为测试
                    arrStatistic[i, 1] = DataBaseOperate.getTownName(DataBaseOperate.getGLQ(sRASTERID));
                    //arrStatistic[i, 1] = sGLQName;
                    arrStatistic[i, 2] = DataBaseOperate.getVillName(DataBaseOperate.getJMZ(sRASTERID));
                    //arrStatistic[i, 2] = sJMZName;
                    //arrStatistic[i, 3] = sPlotName;
                    arrStatistic[i, 3] = DataBaseOperate.getPlotName(sRASTERID);
                    arrStatistic[i, 4] = DataBaseOperate.getPlotId(sRASTERID);
                    //arrStatistic[i, 4] = sRASTERID; "区域代码"
                    arrStatistic[i, 5] = padfResultList[i].ToString("0.00");
                }
                //string sResultTitle = DataBaseOperate.getNUTRIENTTableTitleName(res[2]);

                //表头
                string[] arrName = { "监测时间", "作业区", "作业站", "地块名称", "地块编号", sResultTitle };
                //数组行按","拆分后转DataTable
                dtInfo = StringFormater.Convert(arrName, arrStatistic);
                InitDataSet();
                //dgvInfo.DataSource = dt;
            }
            catch (Exception ex)
            {
                //第三步
                //运行成功或失败,停止线程,即终止进度条。
                //t.Abort();
                MessageBox.Show(ex.Message);
            }
            #endregion
        }
Esempio n. 5
0
        //汇总
        private void btn_calculation_Click(object sender, EventArgs e)
        {
            //开始汇总
            int           date_count = 0;
            List <string> date_list  = null;

            switch (lbl_tablename.Text)
            {
            case "WATERRETRIEVAL":
                //处在选择的时间范围内的天数
                date_count = DataBaseOperate.get_DateCount(dT_maize_s.Value, dT_maize_e.Value, "WATERRETRIEVAL_PLOT");
                //获取具体的时间列表
                date_list = DataBaseOperate.get_DateDetail(dT_maize_s.Value, dT_maize_e.Value, "WATERRETRIEVAL_PLOT");
                break;

            case "CHLOROPHYLLRETRIEVAL":
                date_count = DataBaseOperate.get_DateCount(dT_maize_s.Value, dT_maize_e.Value, "CHLOROPHYLLRETRIEVAL_PLOT");
                //获取具体的时间列表
                date_list = DataBaseOperate.get_DateDetail(dT_maize_s.Value, dT_maize_e.Value, "CHLOROPHYLLRETRIEVAL_PLOT");
                break;

            case "CROPYIELD":
                date_count = DataBaseOperate.get_DateCount(dT_maize_s.Value, dT_maize_e.Value, "CROPYIELD_PLOT");
                //获取具体的时间列表
                date_list = DataBaseOperate.get_DateDetail(dT_maize_s.Value, dT_maize_e.Value, "CROPYIELD_PLOT");
                break;

            case "MATUREPERIOD":
                date_count = DataBaseOperate.get_DateCount(dT_maize_s.Value, dT_maize_e.Value, "MATUREPERIOD_PLOT");
                //获取具体的时间列表
                date_list = DataBaseOperate.get_DateDetail(dT_maize_s.Value, dT_maize_e.Value, "MATUREPERIOD_PLOT");
                break;
            }

            //获取Towncount
            int TownCount = AggregateToTown.get_TownCount();
            //获取具体的TownCode
            List <string> TownCode_list = AggregateToTown.get_TownCode();
            //获取CropCount
            int CropCount = DataBaseOperate.get_CropCount();
            //获取具体的CropCode
            List <string> CropCode_list = DataBaseOperate.get_CropCode();

            //开始汇总
            if (date_count != 0)
            {
                for (int i = 0; i < date_count; i++)        //datetime循环
                {
                    for (int j = 0; j < TownCount; j++)     //villagecode循环
                    {
                        for (int k = 0; k < CropCount; k++) //crop_count循环
                        {
                            //输入查询限制条件,执行存储过程
                            SqlParameter[] param = new SqlParameter[] {
                                new SqlParameter("@time", Convert.ToDateTime(date_list[i])),
                                new SqlParameter("@code", CropCode_list[k]),
                                new SqlParameter("@towncode", TownCode_list[j]),
                                new SqlParameter("@sum_result", SqlDbType.Float)
                            };
                            param[3].Direction = ParameterDirection.Output;
                            string value = "";
                            switch (lbl_tablename.Text)
                            {
                            //计算汇总结果,并加入到datatable中
                            case "WATERRETRIEVAL":
                                value = AggregateToTown.get_TownValue("calc_town_WATERRETRIEVAL", param);
                                break;

                            case "CHLOROPHYLLRETRIEVAL":
                                value = AggregateToTown.get_TownValue("calc_town_CHLOROPHYLLRETRIEVAL", param);
                                break;

                            case "CROPYIELD":
                                value = AggregateToTown.get_TownValue("calc_town_CROPYIELD", param);
                                break;

                            case "MATUREPERIOD":
                                value = AggregateToTown.get_TownValue("calc_town_MATUREPERIOD", param);
                                break;
                            }
                            if (value != "")
                            {
                                DataRow row = dt.NewRow();
                                row["作业区"]  = DataBaseOperate.getTownName(TownCode_list[j]);
                                row["监测时间"] = Convert.ToDateTime(date_list[i]).ToShortDateString();
                                row["作物类型"] = DataBaseOperate.get_CropCHName(CropCode_list[k]);
                                row["汇总结果"] = float.Parse(value);
                                row["汇总时间"] = DateTime.Now.ToShortDateString();
                                dt.Rows.Add(row);
                            }
                        }
                    }
                }
                if (dt.Rows.Count == 0)
                {
                    MessageBox.Show("请检查输入条件或统计数据!");
                }
                else
                {
                    dataGridView1.DataSource = dt;
                }
            }
            else
            {
                MessageBox.Show("此时间段内,没有统计数据!");
            }

            InitDataSet();
        }
Esempio n. 6
0
        private void btn_classstatis_Click(object sender, EventArgs e)
        {
            #region 输入与输出路径条件判断

            string sImageInput = this.txt_ImageInput.Text.Trim();
            if (sImageInput.Equals(""))
            {
                MessageBox.Show("请选择待统计影像!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            string filename = sImageInput.Substring(sImageInput.LastIndexOf("\\") + 1);
            res = filename.Split(new char[] { '_', '.' }, StringSplitOptions.RemoveEmptyEntries);
            #endregion

            //调用进度条界面线程
            //Thread t = new Thread(new ThreadStart(thread1));
            //t.Start();
            #region 执行统计

            try
            {
                ProgressFunc pd  = new ProgressFunc(this.ProgressBarInfo);
                IntPtr       pre = this.Handle;
                int          ire = 0;

                //string strInFile = @"D:\share\Hongxingtest\wxf\text_data\soil\soil_organic1.tif";
                char[] strInFileList = sImageInput.ToCharArray();

                string strRegionFile     = System.Windows.Forms.Application.StartupPath + "\\BaseData\\hongxing_plot.shp";
                char[] strRegionFileList = strRegionFile.ToCharArray();

                string strField     = "RASTERID";
                char[] strFieldList = strField.ToCharArray();

                int nCount = ReadShape.getShapeCount(strRegionFile);

                int[] pRegionCodeList = new int[nCount];

                double[] padfResultList = new double[nCount];
                ire = GdalAlgInterface.ImageStatisticalByVector(strInFileList, strRegionFileList, strFieldList, 2, pRegionCodeList, padfResultList, padfResultList.Length, pd, pre);
                //第三步
                //运行成功或失败,停止线程,即终止进度条。
                //t.Abort();
                string[,] arrStatistic = new string[nCount, 6];
                for (int i = 0; i < nCount; i++)
                {
                    string sRASTERID = pRegionCodeList[i].ToString();
                    //获得后,到PLOT_DKINFO中找到用sRASTERID找到对应PlotID
                    //string sPlotID = sRASTERID;///此处为测试
                    ///到PLOT_DKINFO中找到用sRASTERID找到对应GLQ,再用GLQ到TOWN表里找到对应的[TownName]进行显示到这里(PLOT_DKINFO.GLQ=TOWN.TowCode);
                    //string sGLQName = "作业区_TOWN.TownName";
                    ///到PLOT_DKINFO中找到用sRASTERID找到对应JMZ,再用GLQ到VILLAGE表里找到对应的VillName进行显示到这里(PLOT_DKINFO.JMZ=VILLAGE.[VillCode]);
                    ///string sJMZName = "作业站_VILLAGE.VillName";
                    ///到PLOT_DKINFO中找到用sRASTERID找到对应FULLNAME,显示到这里;
                    //string sPlotName = "地块名称_[PLOT_DKINFO].[FULLNAME]";

                    arrStatistic[i, 0] = res[2];//文件名中的时间,从文件名中解析,此处获取的系统时间只为测试
                    arrStatistic[i, 1] = DataBaseOperate.getTownName(DataBaseOperate.getGLQ(sRASTERID));
                    //arrStatistic[i, 1] = sGLQName;
                    arrStatistic[i, 2] = DataBaseOperate.getVillName(DataBaseOperate.getJMZ(sRASTERID));
                    //arrStatistic[i, 2] = sJMZName;
                    //arrStatistic[i, 3] = sPlotName;
                    arrStatistic[i, 3] = DataBaseOperate.getPlotName(sRASTERID);
                    arrStatistic[i, 4] = DataBaseOperate.getPlotId(sRASTERID);
                    //arrStatistic[i, 4] = sRASTERID; "区域代码"

                    if (res[0].Contains("RETRIEVAL"))
                    {
                        //int result = (int)(padfResultList[i]*100);
                        arrStatistic[i, 5] = Math.Round(padfResultList[i]).ToString();
                    }
                    else
                    {
                        arrStatistic[i, 5] = padfResultList[i].ToString("0.00");
                    }
                }

                string sResultTitle = DataBaseOperate.getTableTitleName(res[0], res[1]);
                //表头
                string[] arrName = { "监测时间", "作业区", "作业站", "地块名称", "地块编号", sResultTitle };
                //数组行按","拆分后转DataTable
                dtInfo = StringFormater.Convert(arrName, arrStatistic);
                InitDataSet();
                //dgvInfo.DataSource = dt;
            }
            catch (Exception ex)
            {
                //第三步
                //运行成功或失败,停止线程,即终止进度条。
                //t.Abort();
                MessageBox.Show(ex.Message);
            }
            #endregion
        }