Пример #1
0
 //选中表格某一行事件
 private void gridView1_MouseDown(object sender, MouseEventArgs e)
 {
     DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hi = this.gridView1.CalcHitInfo(new Point(e.X, e.Y));
     if (e.Button == MouseButtons.Left && e.Clicks == 2)
     {
         //判断光标是否在行范围内
         if (hi.InRow)
         {
             int vsRowNum = hi.RowHandle;//鼠标选中行号
             //每次抽样得到的样本
             sampleTable = SampleZones[vsRowNum];
             string outfile = Path.Combine(ConstDef.PATH_TEMP, DateTime.Now.ToFileTime().ToString() + ".shp");
             try
             {
                 SampleSimulation Sim = new SampleSimulation();
                 if (Sim.CreateShpFile(cBFile.Text, sampleTable, outfile))
                 {
                     //添加第i次得到的样本结果到主地图视图
                     //MapAPI.AddShpFileToMap(outfile);
                     MapAPI.AddShpFileToMap(outfile);
                 }
             }
             catch (Exception ex)
             {
                 XtraMessageBox.Show(ex.Message);
             }
         }
     }
 }
Пример #2
0
 private void cBESample_TextChanged(object sender, EventArgs e)
 {
     ExportData.secSample = cBESample.Text;
     SampleSimulation.BindFields(cBESample.Text, cBESamBasis);
     SampleSimulation.BindFields(cBESample.Text, cBESamLayer);
     SampleSimulation.BindFields(cBESample.Text, cBESamSurvey);
     SampleSimulation.BindFields(cBESample.Text, cBESamCunName);
 }
Пример #3
0
        //入样总体
        private void btnOpenFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog fileDialog = new OpenFileDialog();

            fileDialog.Multiselect = true;
            fileDialog.Title       = "请选择文件";
            fileDialog.Filter      = "shapefile(*.shp)|*.shp|All files(*.*)|*.*";

            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                string filepath = fileDialog.FileName.ToString();
                cBFile.Text = filepath;//获取文件路径
                SampleSimulation.BindFields(cBFile.Text, cBELayer);
                SampleSimulation.BindFields(cBFile.Text, cBEBasis);
                SampleSimulation.BindFields(cBFile.Text, cBEClassic);
            }
        }
Пример #4
0
 //选中表格某一行事件
 private void gridView1_MouseDown(object sender, MouseEventArgs e)
 {
     DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hi = this.gridView1.CalcHitInfo(new Point(e.X, e.Y));
     if (e.Button == MouseButtons.Left && e.Clicks == 2)
     {
         //判断光标是否在行范围内
         if (hi.InRow)
         {
             int vsRowNum = hi.RowHandle;//鼠标选中行号
             //每次抽样得到的样本
             sampleTable = SampleZones[vsRowNum];
             string outfile = Path.Combine(ConstDef.PATH_TEMP, DateTime.Now.ToFileTime().ToString() + ".shp");
             try
             {
                 SampleSimulation Sim = new SampleSimulation();
                 if (Sim.CreateShpFile(cBFile.Text, sampleTable, outfile))
                 {
                     //添加第i次得到的样本结果到主地图视图
                     //MapAPI.AddShpFileToMap(outfile);
                     string layerName = string.Format("第{0}次抽样结果", vsRowNum + 1);
                     for (int i = 0; i < _pMapControl.LayerCount; i++)
                     {
                         ILayer pLayer = _pMapControl.get_Layer(i);
                         if (pLayer is IFeatureLayer)
                         {
                             if (pLayer.Name == layerName)
                             {
                                 _pMapControl.Map.DeleteLayer(pLayer);
                             }
                         }
                     }
                     IFeatureClass pFC = EngineAPI.OpenFeatureClass(outfile);
                     IFeatureLayer pFL = new FeatureLayerClass();
                     pFL.Name         = layerName;
                     pFL.FeatureClass = pFC;
                     _pMapControl.AddLayer(pFL);
                 }
             }
             catch (Exception ex)
             {
                 XtraMessageBox.Show(ex.Message);
             }
         }
     }
 }
