private void sure_Click(object sender, EventArgs e) { string layer_name = layers1.Text; ILayer choose = null; double @base = double.Parse(basenumber.Text); double interval = double.Parse(dis.Text); ILayer temp_lay; for (int i = 0; i < m_hookHelper.FocusMap.LayerCount; i++) { temp_lay = m_hookHelper.FocusMap.get_Layer(i); if (temp_lay.Name == layer_name) { choose = temp_lay; } } IRasterLayer chooseras = choose as IRasterLayer; ISurfaceOp2 pSurfaceOp = default(ISurfaceOp2); pSurfaceOp = new RasterSurfaceOp() as ISurfaceOp2; IGeoDataset pRasterDataset = chooseras as IGeoDataset; IWorkspace pShpWS = default(IWorkspace); IWorkspaceFactory pShpWorkspaceFactory = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactory(); pShpWS = pShpWorkspaceFactory.OpenFromFile(FilePath, 0); pSurfaceOp = new RasterSurfaceOp() as ISurfaceOp2; IRasterAnalysisEnvironment pRasterAEnv = (IRasterAnalysisEnvironment)pSurfaceOp; pRasterAEnv.OutWorkspace = pShpWS; IGeoDataset pOutput = default(IGeoDataset); IFeatureClass pFeatureClass = default(IFeatureClass); IFeatureLayer pFLayer = default(IFeatureLayer); object tmpbase; tmpbase = (object)@base; object tmpmy = 1; pOutput = pSurfaceOp.Contour(pRasterDataset, interval, ref tmpbase, ref tmpmy); pFeatureClass = (IFeatureClass)pOutput; pFLayer = new FeatureLayer(); pFLayer.FeatureClass = pFeatureClass; IGeoFeatureLayer pGeoFL = default(IGeoFeatureLayer); pGeoFL = (IGeoFeatureLayer)pFLayer; pGeoFL.DisplayAnnotation = false; pGeoFL.DisplayField = "CONTOUR"; pGeoFL.Name = "CONTOUR"; m_hookHelper.FocusMap.AddLayer(pGeoFL); }
public static IRaster buildSlope(string string_0, string string_1, string string_2) { IWorkspaceFactory factory = new RasterWorkspaceFactory(); IRasterDataset dataset = ((IRasterWorkspace)factory.OpenFromFile(string_0, 0)).OpenRasterDataset(string_1); ISurfaceOp op = new RasterSurfaceOp() as ISurfaceOp; IRasterAnalysisEnvironment environment = (IRasterAnalysisEnvironment)op; IWorkspaceFactory factory2 = new RasterWorkspaceFactory(); IWorkspace workspace2 = factory2.OpenFromFile(string_2, 0); environment.OutWorkspace = workspace2; object zFactor = new object(); zFactor = Missing.Value; return ((IRaster) op.Slope((IGeoDataset)dataset, esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopeDegrees, ref zFactor)); }
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; } }