全国大学生第五届GIS应用比赛下午开发题目(非官方)(下)

一、前言
到这里我们的代码就已经很简单了,因为不涉及到属性表,对我而言,前期我在学习AE时,特别杵属性表,话不多少,我们来看看下面功能吧!
二、功能实现
2.1 在地图上显示北京各个区县的名称
代码实现 在主菜单【北京区县名称标注】的Click()

 #region 北京区县名称标注
        private void 北京区县名称标注ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pMap = axMapControl1.Map;
            goal_Flayer(pMap);
            // FeatureLaye是要素图层 IFeature  是IFeatureLayer中的一个要素 
            //从IFeatureLayer中得到IFeatureClass  再利用游标IFeatureCursor就可以把这些IFeature一个个遍历出来
            //获得图层所有要素
            IFeatureClass pFeatureClass = pFeatLayer.FeatureClass;
            IFeatureCursor pFeatCursor = pFeatureClass.Search(null, true);
            IFeature pFeature = pFeatCursor.NextFeature();
            while (pFeature != null)
            {
                IFields pFields = pFeature.Fields;
                //找出标注字段的索引号
                int index = pFields.FindField("Name");
                //得到要素的Envelope
                IEnvelope pEnve = pFeature.Extent;
                IPoint pPoint = new PointClass();
                pPoint.PutCoords(pEnve.XMin + pEnve.Width / 2, pEnve.YMin + pEnve.Height / 2);
                //新建字体对象
                stdole.IFontDisp pFont;
                pFont = new stdole.StdFontClass() as stdole.IFontDisp;
                pFont.Name = "arial";
                //产生一个文本符号
                ITextSymbol pTextSymbol = new TextSymbolClass();
                //设置文本符号的大小
                pTextSymbol.Size = 20;
                pTextSymbol.Font = pFont;
                pTextSymbol.Color = GetRgbColor(255, 0, 0);
                //产生一个文本对象
                ITextElement pTextElement = new TextElementClass();
                pTextElement.Text = pFeature.get_Value(index).ToString();
                pTextElement.ScaleText = true;
                pTextElement.Symbol = pTextSymbol;
                IElement pElement = pTextElement as IElement;
                pElement.Geometry = pPoint;
                IActiveView pActiveView = pMap as IActiveView;
                IGraphicsContainer pGraphicsContainer = pMap as IGraphicsContainer;
                //添加元素
                pGraphicsContainer.AddElement(pElement, 0);
                pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
                pPoint = null;
                pElement = null;
                pFeature = pFeatCursor.NextFeature();
            }
        }
        #endregion

当程序运行成功时,点击主菜单【北京区县名称标注】,便自动在地图上显示北京各个区县的名称,结果如图1所示。
在这里插入图片描述
图1 在地图上显示北京各个区县的名称
2.2 为北京各个区县匹配一个符号
代码实现 在主菜单【北京区县符号化】的Click()

private void 北京区县符号化ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pMap = axMapControl1.Map;
            goal_Flayer(pMap);
            IGeoFeatureLayer pGeoFeatLyr = pFeatLayer as IGeoFeatureLayer;
            //设置面填充符号           
            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
            //设置面填充为垂直线填充  你也可以改成其他的 换个Style
            pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSVertical;
            pSimpleFillSymbol.Color = GetRgbColor(150, 150, 150);
            //更改符号样式
            ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
            pSimpleRenderer.Symbol = pSimpleFillSymbol as ISymbol;
            pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

当程序运行成功时,点击主菜单【北京区县符号化】,便自动为北京各个区县匹配一个符号,结果如图2所示。
在这里插入图片描述
图2为北京各个区县匹配一个符号
2.3 导出北京区县图层为一个新的数据
代码实现 在主菜单【区县图层转CAD】的Click()
在此我使用的是GP工具,在这里我们应该要学会如何 输出GP工具真正错误信息!!!

//使用GP工具
             Geoprocessor gp = new Geoprocessor();
             gp.OverwriteOutput = true;
             ESRI.ArcGIS.ConversionTools.ExportCAD pExportCAD = new ESRI.ArcGIS.ConversionTools.ExportCAD();
             pMap = axMapControl1.Map;
             goal_Flayer(pMap);
            string Path = System.IO.Directory.GetCurrentDirectory(); //获取应用程序的当前工作目录。
            string shpPath = Path + "\\北京区县界.shp";
            string CADpath= Path+ "\\北京区县界_ExportCAD.dwg";
            pExportCAD.in_features = shpPath;
             pExportCAD.Output_Type = "DWG_R2010";
            pExportCAD.Output_File = CADpath;
            try
            {
                gp.Execute(pExportCAD, null);
                MessageBox.Show("您已成功转为DWG格式!"+"\r\n"+ "存储在"+ CADpath);
            }
            catch (Exception ex)
            {
                // 输出GP工具真正错误信息
                for (int i = 0; i < gp.MessageCount; i++)
                MessageBox.Show(ex.Message+ gp.GetMessage(i));
            }
        }

当程序运行成功时,点击主菜单【区县图层转CAD】,便自动弹出显示框告诉我们已经转换成功以及存储的位置,结果如图3所示。
在这里插入图片描述
图3 区县图层转CAD
2.4 在监测站点图层添加一个新站点
这这里我是选择设计了一个输入XY值的窗体,也很简单,但是更简单的是用ToolBarControl 的Editor工具,更easy,在真正参加比赛时还是用Editor吧,还可以写入属性表,不想加了,还可以选中用delete键删除。
选中ToolBarControl1,右键【属性】,在【Items】界面点击【Add…】,加入Feature Editing相关工具,如下图所示
在这里插入图片描述
运行程序,点击开始编辑,如下图
在这里插入图片描述
点击【Stretch tool】,便可加入站点,一切就yes Ok,如果不喜欢选中delete,哈哈哈,我最喜欢这个功能,我的用写代码完成的这个功能我就不赘述了,难道这个不香吗?哈哈哈
在这里插入图片描述
三 心得体会
从大二我就一直想写博客,想把我遇见的问题总结出来,哪怕没人看,我也能看看当时的我是被哪些难题绊住了,知道大三下学期,我才真正完成我的第一篇博客,第二篇,哈哈,人生的又一个第一次,感觉还是很nice的!当我独自完成这道题目时,我对参加全国大学生GIS应用比赛获得特等奖、一等奖的学生,更加敬佩!在下午三小时不仅要完成分析,还要完成开发以及文档的编写,更让我了解到人外有人,天外天,还得需要不断充实自我!加油吧!少年,最近因为期末实习、补作业,已经耽误了我的考研进度,还得务实,明天希望我元气满满!希望这篇文章可以给你们带来便利!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值