ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:476.14KB ,
资源ID:3353548      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3353548.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(AE开发实例代码总结doc资料.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

AE开发实例代码总结doc资料.docx

1、AE开发实例代码总结doc资料AE开发实例代码总结1、AE开发技术文档一、数据加载问题1、加载个人数据库个人数据库是保存在Access中的数据库。加载方式有两种:通过名字和通过属性加载(也许不只是这两种,AE中实现同一功能可以有多种方式)A、通过设置属性加载个人数据库首先通过IPropertySet接口 定义要连接数据库的一些相关属性,在个人数据库中为数据库的路径,例如:IPropertySet Propset= new PropertySetClass(); Propset.SetProperty(“DATABASE”,”D:testAodatashMapdata.mdb”);当定义完属性并

2、设置属性后就可以进行打开数据库的操作了,在ArcEngine开发中存在IWorkspaceFactory 、IFeatureWorkspace 、IFeatureClass 、IFeatureLayer等几个常用的用于打开和操作数据空间地物的接口。IWorkspaceFactory 是一个用于创建和打开工作空间的接口,它是一个抽象的接口,我们在具体应用时要用对应的工作空间实例化它,如下: IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass (); 如果我们打开的是SDE 数据库就要用 SdeWorkspaceFactoryClass

3、 实例化Fact。当我们完成了工作空间的实例化后就可以根据上边设置的属性打开对应的Access 数据库了。打开方式如下: IFeatureWorkspace Workspace = Fact.Open( Propset,0) as IFeatureWorkspace; 打开Access 工作空间后接下来的事情是做什么了,很简单,找到对应的地物类,赋给相应的层,通过MapControl 控件添加对应的层,然后刷新地图。以下为添加某一层的代码: IFeatureClass Fcls = Workspace.OpenFeatureClass(District);/找到对应的地物类 IFeatureL

4、ayer Fly = new FeatureLayerClass();/建立新图层 Fly.FeatureClass = Fcls; /将地物赋给相应的层MapCtr.Map.AddLayer (Fly);/添加层 MapCtr.ActiveView.Refresh();/刷新地图 其中District 为地物类的名字,MapCtr 为AE中MapControl 的对象。上边的通过属性设置加载数据空间的方式还可以用于SDE 数据库,在SDE 数据库加载时会介绍。以下为通过设置属性加载Access 数据库的完整C#代码:public void AddAccessDBByPro() IProper

5、tySet Propset = new PropertySetClass(); Propset.SetProperty(DATABASE,D:testAodatashMapData.mdb ); IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass (); IFeatureWorkspace Workspace = Fact.Open(Propset,0) as IFeatureWorkspace; IFeatureClass Fcls = Workspace.OpenFeatureClass (District); IFeature

6、Layer Fly = new FeatureLayerClass(); Fly.FeatureClass = Fcls; MapCtr.Map.AddLayer(Fly); MapCtr.ActiveView.Refresh(); B、通过数据库名字加载个人数据库public void AddAccessDBByName()IworkspaceName pWorkspaceName = new WorkspaceNameClass();pWorkspaceName.WorkspaceFactoryProgID= “esriDataSourcesGDB.AccessWorkspaceFacto

7、ry”;pWorkspaceName.PathName =“D:testAodatashMapData.mdb”;IName n=pWorkspaceName as IName;IFeatureWorkspace Workspace= n.Open() as IFeatureWorkspace;IFeatureClass Fcls = Workspace.OpenFeatureClass (District); IFeatureLayer Fly = new FeatureLayerClass(); Fly.FeatureClass = Fcls; MapCtr.Map.AddLayer(Fl

8、y); MapCtr.ActiveView.Refresh(); 首先创建一个个人数据库工作空间名,再指定工作空间名的ProgID,以确定打开的是什么类型的工作空间,例如在打开Access个人数据库时,使用下面代码;IworkspaceName pWorkspaceName = new WorkspaceNameClass();pWorkspaceName.WorkspaceFactoryProgID= “esriDataSourcesGDB.AccessWorkspaceFactory”;pWorkspaceName.PathName =“D:testAodatashMapData.mdb”

9、;属性WorkspaceFactoryProgID可以确保工作空间是AccessWorkspaceFactory,即个人数据库,同时要指定打开数据库路径。为了打开数据库,打开工作空间必须使用IName接口(思考有没有其他办法),所以接着定义IName、对象,并把工作空间名转换成IName类型,并赋值给IName对象,然后通过IName对象的open方法打开相应的工作空间,代码如下:IName n=pWorkspaceName as IName;IFeatureWorkspace Workspace= n.Open() as IFeatureWorkspace;2、AE开发编辑功能数据编辑问题1

10、. 需要了解的概念长事务 短事务 编辑空间 抽象类,类,和组件对象类2、最基本的添加点线面功能添加点(方法有多种,基本思路一样,只是少量的接口有变化)通过FeatureClass的CreatFeature函数来添加地物。public void AddPointByStore()/得到要添加地物的图层IFeatureLayer l=MapCtr.Map.get_Layer(0) as IFeatureLayer;/定义一个地物类,把要编辑的图层转化为定义的地物类IFeatureClass fc= l.FeatureClass;/先定义一个编辑的工作空间,然后把它转化为数据集,最后转化为编辑工作空

11、间,IWorkspaceEdit w=(fc as IDataset).Workspace as IWorkspaceEdit;IFeature f;IPoint p;/开始事务操作w.StartEditing(false); /?/开始编辑w.StartEditOperation();for(int i=0;i 0) axMapControl2.Map = new MapClass();for (int i = 0; i 0) if (e.button = 1) IPoint pPoint = new PointClass();pPoint.PutCoords(e.mapX, e.mapY)

12、; axMapControl1.CenterAt(pPoint); axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); else if (e.button = 2) IEnvelope pEnv = axMapControl2.TrackRectangle(); axMapControl1.Extent = pEnv; axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography

