C二次开发ArcGIS查询功能_第1页
C二次开发ArcGIS查询功能_第2页
C二次开发ArcGIS查询功能_第3页
C二次开发ArcGIS查询功能_第4页
C二次开发ArcGIS查询功能_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(完整word版)C二次开发ArcGIS查询功能(完整word版)C二次开发ArcGIS查询功能[地理信息系统课程设计报告]64/64(完整word版)C二次开发ArcGIS查询功能目录TOC\o”1-3"\h\z\uHYPERLINK\l”_Toc482452852"一、ArcGIS简介 1HYPERLINK\l”_Toc482452853"二、ArcGIS开发方法介绍 1_Toc482452855”1、数据库的建立 1HYPERLINK\l”_Toc482452856"2、数据表的设计 2_Toc482452858”五、功能设计(流程图) 4六、程序运行界面介绍 5HYPERLINK\l”_Toc482452860”1、用户登录界面 5HYPERLINK\l”_Toc482452861”2、主程序界面 5HYPERLINK\l”_Toc482452862"3、属性查询界面 6HYPERLINK\l”_Toc482452863”4、三角网及泰森多边形 6七、程序解析说明 7HYPERLINK\l”_Toc482452865”1、用户登录界面程序解析说明 7HYPERLINK\l”_Toc482452866”2、属性查询程序解析说明 8HYPERLINK\l”_Toc482452867”3、自定义控件命令解析 104、三角网及泰森多边形构建解析 10HYPERLINK\l”_Toc482452869"八、源代码附录 131、用户登录源码 132、属性查询源码 16_Toc482452873"4、FixedZoomIn类源码 21_Toc482452875"6、FullExtent类源码 25HYPERLINK\l”_Toc482452876"7、Pan类源码 27_Toc482452878”9、ZoomOut类源码 33一、ArcGIS简介ArcGIS是美国ESRI(EnvironmentalSystemsResearchInstitute,Inc。美国环境系统研究所公司)推出的一条为不同需求层次用户提供的全面的、可伸缩的GIS产品线和解决方案.ESRI是GIS领域的拓荒者和领导者,而ArcGIS也代表了当前GIS行业最高的技术水平。ArcGIS是一个可伸缩的GIS平台,可以运行在桌面端、服务器端和移动设备上。它包含了一套建设完整GIS系统的应用软件,这些软件可以互相独立或集成配合使用,为不同需求的用户提供完善的解决之道。ArcGIS是基于一套共享的GIS组件开发实现的,这套组件被命名为ArcObjects,它包含了大量可编程组件,实现了ArcGIS的全部功能。因此,ArcObjects可以被认为是ArcGIS产品的核心,熟悉ArcObjects的过程同时也是熟悉ArcGISEngine的过程。二、ArcGIS开发方法介绍Gis的开发方法有三种,即独立开发,宿主型二次开发,基于gis组件的二次开发,其中独立开发为底层开发,不依赖于任何gis工具软件,开发难度太大,后两者是基于一种软件的二次开发,这样的二次开发则相对较简单,他的好处也是显而易见的。Esri公司推出的ArcGIS产品不仅仅包含基础平台软件,也包含供用户二次开发的组件,那么这些组件也包含C/S、B/S、移动端的.C/SHYPERLINK”/base/architecture"\o”大型网站架构知识库"架构主要是应用于局域网方面,一般是安装开发软件,一般情况下机器都不连互联网,主要处理数据编辑、数据入库、地图整饰等对机器性能要求比较高。B/S架构主要应用于局域网或者互联网,一般情况下使用浏览器,主要是进行数据查询、分析等.ArcGIS

Engine开发工具包是一个基于组件的软件开发产品,用于建立和部署自定义GIS和制图应用程序。ArcGIS

Engine开发工具包不是一个终端用户产品,而是一个应用程序开发人员的工具包。可以用ArcGIS

Engine开发工具包建立基本的地图浏览器或综合、动态的GIS编辑工具。使用ArcGIS

Engine开发工具包,开发人员在建立定制的地图接口方面具有前所未有的灵活性.开发人员可以使用几个API中的任何一个来建立独一无二的应用程序,或者将ArcGIS

