Beispiel #1
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);
            if (filename.Contains("-"))
            {
                res = filename.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
            }
            else
            {
                res = filename.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
            }
            string sMorTime     = res[4];
            string sResultTitle = this.cbx_VIType.Text.Trim();
            string sField       = this.cbx_FieldName.Text.Trim();
            string sStaType     = this.cbx_StaValueType.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();

                char[] strFieldList = sField.ToCharArray();



                List <string> fielddatalist = ReadShape.getShapeFieldDataList(strRegionFile, sField);
                int           nCount        = fielddatalist.Count;

                List <int> intfdlist       = new List <int>(nCount);
                int[]      pRegionCodeList = new int[nCount];
                //for (int i = 0; i < nCount; i++)
                //{
                //    //转LIST出错
                //    intfdlist.Add(int.Parse(fielddatalist[i]));
                //}

                //int[] pRegionCodeList = intfdlist.ToArray();

                double[] padfResultList = new double[nCount];

                int iStatisticType = 2; //默认为平均值
                if (sStaType == "Max")
                {
                    iStatisticType = 1;
                }
                else if (sStaType == "Min")
                {
                    iStatisticType = 0;
                }

                ire = GdalAlgInterface.ImageStatisticalByVector(strInFileList, strRegionFileList, strFieldList, iStatisticType, pRegionCodeList, padfResultList, padfResultList.Length, pd, pre);
                //第三步
                //运行成功或失败,停止线程,即终止进度条。
                //t.Abort();
                string[,] arrStatistic = new string[nCount, 4];
                for (int i = 0; i < nCount; i++)
                {
                    arrStatistic[i, 0] = sMorTime;//文件名中的时间,从文件名中解析,此处获取的系统时间只为测试
                    arrStatistic[i, 1] = pRegionCodeList[i].ToString();
                    arrStatistic[i, 2] = padfResultList[i].ToString("0.00");
                    arrStatistic[i, 3] = sStaType;
                }
                //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_ok_Click(object sender, EventArgs e)
        {
            #region 输入与输出路径条件判断
            if (this.listViewImage.Items.Count <= 0)
            {
                MessageBox.Show("请选择输入影像!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            if (this.txt_ReferenceImage.Text.Equals(""))
            {
                MessageBox.Show("请输入统计单元文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            string txt_SHPFile = this.txt_ReferenceImage.Text.Trim();

            #endregion
            this.btn_ok.Enabled = false;

            #region 执行
            this.progressBar.Visible = true;
            try
            {
                foreach (ListViewItem item in this.listViewImage.Items)
                {
                    string    sFile    = item.SubItems[0].Text.Trim();
                    string    filename = Path.GetFileNameWithoutExtension(sFile);
                    string [] res      = filename.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                    string    sMorTime = res[4];
                    string    sVIType  = res[res.Length - 1].ToString();
                    if (!sVIType.Contains("NDVI") && !sVIType.Contains("EVI") && !sVIType.Contains("Band1") && !sVIType.Contains("Band2") && !sVIType.Contains("Band3") && !sVIType.Contains("Band4"))
                    {
                        break;
                    }
                    string sSensorType = res[1];
                    sSensorType = sSensorType.ToUpper();
                    string sSensorCode = "1";
                    if (sSensorType.Contains("CCD"))
                    {
                        sSensorCode = "1";
                    }
                    else if (sSensorType.Contains("WFV"))
                    {
                        sSensorCode = "3";
                    }
                    else
                    {
                        break;
                    }
                    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 = sFile.ToCharArray();

                    string strRegionFile     = txt_SHPFile;
                    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];
                    if (Path.GetExtension(txt_SHPFile).Contains("shp"))
                    {
                        for (int iStatisticType = 0; iStatisticType < 3; iStatisticType++)
                        {
                            ire = GdalAlgInterface.ImageStatisticalByVector(strInFileList, strRegionFileList, strFieldList, iStatisticType, pRegionCodeList, padfResultList, padfResultList.Length, pd, pre);
                            int   result = 0;
                            float fVI    = 0.00f;
                            for (int i = 0; i < nCount; i++)
                            {
                                string sRASTERID = pRegionCodeList[i].ToString();

                                string sPlotID = DataBaseOperate.getPlotId(sRASTERID);

                                string sStatisticResult = padfResultList[i].ToString("0.00");
                                bool   b = float.TryParse(sStatisticResult, out fVI);
                                if (!b || sStatisticResult.Contains("正"))
                                {
                                    sStatisticResult = "0.00";
                                }
                                string sVI_STATYPE = "Mean";
                                if (iStatisticType == 0)
                                {
                                    sVI_STATYPE = "Min";
                                }
                                else if (iStatisticType == 1)
                                {
                                    sVI_STATYPE = "Max";
                                }

                                SqlParameter[] param = new SqlParameter[] {
                                    new SqlParameter("@PLOTID", sPlotID),
                                    new SqlParameter("@MONITORTIME", sMorTime),
                                    new SqlParameter("@CROP_CODE", 10),
                                    new SqlParameter("@VI_TYPE", sVIType),
                                    new SqlParameter("@VI_STATYPE", sVI_STATYPE),

                                    new SqlParameter("@VI_VALUE", sStatisticResult),
                                    new SqlParameter("@SENSORTYPE", sSensorCode),
                                    new SqlParameter("@RECORDTIME", DateTime.Now)
                                };
                                result = DataBaseOperate.InsertDatabase("insert_Plot_VI", param);
                            }
                        }
                    }
                    else
                    {
                        for (int iStatisticType = 0; iStatisticType < 3; iStatisticType++)
                        {
                            ire = GdalAlgInterface.ImageStatisticalByVector(strInFileList, strRegionFileList, strFieldList, iStatisticType, pRegionCodeList, padfResultList, padfResultList.Length, pd, pre);
                        }
                    }
                }

                MessageBox.Show("统计入库完毕", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.btn_ok.Enabled = true;
                //this.btn_OpenOutPut.Visible = true;
                this.progressBar.Visible = false;
            }
            catch (Exception ex)
            {
                this.progressBar.Visible = false;
                MessageBox.Show(ex.Message);
                return;
            }
            #endregion
        }