C#二次开发ArcGIS查询功能_第1页
C#二次开发ArcGIS查询功能_第2页
C#二次开发ArcGIS查询功能_第3页
C#二次开发ArcGIS查询功能_第4页
C#二次开发ArcGIS查询功能_第5页
免费预览已结束,剩余31页可下载查看

下载本文档

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

文档简介

1、目录1、 ArcGIS 简介 22、 ArcGIS 开发方法介绍 2三、数据库设计 21、数据库的建立 22、数据表的设计 3四、地理数据入库(地图扫描矢量化方法介绍) 3五、功能设计(流程图) 5六、程序运行界面介绍 61、用户登录界面 62、主程序界面 63、属性查询界面 74、三角网及泰森多边形 7七、程序解析说明 81、用户登录界面程序解析说明 82、属性查询程序解析说明 93、自定义控件命令解析 114、三角网及泰森多边形构建解析 11八、源代码附录 141、用户登录源码 142、属性查询源码 173、DisplayToDataGridDAL类源码214、FixedZoomln 类源

2、码225、FixedZoomOut 类源码 246、FullExtent 类源码267、 Pan 类源码 288、 ZoomIn 类源码 319、 ZoomOut 类源码 34地理信息系统课程设计报告一、ArcGI漪介ArcGIS 是美国 ESRI (Environmental Systems Research Institute, Inc.美国环境系 统研究所公司)推出的一条为不同需求层次用户提供的全面的、可伸缩的 GIS产品 线和解决方案。ESRI是GIS领域的拓荒者和领导者,而 ArcGIS也代表了当前GIS 行业最高的技术水平。ArcGIS是一个可伸缩的GIS平台,可以运行在桌面端、服

3、务器端和移动设备上。 它包含了一套建设完整GIS系统的应用软件,这些软件可以互相独立或集成配合使 用,为不同需求的用户提供完善的解决之道。ArcGIS是基于一套共享的GIS组件开发实现的,这套组件被命名为ArcObjects, 它包含了大量可编程组件,实现了 ArcGIS的全部功能。因此,ArcObjects可以被认 为是ArcGIS产品的核心,熟悉 ArcObjects的过程同时也是熟悉 ArcGIS Engine的过二、ArcGIS开发方法介绍Gis的开发方法有三种,即独立开发,宿主型二次开发,基于 gis组件的二次开 发,其中独立开发为底层开发,不依赖于任何 gis工具软件,开发难度太大

4、,后两者 是基于一种软件的二次开发,这样的二次开发则相对较简单,他的好处也是显而易 见的。Esri公司推出的ArcGIS产品不仅仅包含基础平台软件,也包含供用户二次开发 的组件,那么这些组件也包含 C/S、B/S、移动端的。C/S架构主要是应用于局域网 方面,一般是安装开发软件,一般情况下机器都不连互联网,主要处理数据编辑、 数据入库、地图整饰等对机器性能要求比较高。B/S架构主要应用于局域网或者互联 网,一般情况下使用浏览器,主要是进行数据查询、分析等。ArcGIS Engine开发工具包是一个基于组件的软件开发产品,用于建立和部署自 定义GIS和制图应用程序。ArcGIS Engine开发

5、工具包不是一个终端用户产品,而是 一个应用程序开发人员的工具包。 可以用ArcGIS Engine开发工具包建立基本的地图 浏览器或综合、动态的GIS编辑工具。使用ArcGIS Engine开发工具包,开发人员在 建立定制的地图接口方面具有前所未有的灵活性。开发人员可以使用几个API中的任何一个来建立独一无二的应用程序,或者将ArcGIS Engine组件与其他软件组件组合起来实现地图与用户管理信息之间的协同关系。三、数据库设计1、数据库的建立通过ArcCatalog创建个人地理数据库 >>要素集 >>要素类 >>编辑属性-I i NEU全图 日由NEUG3

6、冷体育场 回房屋 aafw 国草地 以路灯 三道路2、数据表的设计(1)房屋字段名称字段解释长度备注IDID号LongName名称Char20Owner所有者Char20Layers层数Integer20Material材质Char20Add地址Char40BuildArea建筑面积FloatRemark备注Char40(2)道路字段名称字段解释长度备注IDID号LongName名称Char20Material铺设材料Char20Width道路宽度FloatRemark备注Char40等等四、地理数据入库(地图扫描矢量化方法介绍)1、打开ArcMap”添加“影像配准”工具栏。把需要进行配准的影

