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(); } }
//获取要素类数据表 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(); } }
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; } }