/// <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);
            }
        }
示例#2
0
        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;
            }
        }
示例#3
0
        /// <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);
            }
        }
示例#5
0
        /// <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
        }
        /// <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);
        }