7、像一“校内平面图 测绘14级.dwg”添加到ArcMap中,会发现“影像配准”工具栏中的工具被激活。2、在“影像配准”工具栏上,点击“添加控制点(add control point)”按钮。使用该 工具在扫描图上精确到找一个控制点点击,然后鼠标右击输入该点实际的坐标位置。用相同的方法,在影像上增加多个控制点(大于 3个),输入它们的实际坐标。点击 “影像配准”工具栏上的“查看链接表(view link table)”按钮。对于误差较大的控 制点,可以删除然后重新采集。3、打开ArcCatalog.在指定目录下,鼠标右击,在“新建”中,选择“个人Geodatabas3。 并修改该Geodatab

8、ase据库的名称。右击新建要素集并为要素集设置投影坐标系。右击新建要素类,选择要素类型,并为要素命名,添加要素属性字段“Name”等。这样便建好了一个点,线或面要素4、在ArcMap中编辑工作条上点击开始编辑,这时会弹出来一个窗口选择要素,然 后在已经配准后的图像上选择相应的要素类型一一绘制,右击图层控件上的某个要 素图层打开属性表可以编辑属性。地理信息系统课程设计报告5 / 385、将矢量化好后的图层导出为(*mxd)文件邛於耳中 五、功能设计(流程图)在5分U内连续登错三次需等待弓。分钟再次登录,每5分4巾量借记覆源露一打开地图文档(mxd ) .shp)显丁在MapCortrol显丁在T

9、OCControl点击属性杳询建1E磬地理信息系统课程设计报告, UirlMHBlE LPiXnU 巾L六、程序运行界面介绍1、用户登录界面2、主程序界面地理信息系统课程设计报告7 / 38地理信息系统课程设计报告3、属性查询界面地理信息系统课程设计报告9 / 384、三角网及泰森多边形七、程序解析说明1、用户登录界面程序解析说明用户登录设计思路:(1)用户输入用户名和密码,用户名不能为空,密码不能为空。(2)密码在五分钟之内连续输错三次,用户名被锁定,30分钟后才能再次登录。(3)若密码输错次数小于3次,则从最后一次输错时刻算起,五分钟之后用户登录错 误次数归零。用户注册,数据库中检索此用户

