private void btnUpdata_Click(object sender, EventArgs e)
        {
            List <int> LstIndex = new List <int>();

            SysCommon.CProgress vProgress = new SysCommon.CProgress("进度条");
            vProgress.EnableCancel    = false;//设置进度条
            vProgress.ShowDescription = true;
            vProgress.FakeProgress    = true;
            vProgress.TopMost         = true;
            try
            {
                CheckerData();
                for (int i = 0; i < dataGrid.RowCount - 1; i++)
                {
                    if (dataGrid.Rows[i].Cells["CmnSelect"].Value.ToString() == true.ToString())
                    {
                        LstIndex.Add(i);
                    }
                }
                if (LstIndex.Count == 0)
                {
                    MessageBox.Show("请选择需要更新的数据!", "提示!");
                    return;
                }
                Exception   exError  = null;
                SysGisTable sysTable = new SysGisTable(m_Workspace);
                vProgress.MaxValue = LstIndex.Count;
                vProgress.ShowProgress();
                for (int j = 0; j < LstIndex.Count; j++)
                {
                    vProgress.ProgresssValue = j + 1;
                    string strSource                    = dataGrid.Rows[LstIndex[j]].Cells["CmnPath"].Value.ToString();
                    string strFeatureClassName          = dataGrid.Rows[LstIndex[j]].Cells["CmnFeatureClassName"].Value.ToString();
                    Dictionary <string, object> dicData = new Dictionary <string, object>();
                    ////判断上传的文件是否存在
                    if (System.IO.File.Exists(strSource))
                    {
                        //已存在更新
                        if (sysTable.ExistData("METADATA_LIB", "数据库名称='" + strFeatureClassName + "'"))
                        {
                            vProgress.SetProgress("正在更新数据:" + System.IO.Path.GetFileName(strSource));
                            dicData.Add("数据库名称", strFeatureClassName);
                            InitializeDic(strSource, ref dicData);
                            if (sysTable.UpdateRow("METADATA_LIB", null, dicData, out exError))
                            {
                                dataGrid.Rows[LstIndex[j]].Cells["CmnSelect"].Value = false;
                                dataGrid.Rows[LstIndex[j]].Cells["CmnState"].Value  = "数据更新完成";
                            }
                            else
                            {
                                dataGrid.Rows[LstIndex[j]].Cells["CmnState"].Value = "数据更新失败,请检查Excel文件格式是否正确";
                            }
                        }
                        else
                        {
                            dataGrid.Rows[LstIndex[j]].Cells["CmnState"].Value = "不存在该记录,请先上传该记录";
                        }
                    }
                    else
                    {
                        dataGrid.Rows[LstIndex[j]].Cells["CmnState"].Value = "数据库属性信息文件不存在";
                    }
                }
                vProgress.Close();
            }
            catch { vProgress.Close(); }
        }
