public IRaster CreateRasterSlope(IRaster raster) { try { RasterSurfaceOpClass class2 = new RasterSurfaceOpClass(); IGeoDataset geoDataset = raster as IGeoDataset; double zFactor = Convert.ToDouble(textBoxX3.Text); if (zFactor <= 0) { MessageBox.Show("请指定大于0的正数!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); return(null); } //float zFactor = 1; object o = zFactor; esriGeoAnalysisSlopeEnum geoType = esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopeDegrees; IGeoDataset pGeoDataset = class2.Slope(geoDataset, geoType, ref o); IRaster pRaster = (IRaster)pGeoDataset; ISaveAs2 pSaveAs = pRaster as ISaveAs2; IDataset pDataset = pSaveAs.SaveAs(m_ResultPath + ".tif", null, "TIFF"); //System.Runtime.InteropServices.Marshal.ReleaseComObject(pDataset); MessageBox.Show("坡度计算完毕!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); return(pRaster); } catch (SystemException e) { MessageBox.Show(e.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(null); } }
/// <summary> /// 计算DEM坡度 /// </summary> /// <param name="rasterLayer">输入DEM图层</param> /// <param name="outputFullPath">输出坡度图路径,类型为IMAGE,文件名为img</param> public void CreateRasterSlope(ILayer rasterLayer, string outputFullPath) { if (File.Exists(outputFullPath)) { MessageBox.Show(outputFullPath + "已经存在,请重命名"); return; } IRasterLayer rasterLyr = rasterLayer as IRasterLayer; IRaster raster = rasterLyr.Raster; RasterSurfaceOpClass rasterOpCls = new RasterSurfaceOpClass(); object o = 1; IGeoDataset geoDataset = raster as IGeoDataset; esriGeoAnalysisSlopeEnum geoType = esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopeDegrees; IGeoDataset outGeodataset = rasterOpCls.Slope(geoDataset, geoType, ref o); IRaster pRaster = outGeodataset as IRaster; FileInfo fi = new FileInfo(outputFullPath); string fileDir = fi.Directory.FullName; string name = fi.Name; if (!Directory.Exists(fileDir)) { Directory.CreateDirectory(fileDir); } IWorkspaceFactory pWSF = new RasterWorkspaceFactoryClass(); IWorkspace pWS = pWSF.OpenFromFile(fileDir, 0); ISaveAs pSaveAs = pRaster as ISaveAs; pSaveAs.SaveAs(name, pWS, "IMAGINE Image"); IRasterLayer rasterLyr2 = new RasterLayerClass(); rasterLyr2.CreateFromRaster(pRaster); rasterLyr2.Name = name; m_mapControl.Map.AddLayer(rasterLyr2 as ILayer); }
//设置Slope输出测量单位 private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { var index = comboBox2.SelectedIndex; switch (index) { case 0: //degree(度) slopeEnum = esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopeDegrees; break; case 1: //高程增量百分比 slopeEnum = esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopePercentrise; break; } }