Пример #5
0
        private void siBDistribute_Click(object sender, EventArgs e)
        {
            int vsRowNum = gridView1.FocusedRowHandle;//鼠标选中行号

            //每次抽样得到的样本
            sampleTable = SampleZones[vsRowNum];
            string outfile = Path.Combine(ConstDef.PATH_TEMP, DateTime.Now.ToFileTime().ToString() + ".shp");

            try
            {
                SampleSimulation Sim = new SampleSimulation();
                if (Sim.CreateShpFile(cBFile.Text, sampleTable, outfile))
                {
                    //添加第i次得到的样本结果到主地图视图
                    //MapAPI.AddShpFileToMap(outfile);
                    string layerName = string.Format("第{0}次抽样结果", vsRowNum + 1);
                    for (int i = 0; i < _pMapControl.LayerCount; i++)
                    {
                        ILayer pLayer = _pMapControl.get_Layer(i);
                        if (pLayer is IFeatureLayer)
                        {
                            if (pLayer.Name == layerName)
                            {
                                _pMapControl.Map.DeleteLayer(pLayer);
                            }
                        }
                    }
                    IFeatureClass pFC = EngineAPI.OpenFeatureClass(outfile);
                    IFeatureLayer pFL = new FeatureLayerClass();
                    pFL.Name         = layerName;
                    pFL.FeatureClass = pFC;
                    _pMapControl.AddLayer(pFL);
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message);
            }
        }
Пример #6
0
 private void cBSamplePopu_TextChanged(object sender, EventArgs e)
 {
     ExportData.firstUnit = cBSamplePopu.Text;
     SampleSimulation.BindFields(cBSamplePopu.Text, cBEPopuBasis);
     SampleSimulation.BindFields(cBSamplePopu.Text, cBEPopuLayer);
 }
Пример #7
0
        //抽样仿真
        private void siBSimulation_Click(object sender, EventArgs e)//抽样仿真
        {
            sampleSumTable.Clear();
            sampleSumTable.Columns.Clear();
            if (string.IsNullOrEmpty(cBFile.Text.TrimEnd()) || string.IsNullOrEmpty(cBEBasis.Text.TrimEnd()) || string.IsNullOrEmpty(cBELayer.Text.TrimEnd()))
            {
                MessageBox.Show("错误信息:\n入样总体文件是必需的!\n抽样依据的值:是必需的!\n分层的值是:必需的!");
            }
            else
            {
                IFeatureClass    allVillage = EngineAPI.OpenFeatureClass(cBFile.Text);
                ITableConversion conver     = new TableConversion();
                sampleSumTable = conver.AETableToDataTable(allVillage);

                SamplingSum = sampleSumTable.Rows.Count;
                if (string.IsNullOrEmpty(tENum.Text.TrimEnd()) && string.IsNullOrEmpty(tEProportion.Text.TrimEnd()) || string.IsNullOrEmpty(tETimes.Text.TrimEnd()))
                {
                    MessageBox.Show("错误信息:\n样本量与抽样比例的值二选一,必须有一个有值!\n抽样次数值是:必需的!");
                }
                else
                {
                    if (cENum.Checked == true)
                    {
                        sampleNum = Convert.ToInt32(tENum.Text);
                    }
                    else
                    {
                        sampleNum = Convert.ToInt32(SamplingSum * (Convert.ToDouble(tEProportion.Text) / 100));
                    }
                    if (0 > sampleNum || sampleNum > SamplingSum)
                    {
                        MessageBox.Show("输入的样本量超出范围,请重新输入!");
                        return;
                    }
                    //显示
                    groupCResult.Visible = true;
                    groupC.Visible       = true;
                    this.MinimumSize     = new Size(755, 425);
                    groupCHelp.Location  = new Point(758, 12);
                    //结果汇总
                    lBCResult.Items.Clear();//清空
                    lBCResult.Items.Add("抽样单元的总数:" + SamplingSum);
                    lBCResult.Items.Add("抽中样本数:" + sampleNum);
                    int    sampleTimes = Convert.ToInt32(tETimes.Text);
                    double Cv          = 0.0;
                    double MSEYr       = 0.0;
                    //EstArea 重复抽样得到的估算面积表
                    DataTable        EstArea = new DataTable();
                    SampleSimulation Sim     = new SampleSimulation();
                    if (Sim.SampleEvaluating(cBFile.Text, sampleTimes, sampleNum, cBELayer.Text,
                                             cBEBasis.Text, cBEClassic.Text, EstArea, ref MSEYr, ref Cv, SampleZones))
                    {
                        lBCResult.Items.Add("均方误差(MSE):" + (MSEYr).ToString("f2"));
                        lBCResult.Items.Add("变异系数:" + (Cv * 100).ToString("f1") + "%");
                        gridControl1.DataSource = EstArea;
                        //chartData 绑定估计结果
                        chartData.Series.Clear();
                        Series dataTable1Series = new Series("", ViewType.Spline);
                        dataTable1Series.ArgumentDataMember  = EstArea.Columns[0].ColumnName;
                        dataTable1Series.ValueDataMembers[0] = EstArea.Columns[1].ColumnName;
                        dataTable1Series.DataSource          = EstArea;
                        chartData.Series.Add(dataTable1Series);
                    }
                }
            }
        }
