/// <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); }
//转换表中的值 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_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 }
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"); VillageCount = AggregateToVillage.get_VillageCount(); VillageCode_list = AggregateToVillage.get_VillageCode(); 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 < VillageCount; 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("@villagecode", VillageCode_list[j]), new SqlParameter("@nutrient_code", nutrient_list[h]), new SqlParameter("@sum_result", SqlDbType.Float) }; param[4].Direction = ParameterDirection.Output; string value = AggregateToVillage.get_SoilVillageValue("calc_village_SOILNUTRIENT", param); if (value != "") { DataRow row = dt.NewRow(); row["作业站"] = DataBaseOperate.getVillName(VillageCode_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(); }
private void btn_calculation_Click(object sender, EventArgs e) { //获取crop_code //string cod = cbx_croptype.SelectedValue.ToString(); //开始汇总 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; } //获取villagecount int VillageCount = AggregateToVillage.get_VillageCount(); //获取具体的VillageCode List <string> VillageCode_list = AggregateToVillage.get_VillageCode(); //获取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 < VillageCount; 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("@villagecode", VillageCode_list[j]), new SqlParameter("@sum_result", SqlDbType.Float) }; param[3].Direction = ParameterDirection.Output; string value = ""; switch (lbl_tablename.Text) { //计算汇总结果,并加入到datatable中 case "WATERRETRIEVAL": value = AggregateToVillage.get_VillageValue("calc_village_WATERRETRIEVAL", param); break; case "CHLOROPHYLLRETRIEVAL": value = AggregateToVillage.get_VillageValue("calc_village_CHLOROPHYLLRETRIEVAL", param); break; case "CROPYIELD": value = AggregateToVillage.get_VillageValue("calc_village_CROPYIELD", param); break; case "MATUREPERIOD": value = AggregateToVillage.get_VillageValue("calc_village_MATUREPERIOD", param); break; } if (value != "") { DataRow row = dt.NewRow(); row["作业站"] = DataBaseOperate.getVillName(VillageCode_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(); }
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 }