Esempio n. 2
0
        //获取要素类数据表
        private DataTable GetTable(IFields pFields, IFeatureClass pFeatureClass, IGeometry pFilterGeometry, string strType, SysCommon.CProgress vProgress)
        {
            Application.DoEvents();
            vProgress.ShowProgress();
            vProgress.SetProgress("正在查找数据......");

            vProgress.MaxValue = 10;
            vProgress.SetProgress(1);
            DataTable  pDataTable  = new DataTable();
            DataColumn pDataColumn = null;

            for (int i = 0; i < pFields.FieldCount; i++)
            {
                pDataColumn = new DataColumn(pFields.get_Field(i).Name);
                pDataTable.Columns.Add(pDataColumn);
                pDataColumn = null;
            }

            ISpatialFilter pSpatialFilter = null;

            if (pFilterGeometry != null)
            {
                pSpatialFilter            = new SpatialFilterClass();
                pSpatialFilter.Geometry   = pFilterGeometry;
                pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
            }

            IFeatureCursor pFeatureCursor = null;
            IFeature       pFeature       = null;
            int            FeatureCount   = 0;

            ///ZQ 201118 modify
            if (strType != "全图范围")
            {
                FeatureCount = pFeatureClass.FeatureCount(pSpatialFilter);
                Application.DoEvents();
            }
            else
            {
                FeatureCount = SysCommon.Gis.ModGisPub.GetFeatureCount(pFeatureClass, null);
            }

            vProgress.SetProgress(7);
            //私有函数 这里就直接写到tips上了
            this.lblTips.Text = "共计:" + FeatureCount + "个";
            this.lblTips.Refresh();
            //progressBarX1.Minimum = 0;
            //progressBarX1.Maximum = FeatureCount;
            //progressBarX1.Visible = true;
            int k = 0;

            if (strType != "全图范围")
            {
                pFeatureCursor = pFeatureClass.Search(pSpatialFilter, false);
            }
            else
            {
                pFeatureCursor = pFeatureClass.Search(null, false);
            }
            vProgress.SetProgress(10);
            vProgress.MaxValue = FeatureCount;
            vProgress.SetProgress("正在加载数据......");
            pFeature = pFeatureCursor.NextFeature();
            DataRow pDataRow  = null;
            int     iProgress = 1;

            while (pFeature != null)
            {
                vProgress.SetProgress(iProgress);
                if (vProgress.UserAskCancel)
                {
                    break;
                }
                pDataRow = pDataTable.NewRow();
                for (int j = 0; j < pFields.FieldCount; j++)
                {
                    if (vProgress.UserAskCancel)
                    {
                        break;
                    }
                    if (pFields.FindField(pFeatureClass.ShapeFieldName) == j)
                    {
                        pDataRow[j] = pFeatureClass.ShapeType;
                    }
                    else
                    {
                        pDataRow[j] = pFeature.get_Value(j);
                    }
                }
                iProgress++;
                //k = k + 1;
                //progressBarX1.Value = k;
                ///////////效率,只显示前1000条,以后可以增加分页////
                //if (k > 1000)
                //{
                //   progressBarX1.Value = FeatureCount-1;
                //    break;
                //}
                ///////////**************************************////
                pDataTable.Rows.Add(pDataRow);
                pFeature = pFeatureCursor.NextFeature();
            }
            Application.DoEvents();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);
            return(pDataTable);
        }
        private void btnOK_Click(object sender, EventArgs e)
        {
            if (dataGrid.RowCount - 1 == 0)
            {
                MessageBox.Show("请输入数据库属性信息!", "提示!");
                return;
            }
            Exception   exError  = null;
            SysGisTable sysTable = new SysGisTable(m_Workspace);

            SysCommon.CProgress vProgress = new SysCommon.CProgress("进度条");
            vProgress.EnableCancel    = false;//设置进度条
            vProgress.ShowDescription = true;
            vProgress.FakeProgress    = true;
            vProgress.TopMost         = true;
            vProgress.MaxValue        = dataGrid.RowCount - 1;
            vProgress.ShowProgress();
            try
            {
                CheckerData();
                for (int i = 0; i < dataGrid.RowCount - 1; i++)
                {
                    vProgress.ProgresssValue = i + 1;
                    if (dataGrid.Rows[i].Cells["CmnSelect"].Value.ToString() == true.ToString())
                    {
                        string strSource                    = dataGrid.Rows[i].Cells["CmnPath"].Value.ToString();
                        string strFeatureClassName          = dataGrid.Rows[i].Cells["CmnFeatureClassName"].Value.ToString();
                        Dictionary <string, object> dicData = new Dictionary <string, object>();
                        ////判断上传的文件是否存在
                        if (System.IO.File.Exists(strSource))
                        {
                            //不存在则添加
                            if (!sysTable.ExistData("METADATA_LIB", "数据库名称='" + strFeatureClassName + "'"))
                            {
                                vProgress.SetProgress("正在上传数据:" + System.IO.Path.GetFileName(strSource));
                                dicData.Add("数据库名称", strFeatureClassName);
                                InitializeDic(strSource, ref dicData);
                                if (sysTable.NewRow("METADATA_LIB", dicData, out exError))
                                {
                                    dataGrid.Rows[i].Cells["CmnSelect"].Value = false;
                                    dataGrid.Rows[i].Cells["CmnState"].Value  = "数据录入完成";
                                }
                                else
                                {
                                    dataGrid.Rows[i].Cells["CmnState"].Value = "数据录入失败,请检查Excel文件格式是否正确";
                                }
                            }
                            else
                            {
                                dataGrid.Rows[i].Cells["CmnState"].Value = "该记录已存在,可进行更新";
                            }
                        }
                        else
                        {
                            dataGrid.Rows[i].Cells["CmnState"].Value = "数据库属性信息文件不存在";
                        }
                    }
                }
                vProgress.Close();
                sysTable = null;
            }
            catch { vProgress.Close(); }
        }