Engine组件与其他软件组件组合起来实现地图与用户管理信息之间的协同关系。三、数据库设计1、数据库的建立通过ArcCatalog创建个人地理数据库>>要素集>>要素类>>编辑属性2、数据表的设计(1)房屋字段名称字段解释类型长度备注IDID号LongName名称Char20Owner所有者Char20Layers层数Integer20Material材质Char20Add地址Char40BuildArea建筑面积FloatRemark备注Char40(2)道路字段名称字段解释类型长度备注IDID号LongName名称Char20Material铺设材料Char20Width道路宽度FloatRemark备注Char40等等四、地理数据入库(地图扫描矢量化方法介绍)1、打开ArcMap,添加“影像配准”工具栏。把需要进行配准的影像—“校内平面图测绘14级.dwg”添加到ArcMap中,会发现“影像配准”工具栏中的工具被激活.2、在“影像配准”工具栏上,点击“添加控制点(add

control

point)”按钮。使用该工具在扫描图上精确到找一个控制点点击,然后鼠标右击输入该点实际的坐标位置。用相同的方法,在影像上增加多个控制点(大于3个),输入它们的实际坐标。点击“影像配准”工具栏上的“查看链接表(view

link

table)"按钮。对于误差较大的控制点,可以删除然后重新采集。3、打开ArcCatalog。在指定目录下,鼠标右击,在“新建”中,选择“个人Geodatabase"。并修改该Geodatabase数据库的名称。右击新建要素集并为要素集设置投影坐标系。右击新建要素类,选择要素类型,并为要素命名,添加要素属性字段“Name”等.这样便建好了一个点,线或面要素4、在ArcMap中编辑工作条上点击开始编辑,这时会弹出来一个窗口选择要素,然后在已经配准后的图像上选择相应的要素类型一一绘制,右击图层控件上的某个要素图层打开属性表可以编辑属性。5、将矢量化好后的图层导出为(*。mxd)文件。五、功能设计(流程图)六、程序运行界面介绍1、用户登录界面2、主程序界面3、属性查询界面4、三角网及泰森多边形七、程序解析说明1、用户登录界面程序解析说明 用户登录设计思路:(1)用户输入用户名和密码,用户名不能为空,密码不能为空.(2)密码在五分钟之内连续输错三次,用户名被锁定,30分钟后才能再次登录。(3)若密码输错次数小于3次,则从最后一次输错时刻算起,五分钟之后用户登录错误次数归零。(4)用户注册,数据库中检索此用户,若用户存在则提示用户名已存在,反之注册成功,需重新登录.重点代码解析:使用参数化查询避免注入漏洞攻击,用户信息存储在SQLServer数据库的T_User表中//只用来执行查询结果较少的sqlpublicstaticDataSetExecuteDataSet(stringsql,paramsSqlParameter[]parameters){using(SqlConnectionconn=newSqlConnection(ConStr)){conn。Open();using(SqlCommandcmd=conn。CreateCommand()){cmd.CommandText=sql;cmd。Parameters.AddRange(parameters);//SqlDataAdapter如同一个适配器,过渡桥梁的作用SqlDataAdapteradapter=newSqlDataAdapter(cmd);DataSetdataset=newDataSet();adapter。Fill(dataset);returndataset;}}}当用户输错三次以上并且时间少于30分钟时不允许登陆,TimeSpants=DateTime。Now-date;用于存储间隔时间if(errortimes>=3){DateTimedate=(DateTime)row["Lock”];TimeSpants=DateTime.Now—date;if(ts。TotalMinutes<=30){MessageBox.Show(@"输入错误次数太多,用户已被锁定,请于30分钟后再登陆,剩余时间"+(30-ts.TotalMinutes).ToString(”0”)+”分钟”,"错误提示”,MessageBoxButtons。OK,MessageBoxIcon。Error);return;}else{//输错三次后30分钟后更新ErorrTimes=0SqlHelper.NonQuery(@”UpdateT_UsersetErorrTimes=0whereId=@id",newSqlParameter("@id”,id));}}3、若密码输错次数小于3次,则从最后一次输错时刻算起,五分钟之后用户登录错误次数归零即UpdateT_UsersetErorrTimes=1whereId=@idTimeSpants=DateTime。Now—Convert。ToDateTime(date);if(ts。TotalMinutes〉5){SqlHelper.NonQuery(@"UpdateT_UsersetErorrTimes=1whereId=@id”,newSqlParameter("@id”,id));}2、属性查询程序解析说明重点代码解析:(1)进入属性查询界面的代码:通过AttributeQueryForm类的构造函数来存储地图的数据和绑定DataGridView的数据源AttributeQueryFormattributequery=newAttributeQueryForm(this。axMapControl1,this.dataGridView1);attributequery。ShowDialog();(2)从主程序axMapControl传值过来的地图数据存储在privateAxMapControlmMapControl;并且在属性查询窗体的ComboBox组合控件cboLayer中添加各个图层名//图层名称加入cboLayerthis。cboLayer.Items。Add(strLayerName);通过get_Layer(cboLayer.SelectedIndex)获取选中图层,并将每个图层的字段名显示在名为cboField的ComboBox控件。strFldName=pFeatureClass。Fields。get_Field(i)。Name;//图层名称加入cboFieldthis。cboField。Items.Add(strFldName);(3)属性查询中需要认识学习接口的相关知识,接口是一种规范、功能。在属性查询中我们需要用到IQueryFilter接口,该接口通过WhereClause属性来获取查询数据,类似于SQL中的where语句。然后再通过图层的Search方法基于查询条件返回要素游标pFeatureCursor。如下图,pFeatureCursor指针一开始指向第0层,每调用一下NextFeature()方法,指针就往下移动一格直到指向null代码示例://定义图层,要素游标,查询过滤器,要素IFeatureLayerpFeatureLayer;IFeatureCursorpFeatureCursor;IQueryFilterpQueryFilter;IFeatureSelectionpFeatureSelection;IActiveViewactiveview;IFeaturepFeature;//获取图层pFeatureLayer=this。mMapControl.Map.get_Layer(GetLayerindexbyName(cboLayer.Text))asIFeatureLayer;//如果图层名称不是cboLayer.Text,程序退出if(pFeatureLayer。Name!=cboLayer.Text)return;//清除上次查询结果this。mMapControl。Map。ClearSelection();activeview=this.mMapControl。MapasIActiveView;//pQueryFilter的实例化pQueryFilter=newQueryFilterClass();//设置查询过滤条件pQueryFilter。WhereClause=””+cboField。Text+"=’”+txtValue。Text+”'”;//基于查询条件创建指针并回收pFeatureCursor=pFeatureLayer。Search(pQueryFilter,true);//获取查询到的要素然后再调用DisplayToDataGridDAL类中的方法,将查询出来的要素字段值显示在DataGridView中,DisplayToDataGridDAL类是自己写的一个类(代码见附录)代码示例:DisplayToDataGridDAL.Dataview(pFeatureCursor,dataGrid,pFeatureLayer);高亮并居中显示选中的要素:activeview.Extent=pFeature。Shape.Envelope;activeview。Refresh();3、自定义控件命令解析以下讲述ArcEngine自定义开发的一些控件命令,如居中放大,居中缩小,拉框放大,拉框缩小,漫游,显示全图等。基于BaseCommand的功能实现与Button的功能类似,是当鼠标点击按钮的时候,MapControl控件会对其中的命令做出相应响应而无需额外的操作,如ArcMap中的居中放大FixedZoomIn,居中缩小FixedZoomOut,全图FullExtent等。对于BaseTool来说,点击该功能之后,只是开启一个交互的过程,需要用户再用鼠标、键盘等对地图做进一步交互式的操作,MapControl控件才会予以相应,如ArcMap中的拉框放大ZoomIn、拉框缩小ZoomOut、漫游Pan等.以FixedZoomIn为例,双击解决方案资源管理器中的FixedZoomIn。cs项,进入该类的代码编写界面。加入引用“ESRI。ArcGIS。Geometry",并在该类的最上方添加如下代码:publicoverridevoidOnClick(){//TODO:AddFixedZoomIn.OnClickimplementation//获取当前视图范围IActiveViewpActiveView=m_hookHelper.ActiveView;IEnvelopepEnvelope=pActiveView.Extent;//扩大视图范围并刷新视图pEnvelope.Expand(0.5,0。5,true);pActiveView.Extent=pEnvelope;pActiveView.Refresh();}在主程序代码中还添加了一个全局变量mTool,以确定选择的是哪个控件命令命令privatestringmTool;privatevoidmenuFixedZoomIn_Click(objectsender,EventArgse){//声明与初始化FixedZoomInfixedZoomin=newFixedZoomIn();//与MapControl关联fixedZoomin。OnCreate(this.axMapControl1.Object);fixedZoomin。OnClick();}4、三角网及泰森多边形构建解析首先在Form窗体上加一个PictureBox控件,在PictureBox的MouseDown事件下通过每次点击获取点的坐标e。X,e。YprivatevoidpicMap_MouseDown(objectsender,MouseEventArgse){Graphicsg=((PictureBox)sender).CreateGraphics();g.FillEllipse(Brushes。Black,e.X,e.Y,5,5);Pointpt=newPoint(e.X,e.Y);myPoints。Add(pt);g。Dispose();} 三角网的构建采用逐点插入法,首先对在鼠标单击事件下获取的点集进行排序,排序时X坐标从小到大排列,若X坐标相同则Y坐标从小到大排列。构建一个可以包含所有点集的超级三角形,并将超级三角形的三个顶点存入Triangle表中。从点集中取点判断点是否在三角形内,若点在三角形内,则将该三角形三边存入边列表中,若并从三角形列表中删除该三角形,如此循环,遍历点集里所有的点。最后删除与超级三角形有共同顶点的三角形及凹边界处三角形重点代码示例:if(myPoints.Count〈=0)return;else//对点集进行排序,先按X坐标从大到小排序//X坐标相同的按Y坐标从大到小排序myPoints=SortPoints(myPoints);//获得超级三角形SuperTriangle(myPoints);inti=0;while(i〈myPoints。Count){Pointpt=myPoints[i];List〈List〈Point>>edjest=newList〈List〈Point〉>();intj=0;while(triangle.Count!=0&&triangle.Count-1>=j){boolflag=true;List〈object〉mycircle=Circle(triangle,j);Pointcenter=(Point)mycircle[0];doubleradius=(double)mycircle[1];if(pt.X〉(center。X+radius)){flag=true;}elseif(Inside(pt,mycircle)){//edjest=Addnew(traingle,j);List<List<Point〉>ed=Addnew(triangle,j);edjest.Add(ed[0]);edjest.Add(ed[1]);edjest.Add(ed[2]);triangle。RemoveAt(j);flag=false;}if(flag)j++;}//删除重复的边edjest=Delete(edjest);triangle=NewTriangle(pt,edjest);i++;}//删除以超级三角形顶点为顶点的三角形triangle=SuperDelete(supertriangle);//删除凹边界处三角形triangle=TraingleDelete();using(Graphicsg=this.picMap.CreateGraphics()){for(intj=0;j〈triangle。Count;j++){Point[]myPoint=newPoint[3];myPoint[0]=(Point)triangle[j][0];myPoint[1]=(Point)triangle[j][1];myPoint[2]=(Point)triangle[j][2];g。DrawPolygon(newPen(Brushes。Red,3),myPoint);}}构建泰森多边形需要构建三角网。找出每个离散点周围的三角形即以该离散点为共同顶点的三角形,按逆时针排列起来以便下一步生成泰森多边形,连接该离散点周围三角形的外接圆的圆心。三角网边界处的泰森多边形可做垂直平分线与图廓相交,与图廓一起形成泰森多边形.(代码见附录)重点代码示例://使三角形三个点坐标都按逆时针方向存储triangle=Thiessen。SortTraingle(triangle);//存储三角网所有三角形的边Thiessen.Edge(triangle);//构成边界的边集合Thiessen。BorderEdge(Thiessen.allEdge);//寻找以边界点为顶点的三角形集合Thiessen.BorderTriangle(Thiessen.borderEdge,triangle);//除边界点外其他离散点Thiessen。CenterPoint(myPoints,Thiessen.borderEdge);//除边界点外其他离散点构成的泰森多边形集合Thiessen。ThiessenEdge(triangle,Thiessen。centerpoint);//边界离散点构成的泰森多边形集合Thiessen.MyBorderTheissen(Thiessen。borderEdge,Thiessen.myBorderTriangle);using(Graphicsg=this.picMap.CreateGraphics()){//绘制除边界点外其他离散点构成的泰森多边形集合for(inti=0;i〈Thiessen.myTheissen。Count;i++){g.DrawPolygon(newPen(Brushes.Black,3),Thiessen。myTheissen[i].ToArray());}//绘制边界离散点构成的泰森多边形集合for(inti=0;i<Thiessen。myBorderTheissen.Count;i++){g.DrawPolygon(newPen(Brushes.Black,3),Thiessen。myBorderTheissen[i].ToArray());}}八、源代码附录1、用户登录源码usingSystem;usingSystem.Collections.Generic;usingSystem。ComponentModel;usingSystem。Data;usingSystem.Drawing;usingSystem.Linq;usingSystem。Text;usingSystem.Windows.Forms;usingSystem.Data。SqlClient;namespaceMyMap{publicpartialclassLoginWindow:Form{publicLoginWindow(){InitializeComponent();}privatevoidbtnLogin_Click(objectsender,EventArgse){if(txtUserName.Text.Length<=0){MessageBox.Show("请输入用户名");return;}if(txtpwdPassword。Text。Length<=0){MessageBox.Show("请输入密码!");return;}DataSetds=SqlHelper.ExecuteDataSet(@"select*fromT_UserwhereUserName=@Name”,newSqlParameter("@Name",txtUserName.Text));if(ds.Tables[0]。Rows.Count<=0){MessageBox.Show("用户不存在!");return;}if(ds.Tables[0].Rows.Count>1){thrownewException(”不好啦!重复了!”);}DataRowrow=ds.Tables[0]。Rows[0];stringpassword=(string)row["PassWord”];longid=(long)row["Id"];interrortimes=(int)row[”ErorrTimes”];//错误次数大于3时//防御性编程if(errortimes〉=3){DateTimedate=(DateTime)row[”Lock”];TimeSpants=DateTime.Now—date;if(ts.TotalMinutes<=30){MessageBox.Show(@"输入错误次数太多,用户已被锁定,请于30分钟后再登陆,剩余时间”+(30—ts。TotalMinutes).ToString("0”)+"分钟",”错误提示",MessageBoxButtons。OK,MessageBoxIcon.Error);return;}else{//输错三次后30分钟后更新ErorrTimes=0SqlHelper.NonQuery(@”UpdateT_UsersetErorrTimes=0whereId=@id",newSqlParameter("@id”,id));}}if(password==txtpwdPassword.Text){DialogResultresult=MessageBox。Show(”欢迎您登陆!","用户登录",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);this。Hide();if(result==DialogResult.OK){MapWindowmw=newMapWindow();DialogResultmapresult=mw。ShowDialog();if(mapresult==DialogResult.Cancel){Application.Exit();}}else{Application。Exit();}}else{MessageBox.Show(”密码错误!”);SqlHelper.NonQuery(@”UpdateT_UsersetErorrTimes=ErorrTimes+1,Lock=GETDATE()whereId=@id",newSqlParameter("@id”,id));objectdate=row["Lock”];if(date==DBNull.Value){date=DateTime。Now;}TimeSpants=DateTime.Now-Convert。ToDateTime(date);if(ts。TotalMinutes>5){SqlHelper。NonQuery(@”UpdateT_UsersetErorrTimes=1whereId=@id",newSqlParameter("@id”,id));}return;}}privatevoidbtnCancel_Click(objectsender,EventArgse){this.Close();}privatevoidbtnRegister_Click(objectsender,EventArgse){DataSetds=SqlHelper.ExecuteDataSet(@"select*fromT_UserwhereUserName=@Name",newSqlParameter("@Name",txtUserName。Text));if(ds。Tables[0]。Rows.Count>=1){//thrownewException(”不好啦!重复了!”);MessageBox。Show("用户名已存在,请重新输入用户名注册”);return;}if(txtUserName.Text.Length〈=0){MessageBox。Show("用户名不能为空!”);return;}if(txtpwdPassword。Text.Length<=0){MessageBox。Show("密码不能为空!”);return;}SqlHelper.NonQuery(@"insertintoT_User(UserName,PassWord,ErorrTimes)Values(’"+txtUserName.Text+”’,'”+txtpwdPassword.Text+”’,0)");MessageBox。Show("恭喜”+txtUserName。Text+”注册成功!请重新登录","注册”);txtUserName.Text="";txtpwdPassword。Text=”";}}}2、属性查询源码usingSystem;usingSystem.Collections。Generic;usingSystem。ComponentModel;usingSystem。Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingESRI。ArcGIS。Controls;usingESRI。ArcGIS。Carto;usingESRI。ArcGIS。Geodatabase;usingESRI.ArcGIS。Display;namespaceMyMap{publicpartialclassAttributeQueryForm:Form{//存储地图数据privateAxMapControlmMapControl;privateDataGridViewdataGrid;//存储当前选中图层,IFeatureLayer继承自ILayerprivateIFeatureLayermFeatureLayer;//通过构造函数来传值publicAttributeQueryForm(AxMapControlmapcontrol,DataGridViewdataGridView){InitializeComponent();this。mMapControl=mapcontrol;this。dataGrid=dataGridView;}publicAttributeQueryForm(){}privateintGetLayerindexbyName(stringcbolayername){inti;for(i=0;i<mMapControl.LayerCount;i++){if(cbolayername==mMapControl。get_Layer(i)。Name)break;}returni;}privatevoidbtnOk_Click(objectsender,EventArgse){if(txtValue.Text==”"){MessageBox。Show("请输入您要查询什么");return;}//定义图层,要素游标,查询过滤器,要素IFeatureLayerpFeatureLayer;IFeatureCursorpFeatureCursor;IQueryFilterpQueryFilter;IFeatureSelectionpFeatureSelection;IActiveViewactiveview;IFeaturepFeature;//获取图层pFeatureLayer=this.mMapControl。Map.get_Layer(GetLayerindexbyName(cboLayer。Text))asIFeatureLayer;//如果图层名称不是cboLayer.Text,程序退出if(pFeatureLayer。Name!=cboLayer.Text)return;//清除上次查询结果this.mMapControl。Map。ClearSelection();activeview=this。mMapControl.MapasIActiveView;//IFeatureClasspFeatureClass=pFeatureLayer。FeatureClass;//pQueryFilter的实例化pQueryFilter=newQueryFilterClass();//设置查询过滤条件pQueryFilter.WhereClause=""+cboField.Text+"=’”+txtValue.Text+”’";//基于查询条件创建指针并回收pFeatureCursor=pFeatureLayer。Search(pQueryFilter,true);//获取查询到的要素pFeature=DisplayToDataGridDAL.GetFeature(pFeatureCursor);//获取查询到的要素pFeatureSelection=pFeatureLayerasIFeatureSelection;//根据查询条件选择要素pFeatureSelection.SelectFeatures(pQueryFilter,esriSelectionResultEnum.esriSelectionResultNew,false);//QI到ISelectionSetISelectionSetpSelectionSet=pFeatureSelection.SelectionSet;//判断是否获取到要素if(pFeature!=null){//Theselectionsetthatdefinesthesubsetoffeaturesinaselectionlayer.//ISelectionSetDefinitionSelectionSet{get;}只读属性IFeatureLayerDefinitionpFDefinition=pFeatureLayerasIFeatureLayerDefinition;//创建新图层IFeatureLayerpNewFeatureLayer=pFDefinition。CreateSelectionLayer("newlayerName”,true,null,null);pNewFeatureLayer。Name=”查询结果”;mMapControl。AddLayer(pNewFeatureLayerasILayer);//获取最小外包矩形并放大到当前视图范围activeview。Extent=pFeature.Shape.Envelope;activeview。Refresh();}else{//没有得到pFeature的提示MessageBox。Show(”没有找到"+txtValue。Text,”提示”);return;}//把查询到的要素的属性显示到DataGridView中DisplayToDataGridDAL。Dataview(pFeatureCursor,dataGrid,pFeatureLayer);this.mMapControl.DeleteLayer(0);this。mMapControl.Refresh();}privatevoidAttributeQueryForm_Load(objectsender,EventArgse){//MapControl中没有图层时返回if(this。mMapControl.LayerCount〈=0)return;//获取MapControl中的全部图层名称,并加入ComboBox//图层ILayerpLayer;//图层名称stringstrLayerName;for(inti=0;i<this。mMapControl。LayerCount;i++){pLayer=this.mMapControl.get_Layer(i);strLayerName=pLayer。Name;//图层名称加入cboLayerthis。cboLayer。Items.Add(strLayerName);}//默认显示第一个选项this.cboLayer.SelectedIndex=0;}privatevoidcboLayer_SelectedIndexChanged(objectsender,EventArgse){this.cboField。Items。Clear();//获取cboLayer中选中的图层mFeatureLayer=mMapControl。get_Layer(cboLayer。SelectedIndex)asIFeatureLayer;//要素集合IFeatureClasspFeatureClass=mFeatureLayer.FeatureClass;//字段名称stringstrFldName;for(inti=0;i<pFeatureClass。Fields。FieldCount;i++){strFldName=pFeatureClass。Fields。get_Field(i).Name;//图层名称加入cboFieldthis.cboField。Items。Add(strFldName);}//默认显示第一个选项this.cboField。SelectedIndex=0;}privatevoidbtnCancel_Click(objectsender,EventArgse){this.Close();}}}3、DisplayToDataGridDAL类源码classDisplayToDataGridDAL{privatestaticIFeaturepFeature;///<summary>///返回游标所指向的第一个元素///</summary〉///<paramname="pFeatureCursor"></param>///〈returns>〈/returns>publicstaticIFeatureGetFeature(IFeatureCursorpFeatureCursor){returnpFeature=pFeatureCursor。NextFeature();}///〈summary>///获取图层类型///〈/summary>///<paramname=”pLayer”></param〉///〈returns>〈/returns>publicstaticstringgetShapeType(IFeatureLayerpFeatureLayer){switch(pFeatureLayer.FeatureClass.ShapeType){caseesriGeometryType.esriGeometryPoint:return"Point”;caseesriGeometryType.esriGeometryPolyline:return"Polyline";caseesriGeometryType.esriGeometryPolygon:return"Polygon";default:return"”;}}///〈summary〉///获取查询过滤后的游标,将查询到的要素的属性填充到DataGridView///〈/summary>///〈paramname="pFeatureCursor"〉</param>///〈paramname=”datagridview">〈/param〉publicstaticvoidDataview(IFeatureCursorpFeatureCursor,DataGridViewdatagridview,IFeatureLayerpFeatureLayer){DataSetds=newDataSet();DataTabletable=newDataTable(”MyTable");stringshapetype=getShapeType(pFeatureLayer);for(inti=0;i〈pFeatureCursor。Fields。FieldCount;i++){//创建表头table.Columns.Add(pFeatureCursor.Fields.get_Field(i)。Name);}while(pFeature!=null){DataRowrow=table.NewRow();for(inti=0;i〈pFeature。Fields。FieldCount;i++){//如果字段类型是几何类型esriFieldTypeGeometry,则字段值为shapetype//反之为get_Value()if(pFeature。Fields。get_Field(i).Type==esriFieldType。esriFieldTypeGeometry){row[i]=shapetype;}else{row[i]=pFeature.get_Value(i).ToString();}}table。Rows。Add(row);//游标向下移动一个要素,指向下一个要素pFeature=pFeatureCursor。NextFeature();}ds。Tables。Add(table);//datagridview绑定数据源datagridview。DataSource=ds.Tables["MyTable”];}}4、FixedZoomIn类源码usingSystem;usingSystem。Drawing;usingSystem.Runtime。InteropServices;usingESRI。ArcGIS。ADF。BaseClasses;usingESRI.ArcGIS。ADF。CATIDs;usingESRI.ArcGIS.Controls;usingESRI.ArcGIS.Carto;usingESRI.ArcGIS.Geometry;namespaceMyMap。Classes{[Guid("d122d92b-6229-4116—ab3e-a45b1d3d05bc")][ClassInterface(ClassInterfaceType.None)][ProgId(”MyMap。Classes.FixedZoomIn")]publicsealedclassFixedZoomIn:BaseCommand{#regionCOMRegistrationFunction(s)[ComRegisterFunction()][ComVisible(false)]staticvoidRegisterFunction(TyperegisterType){//RequiredforArcGISComponentCategoryRegistrarsupportArcGISCategoryRegistration(registerType);}[ComUnregisterFunction()][ComVisible(false)]staticvoidUnregisterFunction(TyperegisterType){//RequiredforArcGISComponentCategoryRegistrarsupportArcGISCategoryUnregistration(registerType);}#regionArcGISComponentCategoryRegistrargeneratedcodeprivatestaticvoidArcGISCategoryRegistration(TyperegisterType){stringregKey=string。Format(”HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}",registerType.GUID);ControlsCommands.Register(regKe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论