10、,若用户存在则提示用户名已存在,反之注册成 功,需重新登录。重点代码解析:使用参数化查询避免注入漏洞攻击,用户信息存储在SQL Server数据库的T_User表中/只用来执行查询结果较少的sqlpublicstatic DataSet ExecuteDataSet( string sql, paramsSqlParameter 口 parameters)using ( SqlConnection conn = newSqlConnection (ConStr)conn.Open();using ( SqlCommandcmd = conn.CreateCommand()cmd.Command

11、Text = sql;cmd.Parameters.AddRange(parameters);/SqlDataAdapter 如同一个适配器,过渡桥梁的作用SqlDataAdapter adapter = newSqlDataAdapter (cmd);DataSet dataset = neWDataSet ();adapter.Fill(dataset);return dataset;当用户输错三次以上并且时间少于30分钟时不允许登陆,TimeSpants =DateTime.Now - date;用于存储间隔时间if (errortimes >= 3)DateTime date =

12、 ( DateTime )row "Lock"TimeSpan ts = DateTime .Now - date;if (ts.TotalMinutes <= 30)MessageBoxShow( 输入错误次数太多,用户已被锁定,请于30分钟后再登陆,剩余时间"+(30 - ts.TotalMinutes).ToString("0" ) + "分钟","错误提示",MessageBoxButtons .OK, MessageBoxIcon .Error);return ; else/输错三次后30

13、分钟后更新ErorrTimes=0SqlHelper .NonQuery( "Update T_User set ErorrTimes=0 where Id=id" , newSqlParameter ("id", id); 3、若密码输错次数小于3次,则从最后一次输错时刻算起,五分钟之后用户登录错 误次数归零即 Update T_User set ErorrTimes=1 where Id=id TimeSpan ts = DateTime .Now - Convert .ToDateTime(date);if (ts.TotalMinutes >

14、; 5) SqlHelper .NonQuery( "Update T_User set ErorrTimes=1 where Id=id" , newSqlParameter ("id", id);2、属性查询程序解析说明重点代码解析:(1)进入属性查询界面的代码:通过AttributeQueryForm类的构造函数来存储地图的数据和绑定 DataGridView的数AttributeQueryForm attributequery = newAttributeQueryForm (this .axMapControl1, this .dataGrid

15、View1);attributequ ery.ShowDialogO;从主程序axMapControl传值过来的地图数据存储在private AxMapControl mMapControl;并且在属性查询窗体的 ComboBox!合控件cboLayer中添加各个图层名 /图层名称加入cboLayer this .cboLayer.Items.Add(strLayerName);通过get_Layer(cboLayer.SelectedIndex)获取选中图层,并将每个图层的字段名显示在名为cboField的ComboBox件。strFldName = pFeatureClass.Fields

16、.get_Field(i).Name;/图层名称加入cboFieldthis .cboField.Items.Add(strFldName);(3)属性查询中需要认识学习接口的相关知识,接口是一种规范、功能。在属性查询 中我们需要用到IQueryFilter接口,该接口通过 WhereClause属性来获取查询数据, 类似于SQ中的where语句。然后再通过图层的Search方法基于查询条件返回要素游 地理信息系统课程设计报告标pFeatureCursor 。如下图,pFeatureCursor指针一开始指向第0层,每调用一下 NextFeature()方法,指针就往下移动一格直到指向 nul

17、l代码示例:/定义图层,要素游标,查询过滤器,要素IFeatureLayer pFeatureLayer;IFeatureCursor pFeatureCursor;IQueryFilter pQueryFilter;IFeatureSelection pFeatureSelection;IActiveView activeview;IFeature pFeature;/获取图层pFeatureLayer = this .mMapControl.Map.get_Layer(GetLayerindexbyName(cboLayer.Text) asIFeatureLayer ;/如果图层名称不是

18、cboLayer.Text ,程序退出if (pFeatureLayer.Name != cboLayer.Text) return /清除上次查询结果this .mMapControl.Map.ClearSelection();activeview = this .mMapControl.Map asIActiveView ;/pQueryFilter 的实例化pQueryFilter = newQueryFilterClass ();/设置查询过滤条件pQueryFilter.WhereClause= "" + cboField.Text + "='&

19、quot; + txtValue.Text +/基于查询条件创建指针并回收pFeatureCursor = pFeatureLayer.Search(pQueryFilter,true );/获取查询到的要素然后再调用DisplayToDataGridDAL类中的方法,将查询出来的要素字段值显示在DataGridView中,DisplayToDataGridDAL类是自己写的一个类(代码见附录) 代码示例:DisplayToDataGridDAL .Dataview(pFeatureCursor, dataGrid,pFeatureLayer);高亮并居中显示选中的要素:activeview.

20、Extent =pFeature.Shape.Envelope;activeview.Refresh();3、自定义控件命令解析以下讲述ArcEngine自定义开发的一些控件命令,如居中放大,居中缩小,拉框 放大,拉框缩小,漫游,显示全图等。基于BaseCommand功能实现与Button的功能类似,是当鼠标点击按钮的时候, MapControl控件会对其中的命令做出相应响应而无需额外的操作,如ArcMa叶的居中放大 FixedZoomln ,居中缩小 FixedZoomOut,全图 FullExtent 等。对于BaseTool来说,点击该功能之后,只是开启一个交互的过程,需要用户再用 鼠标

21、、键盘等对地图做进一步交互式的操作,MapControl控件才会予以相应,如ArcMa叶的拉11放大ZoomIn拉框缩小ZoomOut漫游Pan。以FixedZoomIn为例,双击解决方案资源管理器中的FixedZoomIn.cs项,进入该类的代码编写界面。加入引用“ESRI.ArcGIS.Geometry”,并在该类的最上方添加如下代码:publicoverridevoid OnClick()/ TODO: Add FixedZoomIn.OnClick implementation /获取当前视图范围IActiveView pActiveView = m_hookHelper.Active

22、View;IEnvelope pEnvelope = pActiveView.Extent;/扩大视图范围并刷新视图pEnvelope.Expand(0.5, 0.5, true );pActiveView.Extent = pEnvelope;pActiveView.Refresh();在主程序代码中还添加了一个全局变量mTool,以确定选择的是哪个控件命令命令privatestring mTool;privatevoid menuFixedZoomIn_Click( object sender, EventArgs e)/声明与初始化FixedZoomIn fixedZoomin = ne

23、wFixedZoomIn ();/ 与 MapControl 关联fixedZoomin.OnCreate( this .axMapControl1.Object);fixedZoomin.OnClick();4、三角网及泰森多边形构建解析首先在Form窗体上加一个PictureBox控件,在PictureBox的MouseDown事件下通过每次点击获取点的坐标e.X, e.Yprivatevoid picMap_MouseDown( object sender, MouseEventArgs e) Graphics g =( PictureBox )sender).CreateGraphic

24、s();g.FillEllipse( Brushes .Black, e.X, e.Y, 5, 5);Point pt = newPoint (e.X, e.Y);myPoints.Add(pt);g.Dispose();三角网的构建采用逐点插入法,首先对在鼠标单击事件下获取的点集进行排序,排 序时X坐标从小到大排列,若X坐标相同则Y坐标从小到大排列。构建一个可以包含 所有点集的超级三角形,并将超级三角形的三个顶点存入Triangle表中。从点集中取点判断点是否在三角形内,若点在三角形内,则将该三角形三边存入边列表中,若 并从三角形列表中删除该三角形,如此循环,遍历点集里所有的点。最后删除与超

25、 级三角形有共同顶点的三角形及凹边界处三角形重点代码示例:if (myPoints.Count <= 0)return ;else/对点集进行排序,先按河标从大到小排序/ X坐标相同的按Y坐标从大到小排序myPoints = SortPoints(myPoints);/获得超级三角形SuperTriangle(myPoints);int i = 0;while (i < myPoints.Count)Point pt = myPointsi;List <List <Point >> edjest = newList <List <Point &g

26、t;>();int j = 0;while (triangle.Count != 0 && triangle.Count - 1 >= j)bool flag = true ;List object > mycircle = Circle(triangle, j);Point center = ( Point )mycircle0;double radius = ( double )mycircle1;if (pt.X > (center.X + radius)flag=true;elseif (Inside(pt, mycircle)/edjest =

27、 Addnew(traingle, j);List <List <Point >> ed = Addnew(triangle, j);edjest.Add(ed0);edjest.Add(ed1);edjest.Add(ed2);triangle.RemoveAt(j);flag = false ;if (flag)j+;/删除重复的边edjest = Delete(edjest);triangle = NewTriangle(pt, edjest);i+;/删除以超级三角形顶点为顶点的三角形triangle = SuperDelete(supertriangle);/

28、删除凹边界处三角形triangle = TraingleDelete();usingfor (Point(Graphics g = this .picMap.CreateGraphics() int j = 0; j < triangle.Count; j+)myPoint = newPoint 3;地理信息系统课程设计报告15 / 38myPoint0=(myPoint1=(myPoint2=( g.DrawPolygon(Point )trianglej0;Point )triangle皿1;Point )triangle皿2;newPen( Brushes .Red,3), myP

29、oint);构建泰森多边形需要构建三角网。找出每个离散点周围的三角形即以该离散点为共 同顶点的三角形,按逆时针排列起来以便下一步生成泰森多边形,连接该离散点周 围三角形的外接圆的圆心。三角网边界处的泰森多边形可做垂直平分线与图廓相交, 与图廓一起形成泰森多边形。(代码见附录) 重点代码示例:/使三角形三个点坐标都按逆时针方向存储triangle= Thiessen .SortTraingle(triangle);/存储三角网所有三角形的边Thiessen .Edge(triangle);/构成边界的边集合Thiessen .BorderEdge( Thiessen .allEdge);/寻找以

30、边界点为顶点的三角形集合Thiessen .BorderTriangle( Thiessen .borderEdge, triangle);/除边界点外其他离散点Thiessen .CenterPoint(myPoints, Thiessen .borderEdge);/除边界点外其他离散点构成的泰森多边形集合Thiessen .ThiessenEdge(triangle, Thiessen .centerpoint);/边界离散点构成的泰森多边形集合Thiessen .MyBorderTheissen( Thiessen .borderEdge, Thiessen .myBorderTria

31、ngle);using ( Graphics g = this .picMap.CreateGraphics() /绘制除边界点外其他离散点构成的泰森多边形集合for ( int i = 0; i < Thiessen .myTheissen.Count; i+) g.DrawPolygon( newPen( Brushes .Black,3), Thiessen .myTheisseni.ToArray(); /绘制边界离散点构成的泰森多边形集合for (int i = 0; i < Thiessen .myBorderTheissen.Count; i+) g.DrawPoly

32、gon( newPen( Brushes .Black,3), Thiessen .myBorderTheisseni.ToArray(); 八、源代码附录1、用户登录源码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace

33、MyMap publicpartialclass LoginWindow : Form public LoginWindow() InitializeComponent(); privatevoid btnLogin_Click( object sender, EventArgs e) if (txtUserName.Text.Length <= 0) MessageBoxShow("请输入用户名"); return ; if (txtpwdPassword.Text.Length <= 0)MessageBoxShow("请输入密码!”力 retur

34、n ;DataSet ds = SqlHelper .ExecuteDataSet( "select * from T_User where UserName=Name", newSqlParameter ("Name" txtUserName.Text);if (ds.Tables0.Rows.Count <= 0) MessageBoxShow("用户不存在!"); return ;if (ds.Tables0.Rows.Count > 1) thrownew Exception ("不好啦!重复了 !&qu

35、ot;);DataRow row = ds.Tables0.Rows0;string password = ( string )row "Password" long id = ( long )row "Id"int errortimes = ( int )row "ErorrTimes" ;/错误次数大于3时/防御性编程if (errortimes >= 3) DateTime date = ( DateTime )row "Lock"TimeSpan ts = DateTime .Now - date;

36、if (ts.TotalMinutes <= 30)MessageBoxShow( 输入错误次数太多,用户已被锁定 ,请于30分钟后再登陆,剩余时间"+(30 - ts.TotalMinutes).ToString("0" ) + "分钟","错误提示",MessageBoxButtons .OK, MessageBoxIcon .Error); return ; else/输错三次后30分钟后更新ErorrTimes=0SqlHelper .NonQuery( "Update T_User set Eror

37、rTimes=0 where Id=id" , newSqlParameter ("id", id);if (password = txtpwdPassword.Text) DialogResult result=MessageBoxShow("欢迎您登陆!","用户登录",MessageBoxButtons .OKCancel, MessageBoxIcon .Question);this .Hide();if (result = DialogResult .OK)地理信息系统课程设计报告MapWindowmw = neW

38、MapWindoW);DialogResult mapresult= mw.ShowDialog();if (mapresult= DialogResult .Cancel) Application .Exit();elseApplication .Exit(); else MessageBoxShow("密码错误!");SqlHelper .NonQuery( "Update T_User set ErorrTimes=ErorrTimes+1,Lock=GETDATE() where Id=id", newSqlParameter ("id

39、", id);object date = row "Lock"if (date = DBNull .Value)date = DateTime .Now;TimeSpan ts = DateTime .Now - Convert .ToDateTime(date);if (ts.TotalMinutes > 5) SqlHelper .NonQuery( "Update T_User set ErorrTimes=1 where Id=id" , newSqlParameter ("id", id); return ;

40、 privatevoid btnCancel_Click( object sender, EventArgs e) this .Close();privatevoid btnRegister_Click( object sender, EventArgs e)DataSet ds = SqlHelper .ExecuteDataSet( "select * from T_User where UserName=Name" newSqlParameter ("Name" txtUserName.Text);if (ds.Tables0.Rows.Count

41、 >= 1) /throw new Exception(" 不好啦!重复了 !");MessageBoxShow("用户名已存在,请重新输入用户名注册");return ;if (txtUserName.Text.Length <= 0)MessageBoxShow("用户名不能为空!"); return ;if (txtpwdPassword.Text.Length <= 0) MessageBoxShow("密码不能为空!"); return ;SqlHelper .NonQuery( &qu

42、ot;insert into T_User(UserName,PassWord,ErorrTimes) Values。' txtUserName.Text +"','"+ txtpwdPassword.Text +"',0)");MessageBoxShow("恭喜"+ txtUserName.Text +"注册成功!请重新登录 ","注册");txtUserName.Text =txtpwdPassword.Text = """&q

43、uot;2、属性查询源码地理信息系统课程设计报告19 / 38using using using using using using using using using using using usingFormSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;ESRI.ArcGIS.Controls;ESRI.ArcGIS.Carto;ESRI.ArcGIS.Geodatabase;ESR

44、I.ArcGIS.Display;namespace MyMappublicpartialclass AttributeQueryForm/存储地图数据 private AxMapControl mMapControl;private DataGridView dataGrid;/存储当前选中图层,IFeatureLayer 继承自ILayer private IFeatureLayer mFeatureLayer;/通过构造函数来传值public AttributeQueryForm( AxMapControl mapcontrol, DataGridView dataGridView)In

45、itializeComponent();this .mMapControl = mapcontrol;this .dataGrid = dataGridView;public AttributeQueryForm() privateint GetLayerindexbyName( string cbolayername) int i;for (i = 0; i < mMapControl.LayerCount; i+) if (cbolayername = mMapControl.get_Layer(i).Name) break ; return i;privatevoid btnOk_

46、Click( object sender, EventArgs e)if (txtValue.Text ="")MessageBoxShow("请输入您要查询什么 "); return ;/定义图层,要素游标,查询过滤器,要素 IFeatureLayer pFeatureLayer;IFeatureCursor pFeatureCursor;IQueryFilter pQueryFilter;IFeatureSelection pFeatureSelection; IActiveView activeview;IFeature pFeature;/获取图

47、层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.Map asIActiveView ;/IFeatureClass pFeature

48、Class = pFeatureLayer.FeatureClass;/pQueryFilter的实例化pQueryFilter = neWQueryFilterClass ();/设置查询过滤条件 pQueryFilter.WhereClause= "" + cboField.Text + "='" + txtValue.Text + ""'/基于查询条件创建指针并回收 pFeatureCursor = pFeatureLayer.Search(pQueryFilter,true );/获取查询到的要素pFeatur

49、e = DisplayToDataGridDAL .GetFeature(pFeatureCursor);/获取查询到的要素 pFeatureSelection = pFeatureLayer asIFeatureSelection ; /根据查询条件选择要素pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum .esriSelectionResultNew, false ); /QI 至1J ISelectionSet ISelectionSet pSelectionSet = pFeatureSelec

50、tion.SelectionSet; /判断是否获取到要素 if (pFeature!= null ) /The selection set that defines the subset of features in a selection layer. /ISelectionSet DefinitionSelectionSet get; 只读属性IFeatureLayerDefinition pFDefinition = pFeatureLayer asIFeatureLayerDefinition ;/创建新图层IFeatureLayer pNewFeatureLayer = pFDef

51、inition.CreateSelectionLayer("newlayerName",true , null , null ); pNewFeatureLayer.Name ="查询结果";mMapControl.AddLayer(pNewFeatureLayer asILayer );/获取最小外包矩形并放大到当前视图范围activeview.Extent =pFeature.Shape.Envelope; activeview.Refresh(); else /没有得到pFeature的提示 MessageBoxShow("没有找至ij

52、" + txtValue.Text,"提示");return ;/把查询到的要素的属性显示到DataGridView中DisplayToDataGridDAL .Dataview(pFeatureCursor, dataGrid,pFeatureLayer);this .mMapControl.DeleteLayer(0); this .mMapControl.Refresh(); privatevoid AttributeQueryForm_Load( object sender, EventArgs e) /MapControl中没有图层时返回if ( thi

53、s .mMapControl.LayerCount <= 0)地理信息系统课程设计报告return ; /获取MapControl中的全部图层名称,并加入 ComboBox /图层 ILayer pLayer; /图层名称 string strLayerName; for ( int i = 0; i < this .mMapControl.LayerCount; i+) pLayer = this .mMapControl.get_Layer(i); strLayerName = pLayer.Name; /图层名称加入cboLayer this .cboLayer.Items.

54、Add(strLayerName); /默认显示第一个选项 this .cboLayer.SelectedIndex = 0; privatevoid cboLayer_SelectedIndexChanged( object sender, EventArgs e) this .cboField.Items.Clear(); /获取cboLayer中选中的图层 mFeatureLayer = mMapControl.get_Layer(cboLayer.SelectedIndex)asIFeatureLayer ;/要素集合 IFeatureClass pFeatureClass = mFe

55、atureLayer.FeatureClass; /字段名称 string strFldName; for (int i = 0; i < pFeatureClass.Fields.FieldCount; i+) strFldName = pFeatureClass.Fields.get_Field(i).Name; /图层名称加入cboField this .cboField.Items.Add(strFldName); /默认显示第一个选项 this .cboField.SelectedIndex = 0; privatevoid btnCancel_Click( object se

56、nder, EventArgs e) this .Close(); 3、DisplayToDataGridDAL 类源码class DisplayToDataGridDAL privatestatic IFeature pFeature;/<summary>/返回游标所指向的第一个元素/</summary>/<param name="pFeatureCursor"></param> /<returns></returns>publicstatic IFeature GetFeature( IFeatureCursor pFeatureCursor) return pFeature = pFeatureCursor.NextFeature(); /<summary> /获取图层类型 /</summary> /<param name="pLayer"></param> /<returns></returns>publicstati

温馨提示

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

评论

0/150

提交评论