13、, null, null); 二、 显示属性表的信息我们知道ArcMap中的Table of Contents有很多功能,如下图:而ArcGIS Engine提供的TOCControl控件几乎没有提供,那么这些都是需要自己开发的,在这里我做一个显示属性表的功能。分析:要显示某一个图层的属性表,首先要将这个图层选中,然后在另外一个Form中将选中的这个图层的属性信息进行显示。方法:添加一个上下文菜单,添加一个新的Form窗体,在这个新的窗体上添加GridView控件,并在TOCControl控件的OnMouseDown事件下添加如下代码(pGlobalFeatureLayer是我定义的一个全局变

14、量):private void axTOCControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent e) if (axMapControl1.LayerCount 0) esriTOCControlItem pItem = new esriTOCControlItem(); pGlobalFeatureLayer = new FeatureLayerClass(); IBasicMap pBasicMap = new MapClass(); object pOther

15、= new object();object pIndex = new object(); axTOCControl1.HitTest(e.x, e.y, ref pItem, ref pBasicMap, ref pGlobalFeatureLayer, ref pOther, ref pIndex); if (e.button = 2) context.Show(axTOCControl1, e.x, e.y); 在上下文菜单的打开属性表的Click事件中添加如下代码: private void 打开属性表ToolStripMenuItem_Click(object sender, Even

16、tArgs e) FormTable Ft = new FormTable(pGlobalFeatureLayer as IFeatureLayer); Ft.Show(); 在新的窗体中添加一个将属性表显示到GridView控件中的函数,如下: public void Itable2Dtable() IFields pFields; pFields = pFeatureLayer.FeatureClass.Fields; dtGridView.ColumnCount = pFields.FieldCount; for (int i = 0; i pFields.FieldCount;i+ )

17、 string fldName = pFields.get_Field(i).Name; dtGridView.Columnsi.Name = fldName; dtGridView.Columnsi.ValueType = System.Type.GetType(ParseFieldType(pFields.get_Field(i).Type); IFeatureCursor pFeatureCursor;pFeatureCursor = pFeatureLayer.FeatureClass.Search(null, false); IFeature pFeature; pFeature =

18、 pFeatureCursor.NextFeature(); while (pFeature != null) string fldValue = new stringpFields.FieldCount; for (int i = 0; i pFields.FieldCount; i+) string fldName; fldName = pFields.get_Field(i).Name; if (fldName=pFeatureLayer .FeatureClass .ShapeFieldName) fldValuei = Convert.ToString(pFeature.Shape.GeometryType); else fldValuei = Convert.ToString(pFeature.get_Value(i); dtGridView.Rows.Add(fldValue); pFeature = pFeatureCursor.NextFeat

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1