Пример #8
0
 private void cBFile_TextChanged(object sender, EventArgs e)
 {
     SampleSimulation.BindFields(cBFile.Text, cBELayer);
     SampleSimulation.BindFields(cBFile.Text, cBEBasis);
     SampleSimulation.BindFields(cBFile.Text, cBEClassic);
 }
Пример #9
0
 private void siBOK_Click(object sender, EventArgs e)
 {
     if (string.IsNullOrEmpty(cBESave.Text.Trim()))
     {
         MessageBox.Show("错误信息:\n输出结果的值:是必需的");
     }
     else
     {
         frmWaitDialog frmWait = new frmWaitDialog("正在生成...", "提示信息");
         try
         {
             DataTable        ExtandTable = new DataTable();
             SampleSimulation Sim         = new SampleSimulation();
             int sampleSum       = SamplingSum - sampleNum; //第一次抽样,剩余的样本总量
             int sampleExtandNum = 0;                       //扩充的样本量
             //每次抽样得到的样本
             sampleTable = SampleZones[gridView1.FocusedRowHandle];
             if (string.IsNullOrEmpty(tEExtend.Text.Trim()) && string.IsNullOrEmpty(tEScale.Text.Trim()))
             {
                 ExtandTable = sampleTable;
             }
             else
             {
                 if (cEExtend.Checked == true)
                 {
                     sampleExtandNum = Convert.ToInt32(tEExtend.Text);
                 }
                 else
                 {
                     sampleExtandNum = Convert.ToInt32(sampleSum * (Convert.ToDouble(tEScale.Text) / 100));
                 }
                 if (0 > sampleExtandNum || sampleExtandNum > sampleSum)
                 {
                     MessageBox.Show("输入的扩充样本量超出范围,请重新输入!");
                     return;
                 }
                 else if (sampleExtandNum == 0)
                 {
                     ExtandTable = sampleTable;
                 }
                 else
                 {
                     ExtandTable = Sim.ExtendSample(sampleSumTable, sampleTable, sampleExtandNum, cBELayer.Text, cBEBasis.Text);
                 }
             }
             if (ExtandTable != null)
             {
                 if (Sim.CreateShpFile(cBFile.Text, ExtandTable, cBESave.Text))
                 {
                     BLL.ProductMeta meta = new ProductMeta(cBESave.Text.TrimEnd(), "", "", "一级样本村", "抽样和面积推算结果");
                     meta.WriteShpMeta();
                     BLL.ProductQuickView view = new BLL.ProductQuickView(cBESave.Text.TrimEnd());
                     view.Create();
                     System.Windows.Forms.DialogResult dialogResult = XtraMessageBox.Show("保存样本成功,是否加载结果?", "提示信息", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Asterisk);
                     if (dialogResult == System.Windows.Forms.DialogResult.Yes)
                     {
                         //添加结果到主地图视图
                         IFeatureClass pFC = EngineAPI.OpenFeatureClass(cBESave.Text);
                         if (pFC != null)
                         {
                             IFeatureLayer pFLyr = new FeatureLayerClass();
                             pFLyr.FeatureClass = pFC;
                             pFLyr.Name         = (pFC as IDataset).Name;
                             MapAPI.UniqueValueRender(pFLyr, "KC");
                             EnviVars.instance.MapControl.AddLayer(pFLyr);
                         }
                     }
                 }
             }
         }
         catch (Exception ex)
         {
             XtraMessageBox.Show(ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
             Log.WriteLog(typeof(frmSampleSimulation), ex);
         }
         finally
         {
             frmWait.Close();
             this.Close();
         }
     }
 }
Пример #10
0
 private void siBOK_Click(object sender, EventArgs e)
 {
     if (string.IsNullOrEmpty(cBESave.Text.Trim()))
     {
         MessageBox.Show("错误信息:\n输出结果的值:是必需的");
     }
     else
     {
         WaitDialogForm frmWait = new WaitDialogForm("正在生成...", "提示信息");
         try
         {
             DataTable        ExtandTable = new DataTable();
             SampleSimulation Sim         = new SampleSimulation();
             int sampleSum       = SamplingSum - sampleNum; //第一次抽样,剩余的样本总量
             int sampleExtandNum = 0;                       //扩充的样本量
             if (string.IsNullOrEmpty(tEExtend.Text.Trim()) && string.IsNullOrEmpty(tEScale.Text.Trim()))
             {
                 ExtandTable = sampleTable;
             }
             else
             {
                 if (cEExtend.Checked == true)
                 {
                     sampleExtandNum = Convert.ToInt32(tEExtend.Text);
                 }
                 else
                 {
                     sampleExtandNum = Convert.ToInt32(sampleSum * (Convert.ToDouble(tEScale.Text) / 100));
                 }
                 if (0 > sampleExtandNum || sampleExtandNum > sampleSum)
                 {
                     MessageBox.Show("输入的扩充样本量超出范围,请重新输入!");
                     return;
                 }
                 else if (sampleExtandNum == 0)
                 {
                     ExtandTable = sampleTable;
                 }
                 else
                 {
                     ExtandTable = Sim.ExtendSample(sampleSumTable, sampleTable, sampleExtandNum, cBELayer.Text, cBEBasis.Text);
                 }
             }
             if (ExtandTable != null)
             {
                 if (Sim.CreateShpFile(cBFile.Text, ExtandTable, cBESave.Text))
                 {
                     System.Windows.Forms.DialogResult dialogResult = XtraMessageBox.Show("保存样本成功,是否加载结果?", "提示信息", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Asterisk);
                     if (dialogResult == System.Windows.Forms.DialogResult.Yes)
                     {
                         //添加结果到主地图视图
                         //MapAPI.AddShpFileToMap(cBESave.Text);
                         MapAPI.AddShpFileToMap(cBESave.Text);
                     }
                 }
             }
         }
         catch (Exception ex)
         {
             XtraMessageBox.Show(ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
             Log.WriteLog(typeof(frmSampleSimulation), ex);
         }
         finally
         {
             frmWait.Close();
             this.Close();
         }
     }
 }