Esempio n. 4
0
        private void btnSure_Click(object sender, EventArgs e)
        {
            SysCommon.CProgress vProgress = new SysCommon.CProgress("进度条");
            try
            {
                if (comboBoxOpen.Text == "")
                {
                    MessageBox.Show("请选择数据!", "提示!");
                    return;
                }
                if (txtZFactor.Text == "")
                {
                    MessageBox.Show("请设置Z值参数!", "提示!");
                    return;
                }
                if (txtCellSize.Text == "")
                {
                    MessageBox.Show("请设置输出精度参数!", "提示!");
                    return;
                }
                if (txtSave.Text == "")
                {
                    MessageBox.Show("请输入保存文件名!", "提示!");
                    return;
                }
                string Unit;
                if (radioBtnDegree.Checked)
                {
                    Unit = "DEGREE";
                }
                else
                {
                    Unit = "PERCENT";
                }
                //this.Hide();
                //Progress.FormProgress
                vProgress.EnableCancel    = false;//设置进度条
                vProgress.ShowDescription = true;
                vProgress.FakeProgress    = true;
                vProgress.TopMost         = true;
                vProgress.ShowProgress();
                vProgress.SetProgress("正在进行坡度分析");
                ILayer      pLayer      = GetLayerByName(ref fileName);//根据图层名获取图层
                IGeoDataset pGeoDataset = pLayer  as IGeoDataset;
                ISurfaceOp  pSurfaceOp;
                IRasterAnalysisEnvironment pRasterAnalysisEnvironment = new RasterSurfaceOp();
                pSurfaceOp = pRasterAnalysisEnvironment as ISurfaceOp;
                object pObject  = Convert.ToDouble(txtCellSize.Text);
                object pZFactor = Convert.ToDouble(txtZFactor.Text);
                pRasterAnalysisEnvironment.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref pObject);                             //设置输出数据的像元值大小
                IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactoryClass();
                string            OutPath           = System.IO.Path.GetDirectoryName(txtSave.Text);                                          //输出文件存储的目录信息
                string            TempPath          = string.Concat(System.IO.Path.GetDirectoryName(Application.ExecutablePath), "\\Temp\\"); //临时文件存储位置
                if (!Directory.Exists(TempPath))
                {
                    Directory.CreateDirectory(TempPath);// 当路径不存在时创建临时文件存储路径
                }
                IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(TempPath, 0);
                pRasterAnalysisEnvironment.OutWorkspace = pWorkspace;
                IRasterBandCollection pRasterBandCollection;
                string Newfile = System.IO.Path.GetFileName(txtSave.Text);
                if (pGeoDataset is IRasterLayer)
                {
                    IRasterLayer pRasterLayer = pLayer as IRasterLayer;
                    pGeoDataset = (IGeoDataset)pRasterLayer.Raster;

                    if (Unit == "DEGREE")//选择不同单位进行坡度分析
                    {
                        pRasterBandCollection = pSurfaceOp.Slope(pGeoDataset, esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopeDegrees, ref pZFactor) as IRasterBandCollection;
                    }
                    else
                    {
                        pRasterBandCollection = pSurfaceOp.Slope(pGeoDataset, esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopePercentrise, ref pZFactor) as IRasterBandCollection;
                    }
                    pWorkspace = pWorkspaceFactory.OpenFromFile(OutPath, 0);

                    pRasterBandCollection.SaveAs(Newfile, pWorkspace, RasterType); //保存分析结果到固定路径下
                    vProgress.Close();
                    if (MessageBox.Show("坡度分析成功,是否加载分析结果", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                    {
                        vProgress.ShowProgress();
                        vProgress.SetProgress("正在进行加载结果数据");
                        IRasterWorkspace pRasterWorkspace = pWorkspaceFactory.OpenFromFile(OutPath, 0) as IRasterWorkspace;               // 张琪  20110613
                        IRasterDataset   pRasterDataset   = pRasterWorkspace.OpenRasterDataset(System.IO.Path.GetFileName(txtSave.Text)); //包含扩展名的表面数据集
                        IRasterLayer     pOutRasterLayer  = new RasterLayerClass();
                        pOutRasterLayer.CreateFromDataset(pRasterDataset);
                        m_pCurrentSceneControl.Scene.AddLayer(pOutRasterLayer as ILayer, true);
                        vProgress.Close();
                    }
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(pRasterBandCollection);
                }
                else if (pGeoDataset is ITinLayer)
                {
                    ITinLayer             pTinLayer        = pGeoDataset as ITinLayer;
                    ITinAdvanced          pTinAdvanced     = pTinLayer.Dataset as ITinAdvanced;
                    Cls3DModulsefun       pCls3DModulsefun = new Cls3DModulsefun();
                    IRasterDataset        pRasterDataset;
                    esriRasterizationType pesriRasterizationType;

                    if (Unit == "DEGREE")
                    {
                        pesriRasterizationType = esriRasterizationType.esriDegreeSlopeAsRaster;
                    }
                    else
                    {
                        pesriRasterizationType = esriRasterizationType.esriPercentageSlopeAsRaster;
                    }
                    rstPixelType prstPixelType = rstPixelType.PT_LONG;
                    //TIN数据转换成Raster数据并进行坡度分析(暂时未成功)
                    vProgress.Close();
                    pRasterDataset = pCls3DModulsefun.TinToRaster2(pTinAdvanced, pesriRasterizationType, OutPath, Newfile, prstPixelType, Convert.ToDouble(txtCellSize.Text), pTinAdvanced.Extent, true, RasterType);
                    if (MessageBox.Show("坡度分析成功,是否加载分析结果", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                    {
                        IRasterLayer pOutRasterLayer = new RasterLayerClass();
                        pOutRasterLayer.CreateFromDataset(pRasterDataset);
                        m_pCurrentSceneControl.Scene.AddLayer(pOutRasterLayer as ILayer, true);
                        if (this.WriteLog)
                        {
                            Plugin.LogTable.Writelog("坡度分析,表面集为:" + comboBoxOpen.Text);
                            Plugin.LogTable.Writelog("输出栅格路径为:" + txtSave.Text);
                        }
                    }
                }
                else
                {
                    MessageBox.Show("目前不支持对当前选择图层的坡度分析功能", "提示!");
                }
                m_pCurrentSceneControl.SceneGraph.RefreshViewers();
                this.Close();
                DeleteFolder(TempPath);//清楚临时文件
            }
            catch
            {
                vProgress.Close();
                this.Close();
                MessageBox.Show("很抱歉,操作失败!", "提示!");
                return;
            }
        }