您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 综合/其它 > ArcGIS_Engine二次开发——基础篇
ArcGISEngine二次开发——基础篇ArcGIS_Engine二次开发——基础篇ArcGISEngine二次开发——基础篇ArcGISEngine二次开发——基础篇1ArcGISEngine二次开发——基础篇1.1第一个简单的ArcGISEngine地图显示程序这个例子将引导您创建第一个简单的地图显示程序,并添加基本的缩放和漫游功能。如果您之前没有接触过ArcGISEngine的开发,那么这个例子是您迈入ArcGISEngine二次开发大门的极好例子,将从零开始引导您一步一步完成任务。1.1.1创建一个新的工程首先打开MicrosoftVisualStudio2005,点击菜单栏中的“文件”—“新建”—“项目”,在弹出的对话框中选择新建一个VisualC#的Windows应用程序,之后更改项目名称为“地图浏览”,更改文件的路径为个人实习文件夹,点击“确定”即可。图1新建项目对话框选中项目“地图浏览”中的窗体“Form1”,修改其Name属性为“MainForm”,Text属性为“地图浏览”,ArcGISEngine二次开发——基础篇图2窗体命名1.1.2添加控件及引用点击编译器最左侧的“工具箱”(不存在时可通过“视图”“工具箱”打开),在弹出的选择项中找到“ArcGISWindowsForms”项,单击其中的MapControl,之后在Form1的空白处单击鼠标左键不放并拖拽鼠标,直到调整MapControl到合适的大小再松开鼠标(您也可以直接在工具箱中双击MapControl,该控件则会自动加入到Form1中)。用同样的方法,再将LicenseControl添加到Form1中。图3打开工具箱ArcGISEngine二次开发——基础篇图4工具箱如果您在工具箱中找不到MapControl,则请依次尝试以下两种解决方案。首先单击工具栏,待工具箱弹出之后,在工具箱的任意位置上单击鼠标右键,从弹出菜单中选择“重置工具箱”。如果这一步操作之后仍然无法看到MapControl,则在工具箱的任意位置上单击鼠标右键,找到“常规”选项卡,然后在“常规”选项卡上单击鼠标右键,在弹出菜单中单击“选择项(I)…”,在弹出的对话框中选择“.NETFramework组件”,找到“LicenseControl”和“MapControl”,将这两项前的复选框打上勾,最后点击确定即可(如果在“.NETFramework组件”这个面板中找不到这两项,则选择“COM组件”面板,在“ESRILicenseControl”和“ESRIMapControl”前面打勾)。ArcGISEngine二次开发——基础篇图5重置工具箱图6选择项ArcGISEngine二次开发——基础篇图7选择工具箱项图8选择工具箱项添加好MapControl和LicenseControl之后,调整Form1和MapControl的位置与大小,如下图所示:ArcGISEngine二次开发——基础篇图9窗体布局1.1.3添加地图在MapControl上单击鼠标右键,选择“属性”,则会弹出MapControl的属性设置面板,在之前也介绍过,通过这个面板可以完成许多简单的工作。如图所示,点击“Map”面板,之后点击按钮,在弹出的对话框中选择路径为“……\GIS设计与开发\例子数据\China”,再在此路径下选择“bou2_4p”,点击“Open”。之后在MapControl的属性页上点击“确定”即可。ArcGISEngine二次开发——基础篇图10“Map”面板至此,我们已经完成了一个最简单的地图显示程序。.点击“启动调试”按钮(或者在“调试”菜单下选择相应命令,或者按键盘的F5键),可以得到如下的运行结果。图11初次运行结果ArcGISEngine二次开发——基础篇1.1.4添加代码我们没有书写任何代码,就得到了一个最简单的地图显示程序。但这个程序还不能与用户交互,下一步我们需要添加一些代码,让程序能响应用户的鼠标,完成放大和全图显示的功能。选中MapControl控件,单击属性窗口中的事件按钮,可以看到MapControl控件能够响应的所有事件(关于每个事件的详细使用方法等请参见帮助系统),我们可以通过双击对应事件进入代码编辑界面,这里我们选择“OnMouseDown”事件(注:控件的“OnMouseDown”事件也可以通过双击控件直接进入到代码编辑界面),下一步就需要在这个事件中添加响应鼠标的相关代码。图12MapControl控件支持的所有方法请您在axMapControl1的OnMouseDown事件中添加代码,如下所示:privatevoidaxMapControl1_OnMouseDown(objectsender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvente){if(e.button==1)ArcGISEngine二次开发——基础篇this.axMapControl1.Extent=this.axMapControl1.TrackRectangle();elseif(e.button==2)this.axMapControl1.Extent=this.axMapControl1.FullExtent;}再次运行程序,鼠标左键在地图上拉框可以实现地图的放大功能,而右键单击地图则会还原地图的全图显示。图1任意比例尺放大功能如果将代码替换如下,则能实现左键放大,右键漫游的功能。privatevoidaxMapControl1_OnMouseDown(objectsender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvente){if(e.button==1)this.axMapControl1.Extent=this.axMapControl1.TrackRectangle();elseif(e.button==2)this.axMapControl1.Pan();}注释:代码中根据e中包含的“button”值来判断鼠标的单击操作是来自何处,若button值为1,则为鼠标左键,2代表鼠标右键,4代表鼠标中键。当判断得到是鼠标左键单击时,执行“this.axMapControl1.Extent=this.axMapControl1.TrackRectangle();”该语句调用了“TrackRectangle()”方法,这个方法是在地图上拖拽出一个矩形,之后将这个矩形赋值给当前地图的显示区域(Extent),这样就实现了地图的放大功能。类似的,若鼠标右键单击,则将全图范围赋值给当前的显示范围,实现了地图的全图显示功能。1.1.5小结通过这个例子,我们制作出了一个最简单的地图浏览程序AEMapView,并能响应一些基本的鼠标操作。在MapControl的属性页中,其实还有许多内容您可以尝试,例如在“General”面板中可以直接加入地图文件(*.mxd或者*.mxt),您也可以利用刚才的方式一ArcGISEngine二次开发——基础篇次性多加入一些图层而不仅仅加入“bou2_4p”一个,同时可以更改各图层的叠放次序,也可以在“Data”面板中设置地图的旋转角度(Rotation)等,您还可以设置MapControl的显示方式,是否支持地图的预览功能,边框样式等等。您可以做一些尝试,看看能得到哪些有趣的结果,这些尝试对您今后熟悉ArcGISEngine的开发是有一定帮助的。如果需要重置MapControl,只需要点击“Data”面板中的“Reset”按钮。当您完成了这个例子,并做了一些积极的尝试之后,您就可以接着学习下一个小节的内容了。1.2属性查询查询是GIS中非常重要的一个功能,下面将分别介绍属性查询和空间查询的制作方法。1.2.1添加控件如果上一小节的工程已经关闭,则将其打开,如果您之后又在MapControl中添加了一些别的数据,请将其删除,只保留一个“bou2_4p”图层,请务必注意这一步,这直接关系到您下面的工作能否顺利进行。用之前讲过添加控件的方式,在窗体中添加一个Label和一个TextBox。将Label控件的“Text”属性修改为“城市名称”,TextBox控件的Name属性修改为txtStateName。控件添加完毕后效果如下:图2添加Label控件和TextBox控件后界面1.2.2添加代码首先添加引用。首先可以在项目的“解决方案资源管理器窗口”中单击展开“引用”选项,查看项目中已添加引用。ArcGISEngine二次开发——基础篇图3项目已添加“引用”这个项目中我们需要使用“ESRI.ArcGIS.Carto”和“ESRI.ArcGIS.Geodatabase”两个引用项,点击菜单栏上的“项目”—“添加引用”(或者在“解决方案资源管理器窗口”中右击“引用”,在弹出菜单中选择“添加引用”),在弹出的对话框中选择需要添加的引用,同时选择“ESRI.ArcGIS.Carto”和“ESRI.ArcGIS.Geodatabase”(选择的时候按下Ctrl键以同时选择多个),这里“ESRI.ArcGIS.Carto”在添加MapControl控件时已自动添加,我们只添加“ESRI.ArcGIS.Geodatabase”,点击确定。图4添加引用对话框之后双击TextBox控件,进入代码编辑界面。在代码编辑区域的命名空间(namespace)的上方输入以下内容:usingESRI.ArcGIS.Carto;usingESRI.ArcGIS.Geodatabase;如下图所示:ArcGISEngine二次开发——基础篇图5引用添加位置之后在控件TextBox的事件中选择KeyUp,在KeyUp事件中添加以下代码:图6KeyUp方法privatevoidtxtStateName_KeyUp(objectsender,KeyEventArgse){//判断鼠标键值,如果Enter键按下抬起后,进入查询if(e.KeyCode==Keys.Enter){//定义图层,要素游标,查询过滤器,要素IFeatureLayerpFeatureLayer;IFeatureCursorpFeatureCursor;ArcGISEngine二次开发——基础篇IQueryFilterpQueryFilter;IFeaturepFeature;//获取图层pFeatureLayer=this.axMapControl1.Map.get_Layer(0)asIFeatureLayer;//如果图层名称不是states,程序退出if(pFeatureLayer.Name!=bou2_4p)return;//清除上次查询结果this.axMapControl1.Map.ClearSelection();//pQueryFilter的实例化pQueryFilter=newQueryFilterClass();//设置查询过滤条件pQueryFilter.WhereClause=NAME='+txtStateName.Text+';//查询pFeatureCursor=pFeatureLayer.Search(pQueryFilter,true);//获取查询到的要素pFeature=pFeatureCursor.NextFeature();//判断是否获取到要素if(pFeature!=null){//选择要素this.axMapControl1.Map.SelectFeature(pFeatureLayer,pFeature);//放大到要素this.axMapControl1.Extent=pFeature.Shape.Envelope;}else{//没有得到pFeature的提示MessageBox.Show(没有找到名为+txtStateName.Text+的省,提示);}}}运行程序,分别向编辑框中输入“吉林省”和“长春省”,键入回车,如下图所示:A
本文标题:ArcGIS_Engine二次开发——基础篇
链接地址:https://www.777doc.com/doc-5160449 .html