/// <summary> /// 使用GP工具和转化工具进行要素转栅格 /// </summary> /// <param name="inputFeature"></param> /// <param name="outRaster"></param> /// <param name="fieldName"></param> /// <param name="cellSize"></param> public bool FeatureToRaster(object inputFeature, object outRaster, object fieldName, object cellSize) { //Runtime manager to find the ESRI product installed in the system //ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop); Geoprocessor geoprocessor = new Geoprocessor(); geoprocessor.OverwriteOutput = true; // geoprocessor.GetEnvironmentValue(); FeatureToRaster featureToRaster = new FeatureToRaster(); featureToRaster.cell_size = cellSize; featureToRaster.in_features = inputFeature; featureToRaster.out_raster = outRaster; featureToRaster.field = fieldName; try { geoprocessor.Execute(featureToRaster, null); return(true); } catch (Exception) { return(false); } }
private IRaster _DrainagePointsToSeedGrid(IFeatureClass featureClass, string baseName, string valueField) { Geoprocessor gp = new Geoprocessor(); bool addOutputs = gp.AddOutputsToMap; try { IRasterDataset demRasterDataset = ((IRasterAnalysisProps)DEM).RasterDataset; IDataset demDataset = (IDataset)demRasterDataset; string path = System.IO.Path.Combine(demDataset.Workspace.PathName, demDataset.Name); gp.SetEnvironmentValue("snapRaster", path); string extent = string.Format("{0} {1} {2} {3}", ((IGeoDataset2)demRasterDataset).Extent.XMin, ((IGeoDataset2)demRasterDataset).Extent.YMin, ((IGeoDataset2)demRasterDataset).Extent.XMax, ((IGeoDataset2)demRasterDataset).Extent.YMax); gp.SetEnvironmentValue("extent", extent); gp.AddOutputsToMap = false; FeatureToRaster featureToRasterTool = new FeatureToRaster(); featureToRasterTool.cell_size = ((IRasterAnalysisProps)DEM).PixelHeight; featureToRasterTool.field = valueField; IDataset dataset = (IDataset)featureClass; string featureClassPath = System.IO.Path.Combine(dataset.Workspace.PathName, dataset.Name + ".shp"); featureToRasterTool.in_features = featureClassPath; string outputName = SetupOp.CreateTempFileName(this.ScratchDirectory, baseName, null); featureToRasterTool.out_raster = outputName; string outputShortName = System.IO.Path.GetFileNameWithoutExtension(outputName); RunTool(gp, featureToRasterTool, null); IRasterWorkspace rws = this.GetTempRasterWorkspace() as IRasterWorkspace; return(rws.OpenRasterDataset(outputShortName).CreateDefaultRaster()); } finally { gp.AddOutputsToMap = addOutputs; } }
/// <summary> /// 确定BUTTON事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { ToggleEndlessProgress.Execute(); circularProgress1.IsRunning = true; #region GP工具的使用 //得到参数 IFeatureLayer layer = GetFeatureLayer((string)comboBox1.SelectedItem); string field = (string)comboBox2.SelectedItem; string out_raster = textBox1.Text; object cellSize = textBox2.Text; //实例化GP工具 Geoprocessor gp = new Geoprocessor(); gp.OverwriteOutput = true; //设置矢量转栅格参数 FeatureToRaster featuretoraster = new FeatureToRaster(); featuretoraster.in_features = layer; featuretoraster.field = field; featuretoraster.cell_size = cellSize; featuretoraster.out_raster = out_raster; //执行GP工具 IGeoProcessorResult results = (IGeoProcessorResult)gp.Execute(featuretoraster, null); #endregion circularProgress1.IsRunning = false; #region 运行完成之后的信息提示窗口 balloonTipFocus.Enabled = true; DevComponents.DotNetBar.Balloon b = new DevComponents.DotNetBar.Balloon(); b.Style = eBallonStyle.Alert; //b.CaptionImage = balloonTipFocus.CaptionImage.Clone() as Image; b.CaptionText = "信息提示"; b.Text = "运行成功!"; b.AlertAnimation = eAlertAnimation.TopToBottom; b.AutoResize(); b.AutoClose = true; b.AutoCloseTimeOut = 4; b.Owner = this; b.Show(button2, false); #endregion }
public static void Rasterize(string inputFeature, string outRaster, string fieldName, double cellSize) { try { //Runtime manager to find the ESRI product installed in the system ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop); Geoprocessor geoprocessor = new Geoprocessor(); geoprocessor.OverwriteOutput = true; FeatureToRaster featureToRaster = new FeatureToRaster(); featureToRaster.cell_size = cellSize; featureToRaster.in_features = inputFeature; featureToRaster.out_raster = outRaster; featureToRaster.field = fieldName; geoprocessor.Execute(featureToRaster, null); } catch (Exception e) { Console.WriteLine(e.Message); } }
/// <summary> /// 道路风险计算 /// </summary> /// <param name="workPath">存储路径</param> /// <param name="roadEvalPath">道路评价结果 </param> /// <param name="roadRainsShpPath">加了雨量字段的道路缓冲区</param> /// <returns></returns> public bool RoadRaskCaulte(string roadEvalName, string roadRainsName, string saveWorkspace) { //读取 道路评价结果栅格数据的信息 RasterHelper rh = new RasterHelper(); //IRasterWorkspace rasterWorkspace = new RasterLayer(); IWorkspaceFactory rWorkspaceFactory = new RasterWorkspaceFactory(); IWorkspace SWorkspace = rWorkspaceFactory.OpenFromFile(saveWorkspace, 0); IRasterWorkspace rasterWorkspace = SWorkspace as IRasterWorkspace; IRasterDataset rasterDt = rasterWorkspace.OpenRasterDataset(roadEvalName); // var t = rh.GetRasterProps(rasterDt); IRasterLayer rasterLayer = new RasterLayer(); rasterLayer.CreateFromFilePath(saveWorkspace + "\\" + roadEvalName); IRaster pRaster = rasterLayer.Raster; IRasterProps rasterProps = (IRasterProps)pRaster;;//存储了栅格信息 //初始化GP工具 Geoprocessor gp = new Geoprocessor(); gp.OverwriteOutput = true; //string path = @"D:\GISTest"; //gp.SetEnvironmentValue("workspace", path); //道路缓冲区 根据雨量转栅格 FeatureToRaster featureToRaster = new FeatureToRaster(); featureToRaster.cell_size = rasterProps.MeanCellSize().X;//这里可以提前规定一个值,而不是每次去读取 featureToRaster.in_features = OpenFeatureClass(saveWorkspace + "\\" + roadRainsName); featureToRaster.out_raster = saveWorkspace + "\\roadGrid"; featureToRaster.field = "RAINS";//这个字段需要矢量图层中加上 try { gp.Execute(featureToRaster, null); } catch (Exception ex) { Console.WriteLine("矢量转栅格失败!"); return(false); } //栅格计算器 计算风险级数 IMapAlgebraOp mapAlgebra = new RasterMapAlgebraOpClass(); IRasterDataset roadEvalRaster = OpenRasterDataSet(rasterWorkspace, roadEvalName); IRasterDataset roadGridRaster = OpenRasterDataSet(rasterWorkspace, saveWorkspace + @"\roadGrid"); IGeoDataset geo1 = roadEvalRaster as IGeoDataset; IGeoDataset geo2 = roadGridRaster as IGeoDataset; mapAlgebra.BindRaster(geo1, "EvalRaster"); mapAlgebra.BindRaster(geo2, "RoadRains"); IGeoDataset raskDataset = mapAlgebra.Execute("[EvalRaster] * [RoadRains] / 25");//然后存储 表达式必须间隔开 ISaveAs saveAs = raskDataset as ISaveAs; saveAs.SaveAs("roadPre", SWorkspace, ""); //加入图层 IRasterLayer rasterLayer2 = new RasterLayer(); rasterLayer2.CreateFromFilePath(saveWorkspace + "\\" + "roadPre"); MainFrom.m_mapControl.AddLayer(rasterLayer2, 0); //MainFrom.m_mapControl.Refresh(esriViewDrawPhase.esriViewGeography, null, null); MainFrom.m_pTocControl.Update(); //将生成的风险栅格重分类 //<0.2 一级:可能性小 //0.2-0.4 二级:可 //能性较小 //0.4-0.6 三级:可能性较大 //0.6-0.8 四级:可能性大 //>0.8 五级:可能性很大 // 输入:raskDataset // 输出:geoDataset_result IReclassOp pReclassOp = new RasterReclassOpClass(); INumberRemap pNumRemap = new NumberRemapClass(); IDictionary <int, RoadRange> roadRanges = this.roadRiskConfig.GetRoadRiskLevelFromConfig(); foreach (var v in roadRanges) { pNumRemap.MapRange(v.Value.MinValue, v.Value.MaxValue, v.Key); } /* * pNumRemap.MapRange(0, 0.2, 1); * pNumRemap.MapRange(0.2, 0.4, 2); * pNumRemap.MapRange(0.4, 0.6, 3); * pNumRemap.MapRange(0.6, 0.8, 4); * pNumRemap.MapRange(0.8,1000,5); */ //pNumRemap.MapRangeToNoData(-1000,0); //pNumRemap.MapRangeToNoData(1000, 20000); IRemap pRemap = pNumRemap as IRemap; // 重分类 // geoDataset为上一步得到的栅格 // IGeoDataset geoDataset_result = pReclassOp.ReclassByRemap(raskDataset, pRemap, true);//还没有测试成功 // RasterCalculator rasterCalculator = new RasterCalculator("[EvalRaster]*[RoadRains]/25", saveWorkspace + @"\RainEval.tif"); try { // gp.Execute(rasterCalculator, null); } catch (Exception ex) { Debug.Print(ex.Message); for (int i = 0; i < gp.MessageCount; i++) { Debug.Print(gp.GetMessage(i)); } Console.WriteLine("栅格计算失败!"); return(false); } return(true); }