我是靠谱客的博主 喜悦口红,最近开发中收集的这篇文章主要介绍C#+AE缓冲区分析一、AE缓冲区接口和类二、功能的实现三、过程总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

趁着这次总结的机会,就想着把这几个星期编的小功能都写成博客记录下来,省的之后遗忘,我写这些东西也算是给自己加深印象吧,鱼的记忆哈哈。

一、AE缓冲区接口和类

还是老生常谈,先来了解实现缓冲区功能都需要那些接口和类:
GP工具:也就是Geoprocessor类,这其中主要是封装了输入路径、输出路径还有就是可以调用各种工具的函数方法。它给我的感觉类似于原来我是一亩地一亩地的打农药,突然有一天来了一架飞机直接在天上散农药,一下子活就干完了。这GP工具就是那飞机,它大大的提高了效率。
Buffer类:这里注意了这是AnalysisTools下的Buffer类,我记得有两个buffer类,下图是Buffer类中的参数设置表。
在这里插入图片描述图有点不清晰,我就只能截一点相对重要的信息。
在这里插入图片描述

二、功能的实现

2.1功能实现代码

   private IActiveView pActiveView;
   private AxMapControl mapControl;

   //通过构造函数获取MapControl控件
   public BufferAnalysis(AxMapControl mainmapControl)
       : this()
   {
       mapControl = mainmapControl;
       pActiveView = mainmapControl.ActiveView;
   }

   //输出路径
   private void button1_OutputPath_Click(object sender, EventArgs e)
   {
       SaveFileDialog saveDlg = new SaveFileDialog();
       saveDlg.Filter = "Shapefile(*.shp)|*.shp";
       if (saveDlg.ShowDialog() != DialogResult.OK) return;

       textBox2_OutputPath.Text = saveDlg.FileName;
   }

   //生成窗体函数
   private void BufferAnalysis_Load(object sender, EventArgs e)
   {
       if (mapControl == null || pActiveView.FocusMap.LayerCount == 0)
       {
           return;
       }
       IEnumLayer layers = pActiveView.FocusMap.get_Layers();
       layers.Reset();
       ILayer layer = layers.Next();
       while (layer != null)
       {
           comboBox1_ChooseLayer.Items.Add(layer.Name);
           layer = layers.Next();
       }
   }

   //确认分析
   private void button2_OK_Click(object sender, EventArgs e)
   {
       double bufferDistance = Convert.ToDouble(textBox1_BufferDistance.Text.Trim());
       if (bufferDistance == 0.0)
       {
           MessageBox.Show("缓冲区距离有误!");
           return;
       }

       if (comboBox1_ChooseLayer.Text == string.Empty)
       {
           MessageBox.Show("输入图层不能为空!");
           return;
       }

       if (textBox2_OutputPath.Text == string.Empty)
       {
           MessageBox.Show("输出路径不能为空!");
           return;
       }
       int index = comboBox1_ChooseLayer.SelectedIndex;
       string name = getLayerPath(pActiveView.FocusMap.get_Layer(index));
       string outPath = textBox2_OutputPath.Text.Trim();

       Geoprocessor pGp = new Geoprocessor();
       pGp.OverwriteOutput = true; //允许运算结果覆盖现有文件,可无
       ESRI.ArcGIS.AnalysisTools.Buffer pBuffer = new ESRI.ArcGIS.AnalysisTools.Buffer();
       //获取缓冲区分析图层
       ILayer pLayer = pActiveView.FocusMap.get_Layer(index);
       IFeatureLayer featLayer = pLayer as IFeatureLayer;
       //IFeatureCursor cursor = featLayer.Search(null, false);
       //IFeature feaClass = cursor.NextFeature();

       pBuffer.in_features = featLayer;

       pBuffer.out_feature_class = outPath; //输出路径
       pBuffer.buffer_distance_or_field = bufferDistance; //缓冲区参数
       pBuffer.dissolve_option = "NONE"; //融合缓冲区重叠交叉部分,如果不融合填"ALL"
       pGp.Execute(pBuffer, null); //执行

       string pFolder = System.IO.Path.GetDirectoryName(outPath); //得到字符串中文件夹位置
       string pFileName = System.IO.Path.GetFileName(outPath); //得到字符串中文件名字
       mapControl.AddShapeFile(pFolder, pFileName); //往地图控件里添加文件
       mapControl.ActiveView.Refresh(); //激活窗口刷新
       this.Close();
   }

   //获取图层源路径
   private string getLayerPath(ILayer pLayer)
   {
       IDatasetName pDatasetName = (pLayer as IDataLayer2).DataSourceName as IDatasetName;
       IWorkspaceName pWorkspaceName = pDatasetName.WorkspaceName;
       return pWorkspaceName.PathName +"\" +pLayer.Name+".shp";
   }

为了省事,我直接将代码整个复制过来了哈哈。

2.2功能实现效果

在这里插入图片描述在这里插入图片描述

三、过程总结

GP工具的出现大大的提升了编程的速度,但是这也使得我们变得“肤浅”,不过现在对我这种小白来讲现在的主要矛盾其实还是学习怎么使用GP工具,其他的日后再说吧哈哈。

最后

以上就是喜悦口红为你收集整理的C#+AE缓冲区分析一、AE缓冲区接口和类二、功能的实现三、过程总结的全部内容,希望文章能够帮你解决C#+AE缓冲区分析一、AE缓冲区接口和类二、功能的实现三、过程总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部