ArcGIS Engine 开发

上传人:熏** 文档编号:243094709 上传时间:2024-09-15 格式:PPT 页数:145 大小:2.28MB
返回 下载 相关 举报
ArcGIS Engine 开发_第1页
第1页 / 共145页
ArcGIS Engine 开发_第2页
第2页 / 共145页
ArcGIS Engine 开发_第3页
第3页 / 共145页
点击查看更多>>
资源描述
,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,ArcGIS,Engine,开发,城市与旅游学院,张会霞,组件化程序设计,组件:是指已经编译、链接好并可以使用的二进制代码模块,每一个模块可以运行在同一台机器上,也可以运行在局域网、广域网及,Internet,上的不同机器上。,组件技术中的关键技术之一是接口通信问题。在同一软件中的组件必须使用同样的接口标准才能保证组件之间可以进行通信。,COM,概述,COM,的特性,封装性,多态性,重用性,语言无关性,进程透明性,COM,的结构,COM,对象,COM,接口,类和接口,组件对象模型,COM,(,Component Object Model,) ,即组件对象模 型,是关于如何建立组件以及如何通过组件建立应用程序的一个规范,说明了如何可动态交替更新组件。,COM,是开发软件组件的一种方法。,对象拥有一个或多个接口,接口是定义了一组方法和属性的逻辑关系,与对象的通信是通过接口来进行的,.NET,平台概述,.NET,开发平台包括,.NET Framework,和,Visual,S,。,Visual,S,是一套完整的开发工具,用于生成,ASP Web,应用程序、,Web Services,、桌面应用程序和移动应用程序。,.NET Framework,是生成、部署和运行,Web,服务及应用程序的平台。其具有两个主要组件:通用语言运行时(,Common Language Runtime,)和,.NET Framework,类库。,ArcObjects,简介,ArcObjects,是,ArcGIS,Desktop,的开发平台。,ArcGIS,Desktop,是一系列,GIS,软件系统:,ArcInfo,,,ArcEditor,和,ArcView,。,这些系统服务于,GIS,。,ArcGIS,Desktop,系统包含一系列的应用,如,ArcCatalog,、,ArcMap,、,ArcToolBox,和,ArcScene,,并能够集成大量不同的扩展产品。如,,ArcGIS,Spatial Analyst,(空间分析模块),,ArcGIS,Geostatistical,Analyst,(地理统计分析模块),,ArcGIS,3D Analyst,(三维分析模块)等。,ArcObjects,是使用微软的组建对象模型书写,凡支持,COM,标准的开发语言都能使用,ArcObjects,。,ArcGIS,Engine,简介,ArcGIS,Engine,是开发者用来构建应用程序的一整套嵌,入式,GIS,组件。,使用,ArcGIS,Engine,,您可以将一些,GIS,功能嵌入到已有的应用程序中,这包括,Microsoft Office,产品,例如,Word,和,Excel,,建造有针对性的客户应用程序用来将高级,GIS,系统与他人分享。,ArcGIS,Engine,由一个软件开发包(,software development,kit,SDK,)和一个给所有,GIS,应用提供平台的运行许可(,runtime,)构成。,ArcGIS,Engine,简介,-,体系结构,Arc Engine,功能层次上由以下五个部分组成:,基本服务:由,GIS,核心,Arc Objects,构成,如要素几何体,( geometry ),和显示(,display,)。,数据存取:,Arc Engine,可以对许多栅格和矢量格式进行存取,包括强大而灵活的地理数据库,(,geodatabase,),。,地图表达:,ArcObjects,使用符号、注记和专题地图来生成和表达地图。,开发组件:用于快速定制应用开发程序的高度封装用户接口以及开发过程中全面的帮助系统。,运行时选项:,Arc Engine,运行时可以与标准功能或其他高级功能一起部署。,ArcGIS,控件介绍,ArcGIS,的控件是高度集成化的,首先能够让开发者构建和扩展,ArcGIS,的功能,其次能够提供图形用户界面(,GUI,)。,ArcGIS,的控件被称为,Active X,控件,,.NET,控件。,MapControl,类似于,“,数据,”,。,PageLayoutControl,ToolbarControl,TOCControl,(,Tablet of Contents Control,),SceneControl,GlobleControl,ReaderControl,使用,ArcGIS,控件,可以用两种方式来构建应用程序。,ArcGIS,控件可以被嵌入到应用程序中,将地图相关的功能作为辅助功能添加进去。,ArcGIS,控件可以用来创建一个独立的应用程序。,不管是那种方式,独立的,ArcGIS,控件能够被嵌入到已有程序中,或者,TOCControl,和,ToolbarControl,能够和其他,ArcGIS,控件联合使用,提供应用程序的部分框架。,ArcGIS,Engine,中的控件,制图控件,3D,控件介绍,框架控件介绍,控件使用实例,制图控件介绍,MapControl,控件,MapControl,对应于,ArcMap,Desktop,应用中的,“,数据,”,。,MapControl,控件中封装了,Map,对象,用于管理控件的外观、显示属性和地图属性、管理、添加数据图层,装载地图文档,显示、绘制跟踪图层。,它实现的主要接口有,IMapControlDefault,、,IMapControl2,、,IMapControl3,、,IMapControlEvents,。,PageLayoutControl,控件,PageLayoutControl,控件主要用于页面布局与制图。对应于,ArcMap,Desktop,应用中的,“,页面布局,”,视图,该控件封装了,PageLayout,类。,PageLayoutControl,控件不能添加地图图层或地理数据,必须通过,MXD,文件来加载需要处理的数据。,PageLayoutControl,控件主要实现,IPageLayoutControlDefault,、,IPageLayoutControl,、,IPageLayoutControl2,、,IPageLayoutControlevents,等接口。,3D,控件介绍,场景控件(,SceneControl,),SceneControl,是一个高性能的嵌入式的开发组件,提供给开发者建立和扩展,Scene,程序。控件,SceneControl,相当于,ArcScene,Desktop,应用程序中的,3D,视图,并提供了显示和增加空间数据到,3D,的方法等。,SceneControl,是通过对象接口,ISceneViewer,来表现。这个接口提供一个,Camera,对象,该对象由视角(,Observer,)和目标,(Target),构成。,Globe,控件,GlobeControl,是一个高性能的嵌入式的开发组件,提供给开发者建立和扩展,ArcGlobe,程序,以便进行绘图等操作。,GlobeControl,显示,3D,视图,并能提供全球表现的位置,而且是基于,3D,数据。,GlobleControl,控件对应于,ArcGlobe,桌面应用程序的三维视图。,GlobeControl,通过对象接口来操作,IGlobe,视图,用户可以通过,IGlobeViewer,对象来操作,ArcGlobe,应用程序。,框架控件介绍,图层树控件(,TOCControl,),TOCControl,用来管理图层的可见性和标签的编辑。,TOCControl,需要一个,“,伙伴控件,”,一起工作,,“,伙伴控件,”,可以是一个,MapControl,、,PageLayoutControl,、,ReaderControl,、,SceneControl,或者是,GlobeControl,。,“,伙伴控件,”,能够在设计的时候通过,ToolbarControl,的属性页设置。或者在程序运行中通过,SetBuddyControl,方法来设置。,“,伙伴控件,”,都实现了,ITOCBuddy,接口。,TOCControl,利用,“,伙伴控件,”,来显示交互性的树结构目录,包括,“,伙伴控件,”,的地图、图层、符号等内容。,工具栏控件(,ToolbarControl,),ToolbarControl,需要与一个,“,伙伴控件,”,一起工作。,“,伙伴控件,”,可以是一个,MapControl,PageLayoutControl,SceneControl,或者是,GlobeControl,。,“,伙伴控件,”,能够在设计的时候通过,ToolbarControl,的属性页设置。,ToolbarControl,实现了,ARCGIS,中的所有功能,如果想使这些功能进一步扩展,难度很大。,ToolbarControl,的使用,在,ToolbarControl,属性页中,有一个,Items,的选项卡,通过选项卡中的,Add,按钮可以添加相应的功能按钮。,基于,.NET,的,ArcGIS,Engine,的开发,一个简单的应用程序,(,1,)创建一个新的工程,(,2,)添加控件及引用,(,3,)窗体上添加控件,编写代码(地图),(,4,)设置,ToolbarControl,与,MapControl,控件关联,(,5,)运行程序,(,1,)创建一个新的工程,启动,Visual Studio.NET,,从,“,新建项目,”,对话框中创建一个新的,Visual,C#,“,Windows,应用程序,”,项目,并设置项目名称为,“,Sample,”,,选择位置保存该项目。,(,2,)添加控件及引用,在工具箱中添加选项卡,改为,ESRI,,在,ESRI,标签上单击鼠标右键,从弹出的快捷菜单中选择,“,选择项,”,,在弹出的,“,选择工具箱,”,对话框中选择,“,.NET Framework,组件,”,选项卡,选中,“,ArcMapControl,”,、,“,PageLayoutControl,”,、,“,ToolbarControl,”,、,“,TOCControl,”,在,“,项目,”,菜单中选择,“,添加引用,”,,在弹出的,“,添加引用,”,对话框中,双击,“,ESRI.,ArcGIS.Carto,”,、,“,ESRI.,ArcGIS,. Display,”,、,“,ESRI.,ArcGIS.Geometry,”,、,“,ESRI.,ArcGIS.System,”,、,“,ESRI.,ArcGIS.SystemUI,”,和,“,ESRI.,ArcGIS.Utility,”,等选项。单击确定按钮。,(,3,)窗体上添加控件,编写代码,打开,.NET,窗体,双击“工具箱”中“,ESRI”,标签栏中的,AxMapControl,控件,将,MapControl,加入到窗体上,再将,AxToolbarBox,也添加到窗体上。,在窗体上双击显示窗体代码窗口,加载图层到,MapControl,中,在,Form_Load,事件中添加地图文档加载代码:,private void Form1_Load(object sender, EventArgs e),string path = d:arcgis engine,开发,源程序,第三章,lesson1lesson1data;,string fiename = multipoint.shp;,axMapControl1.AddShapeFile(path, fiename);,axMapControl1.Extent = axMapControl1.FullExtent;,(,4,)设置,ToolbarControl,与,MapControl,控件关联,设置工具控件与地图控件关联,使用工具栏来操作地图,在,.NET,窗体上选中,ToolbarControl,控件,单击,Properties,,弹出“属性”对话框,在“,Buddy”,下拉列表中选择关联“,axMapControl,”,。,选择“,Items”,选项卡,单击“,Add”,按钮,在弹出的“,Controls Commands”,对话框中添加“,Pan”,、“,Zoom,In”,和“,Zoom Out”,。,桌面,GIS,应用程序框架的建立,本讲主要是使用,MapControl,、,PageLayoutControl,、,ToolbarControl,、,TOCControl,四个控件建立起基本的桌面,GIS,应用程序框架。最终成果预览如下:,1,、新建项目,启动,VS2005,,选择,“,文件,|,新建,|,项目,”,,在项目类型中选择,Visual C#,,再选择,Windows,应用程序模板,输入名称,“,3sdnMap,”,,点击确定。,在解决方案管理器中将,“,Form1.cs,”,重命名为,“,3sdnMap.cs,”,,在设计视图中,选中窗体,将其属性中的,“,Text,”,改为,“,3sdnMap,”,。,2,、添加控件,选择工具箱中的,“,菜单和工具栏,|,MenuStrip,”,,将其拖入窗体。,选择工具箱中的,“,ArcGIS,Windows Forms,”,节,将,“,ToolbarControl,”,控件拖入窗体,并将其属性中的,Dock,设置为,Top,。,选择工具箱中的,“,菜单和工具栏,|,StatusStrip,”,,将其拖入到窗体。,选择工具箱中的,“,容器,|,SplitContainer,”,容器拖入窗体,并将其属性中的,Dock,设置为,Fill,。,将,TabControl,控件拖入,Panel1,,将,Alignment,属性设置为,Bottom,,,Dock,属性设置为,Fill,。点击,TabPages,属性右边的按钮,弹出,TabPage,集合编辑器,将,tabPage1,的,Name,设置为,tabPageLayer,,,Text,设置为图层,将,tabPage2,的,Name,设置为,tabPageProperty,,,Text,设置为属性。如下所示。,选择,“,图层,”,选项卡,拖入,TOCControl,控件,设置,Dock,属性为,Fill,。,选择,“,属性,”,选项卡,拖入,DataGridView,控件,设置,Dock,属性为,Fill,。,拖入,TabControl,控件到,Panel2,,设置,Dock,属性为,Fill,。并上述类似的方法,将两个选项卡的,Name,和,Text,分别设置为:(,tabPageMap,、地图),(,tabPageLayout,,制版)。,选择,“,地图,”,选项卡,拖入,MapControl,控件,设置,Dock,属性为,Fill,。,选择,“,制版,”,选项卡,拖入,PageLayoutControl,控件,设置,Dock,属性为,Fill,。,最后将,LicenseControl,控件拖入到窗体的任意地方。,按,F5,编译运行,可以看到刚才布局好的程序界面了。,3,、控件绑定,通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要进行控件绑定。,分别右击,ToolbarControl,、,TOCControl,控件,将,Buddy,设置为,axMapControl1,,如下图所示。,4,、添加工具,此时,工具条中还没有任何工具,添加的方法也很简单。右击,ToolbarControl,,选择,“,属性,|Items,”,,点击,Add,,选择,Commands,选项卡中的,Generic,,双击,Open,、,SaveAs,、,Redo,、,Undo,即可将相应工具添加到工具条。,常见的工具有:,Map Navigation,中的导航工具,,Map Inquiry,中的查询工具,,Feature Selection,中的选择工具,你可以根据需要酌情添加工具。,5,、编译运行,按,F5,即可编译运行程序,至此桌面,GIS,应用程序框架基本框架已经搭建好了,你可以通过工具条的工具打开地图文档,浏览地图了,效果如开篇所示,.,ArcGIS,Engine,介绍,-,类库,1,、,SystemUI,类库,2,、,Geometry,类库,3,、,Display,类库,4,、,Server,类库,5,、。,地图文档加载、,shp,文件的加载,此示例用于加载地图文档,,Shp,文件以及删除图册。,操作步骤如下:,在,VC2005,中创建一个,Windows,应用程序项目,命名为,“,lesson1,”,,在左边的工具箱中选择,“,LicenseControl,”,控件,拖放到默认的,“,Form1,”,窗体上。用同样的方法在窗体上添加,“,MapControl,”,控件,在窗体上放置两个按钮控件,“,button1,”,、,“,button2,”,、,“,button3,”,。修改按钮控件文本如后图。,添加应用:,using ESRI.ArcGIS.Controls;,using ESRI.ArcGIS.Carto;,using ESRI.ArcGIS.esriSystem;,using ESRI.ArcGIS.SystemUI;,private void button1_Click(object sender, EventArgs e),loadMapDocument();,/,加载地图文档,private void loadMapDocument(),System.Windows.Forms.OpenFileDialog,OpenFileDialog;,OpenFileDialog = new OpenFileDialog();,OpenFileDialog.Title = ,打开地图文档,;,OpenFileDialog.Filter = map,documents(*.mxd)|*.mxd;,OpenFileDialog.ShowDialog();,string filepath = OpenFileDialog.FileName;,if (axMapControl1.CheckMxFile(filepath),axMapControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass;,axMapControl1.LoadMxFile(filepath, 0, Type.Missing);,axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault;,else,MessageBox.Show(filepath + ,不是有效的地图文档,);,private void button2_Click(object sender, EventArgs e),addShapeFile();,/,加载,SHP,文件,private void addShapeFile(),System.Windows.Forms.OpenFileDialog openFileDialog;,openFileDialog = new OpenFileDialog();,openFileDialog.Title = ,打开图层文件,;,openFileDialog.Filter = map documents(*.shp)|*.shp;,openFileDialog.ShowDialog();,FileInfo fileInfo = new FileInfo(openFileDialog.FileName);,string path = openFileDialog.FileName.Substring(0, openFileDialog.FileName.Length - fileInfo.Name.Length);,try,axMapControl1.AddShapeFile(path, fileInfo.Name);,catch (Exception e),MessageBox.Show(,添加图层失败!, + e.ToString();,private void button3_Click(object sender, EventArgs e),deleteLayer();,private void deleteLayer(),try,/,删除地图中的所有图层,for (int i = axMapControl1.LayerCount - 1; i = 0; i-),axMapControl1.DeleteLayer(i);,catch (Exception e),MessageBox.Show(,删除图层失败!, + e.ToString();,地图组成及图层控制,地图(,Map,)是,ArcEngine,的主要组成部分。,Map,对象既是数据的管理容器,也是数据显示的主要载体。,Map,的主要接口有:,IMap,、,IGraphicsContainer,、,IActiveView,、,IActiveViewEvents,、,IMapBookmark,和,ITableCollection,等,,35,个接口。,IMap,接口,IMap,接口主要用于管理,Map,对象中的,layer,对象、要素选择集、,MapSourround,对象和标注等。,IMap,接口的方法:,AddLayer,、,AddLayers,方法,将一个、多个图层加载进,Map,对象。,ClearLayers,方法是清除地图中的所有图层。,LayerCount,是,Map,中的图层计数器,计算,Map,中有多少个图层。,SelectFeature,是在地图中选择实体。,SelectByShape,是通过指定的实体在,Map,中选择实体。,SelectionCount,是获取选择实体的个数。,IActiveView,接口,IActiveView,接口定义了,Map,对象的数据显示功能。通过该接口,可以在,Map,上绘制图形、改变视图范围、获取,ScreenDisplay,对象的指针。显示或隐藏标尺和滚动条,也可以刷新视图。,IActiveView,接口提供的方法和属性:,Extent,属性,该属性用于返回,Map,对象当前视图的范围。,FullExtent,属性,用于返回视图的全图范围。,ScreenDisplay,属性,用于控制视图的图形绘制工作。,PartialRefresh,方法,常用的一种刷新方法,该方法通过指定,esriViewDrawPhase,参数,可以实现不同方式的局部刷新。,图层对象,Map,对象用来装载地理数据,这些数据是以图层的形式放入地图对象中的。,Layer,作为装载的单位,当第一图层装载进,Map,对象时,,Map,对象会自动设置空间坐标系为当前图层的空间坐标系。,Layer,本身没有装载数据,只是获得数据的引用,用于管路数据源的连接,数据始终在,GeoDatabase,或地图文档中。,ILayer,接口,ILayer,接口是所有图层类都实现的接口。该接口定义了所有图层的公共方法和属性。,Name,属性,用于返回图层名称。,MaximumScale,和,MinimumScale,属性用于显示或设置图层可以出现的最大和最小比例尺。,SpatialReference,属性用于设置图层的空间参考。,要素图层,要素图层用于表示离散的矢量对象的信息。,IFeatureLayer,接口,IFeatureLayer,接口用于管理要素图层的数据源,即要素类(,FeatureClass,)。,DataSourceType,属性用于返回图层的数据源类型。,Search,方法,通过两个参数,一个是过滤器,一个是,IQueryFilter,类型的对象;一个是布尔值,用于说明返回的要素游标是否循环,返回一个,ICursor,类型的对象。,IGeoDataset,接口,该接口仅有两个属性,用于管理地理要素集。,Extent,属性用于返回当前数据集的范围。,SpatialReference,属性用于获取这个数据集的空间参考。,数据查询与选择,创建一个新,Windows,应用程序项目,命名为,“,lessons7,”,在左边工具箱中拖放,“,MapControl,”,控件到窗体上,在窗体上放置,5,个按钮,“,button1,”,、,“,button2,”,、,“,button3,”,、,“,button4,”,、,“,button5,”,,一个文本框、一个标签控件,修改控件的文本如后面窗体。,添加名字空间,using ESRI.ArcGIS.esriSystem;,using ESRI.ArcGIS.Carto;,using ESRI.ArcGIS.Controls;,using ESRI.ArcGIS.SystemUI;,using ESRI.ArcGIS.Geometry;,using ESRI.ArcGIS.Display;,using ESRI.ArcGIS.Geodatabase;,public partial class Form1 : Form,public Form1(),InitializeComponent();,int flag = 0;,private void Form1_Load(object sender, EventArgs e),loadMapDocument();,/,加载地图文档,private void loadMapDocument(),System.Windows.Forms.OpenFileDialog openFileDialog;,openFileDialog = new OpenFileDialog();,openFileDialog.Title = ,打开地图文档,;,openFileDialog.Filter = map documents(*.mxd)|*.mxd;,openFileDialog.ShowDialog();,string filePath = openFileDialog.FileName;,if (axMapControl1.CheckMxFile(filePath),axMapControl1.,MousePointer = esriControlsMousePointer.esriPointerHourglass;,axMapControl1.LoadMxFile(filePath, 0, Type.Missing);,axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault;,else,MessageBox.Show(filePath + ,不是有效的地图文档,);,private void button1_Click(object sender, EventArgs e),/,点选,flag = 1;,private void button2_Click(object sender, EventArgs e),/,圆选,flag = 2;,private void button3_Click(object sender, EventArgs e),/,矩形框选,flag = 3;,private void button4_Click(object sender, EventArgs e),/,多边形选择,flag = 4;,private void button5_Click(object sender, EventArgs e),/,清除选择,IActiveView pActiveView = (IActiveView)( axMapControl1.Map );,pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, axMapControl1.get_Layer(0), null);,axMapControl1.Map.ClearSelection();,pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, axMapControl1.get_Layer(0), null);,/,名称查询,private void button6_Click(object sender, EventArgs e),string searchName = this.textBox1.Text.Trim();,ILayer layer = axMapControl1.Map.get_Layer(0);,IFeatureLayer featureLayer = layer as IFeatureLayer;,IFeatureClass featureClass = featureLayer.FeatureClass;,IQueryFilter queryFilter =new QueryFilterClass ();,IFeatureCursor featureCursor;,IFeature feature = null;,queryFilter.WhereClause =continent = +searchName +;,featureCursor = featureClass.Search(queryFilter, true);,feature = featureCursor.NextFeature();,if (feature !=null),axMapControl1.Map.SelectFeature(axMapControl1.get_Layer(0), feature);,axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);,private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e),axMapControl1.MousePointer =esriControlsMousePointer.esriPointerCrosshair;,IGeometry geometry = null;,switch (flag),case 1:,ESRI.ArcGIS.Geometry.Point point = new ESRI.ArcGIS.Geometry.PointClass();,point.X = e.mapX;,point.Y = e.mapY;,geometry = point as IGeometry;,break;,case 2:,geometry = axMapControl1.TrackCircle();,break;,case 3:,geometry = axMapControl1.TrackRectangle();,break;,case 4:,geometry = axMapControl1.TrackPolygon();,break;,axMapControl1.Map.SelectByShape(geometry, null, false);,axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);,小结,1,、添加引用,选择,“,项目,”,菜单下的,“,添加引用,”,,在,“,.NET,”,中双击要添加的库文件。,2,、添加控件,在工具箱中点击右键,在弹出的菜单中选择,“,选择项,”,, 在,“,COM,组件,”,中选择需要的组件。,3,、如何在一个窗体中单击显示另一个窗体,private void button1_Click(object sender,EventArgs,e),Form2 f = new Form2();,f.Show,();,4,、,地图文档的加载,方法,1,System.Windows.Forms.OpenFileDialog openFileDialog;,openFileDialog = new OpenFileDialog();,openFileDialog.Title = ,打开地图文档,;,openFileDialog.Filter = map documents(*.mxd)|*.mxd;,方法,2,在窗体上方式,openFileDialog1,对话框,程序代码改为,openFileDialog1.Title = ,打开地图文档,;,openFileDialog1.Filter = map documents(*.mxd)|*.mxd;,空间查询,空间查询主要分两类,基于属性查询,基于空间位置查询,也称为空间关系查询。,游标(,Cursor,):是一个指向数据的指针,其本身不包含数据内容,只提供了一个连接,ROW,对象或要素对象的桥梁。,游标分类:查询游标、插入游标、更新游标。分别对应相应的获取方法,Search,、,Insert,、,Update,。更新和查询游标需要使用一个过滤器对象,筛选出需要进行操作的要素。,基于属性查询,基于属性查询是通过对要素的属性信息设定要求来查询定位空间位置。,根据属性字段的不同类型分为,字符型字段查询:使用“,LIKE”,进行模糊查询,数值型字段查询:使用比较运算符,“,、,、,=,等完成,”,多条件查询:使用“,AND”,、“,OR”,等。,鹰眼图功能实现,使用鹰眼图,用户可以很直观地看到主视图中的地图范围在整个地图范围内的位置,犹如鸟瞰一样。,本例需要使用两个,AxMapControl,控件,即主控件,AxMapControl1,和鹰眼控件,AxMapControl2,。要实现这一功能,主要是保持两个控件显示的数据一致,以及在鹰眼控件的显示框中让两个控件的数据共享。,创建一个新,Windows,应用程序项目,命名为,“,lesson6,”,,在左边工具箱中拖放两个,“,MapControl,”,控件到窗体上,同时拖放,ToolbarControl,和,TOCControl,控件到窗体上。,添加引用,using ESRI.ArcGIS.esriSystem;,using ESRI.ArcGIS.Carto;,using ESRI.ArcGIS.Controls;,using ESRI.ArcGIS.SystemUI;,using ESRI.ArcGIS.Geometry;,using ESRI.ArcGIS.Display;,private void Form1_Load(object sender, EventArgs e),loadMapDocument();,/,加载地图文档,private void loadMapDocument(),System.Windows.Forms.OpenFileDialog openFileDialog;,openFileDialog = new OpenFileDialog();,openFileDialog.Title = ,打开地图文档,;,openFileDialog.Filter = map documents(*.mxd)|*.mxd;,openFileDialog.ShowDialog();,string filePath = openFileDialog.FileName;,if (axMapControl1.CheckMxFile(filePath),axMapControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass;,axMapControl1.LoadMxFile(filePath, 0, Type.Missing);,axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault;,else,MessageBox.Show(filePath + ,不是有效的地图文档,);,private void loadEagleEyeDocument(),System.Windows.Forms.OpenFileDialog openFileDialog;,openFileDialog = new OpenFileDialog();,openFileDialog.Title = ,打开鹰眼地图文档,;,openFileDialog.Filter = map documents(*.mxd)|*.mxd;,openFileDialog.ShowDialog();,string filePath = openFileDialog.FileName;,if (axMapControl2.CheckMxFile(filePath),axMapControl2.MousePointer = esriControlsMousePointer.esriPointerHourglass;,axMapControl2.LoadMxFile(filePath, 0, Type.Missing);,axMapControl2.MousePointer = esriControlsMousePointer.esriPointerDefault;,else,MessageBox.Show(filePath + ,不是有效的地图文档,);,private void axMapControl1_OnMapReplaced(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e),loadEagleEyeDocument();,private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e),if (e.button = 1),axMapControl1.Extent = axMapControl1.TrackRectangle();,axMapControl1.Refresh(esriViewDrawPhase.esriViewBackground, null,null);,else if (e.button = 2),axMapControl1.Pan();,axMapControl1.Refresh(esriViewDrawPhase.esriViewBackground, null, null);,private void axMapControl1_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e),IEnvelope envelope = (IEnvelope)e.newEnvelope;,IGraphicsContainer graphicsContainer = axMapControl2.Map as IGraphicsContainer;,IActiveView activeView = graphicsContainer as IActiveView;,/,在绘制前,清除,axMapControl2,中的任何图形元素,graphicsContainer.DeleteAllElements ();,IElement element = new RectangleElementClass();,element.Geometry = envelope ;,/,设置鹰眼图中的红线,/,产生一个线符号对象,ILineSymbol outLineSymbol = new,SimpleLineSymbolClass();,outLineSymbol.Width = 2;,outLineSymbol.Color = GetColor(255, 0, 0, 255);,/,设置颜色属性,/,设置填充符号的属性,IFillSymbol fillSymbol = new SimpleFillSymbolClass();,fillSymbol.Color = GetColor(9, 0, 0, 0);,fillSymbol.Outline = outLineSymbol ;,IFillShapeElement fillShapeElement = element as,IFillShapeElement;,fillShapeElement.Symbol = fillSymbol;,graphicsContainer.AddElement(IElement)fillShapeElement , 0);,activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);,private IRgbColor GetColor(int r, int g, int b, int t),IRgbColor rgbColor = new RgbColorClass();,rgbColor.Red = r;,rgbColor.Green = g;,rgbColor.Blue = b;,rgbColor.Transparency = (byte)t;,return rgbColor;,private void axMapControl2_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e),IPoint point = new PointClass();,point.PutCoords(e.mapX , e.mapY);,axMapControl1.CenterAt(point);,抽象类,ArcObjects,中开发者必须理解的类有三种类型:抽象类(,abstract Classes,)、组件对象类(,coclasses,)和类(,classes,)。抽象类不能创建对象,只是对其子类的实例化进行了规定(通过类型继承)。,ArcObjects,的,Dataset,或,Geometry,类就是抽象类的例子。不能创建,Geometry,类型的对象,但可以创建,Polyline,类型的对象。,Polyline,对象实现了在,Geometry,基类中定义的接口,因此在基于对象类中定义的任何接口都可以从组件对象类访问。,类,UML,模型图中的类有三种类型:抽象类、组件对象类和类,关系,抽象类、组件对象类和类之间存在多种可能的关系,类型继承,类型继承用来定义共享父类的属性和方法,但同时又有自己的属性和方法的特定类。,实例化,实例化:表示某个类的对象具有创建另一个类的对象的方法。,一个,Pole,对象可能具有创建,transform,的方法。,组成,组成是一种更强的关联,在这种关联中,,“,whole,”,类控制着,“,part,”,类对象的生命周期。,一个,Pole,对象包含一个或多个,Crossarm,,在这个设计当中,,Pole,被删除时,,Crossarm,也就不存在了。,接口,接口概念是,COM,的基本概念。在讨论,COM,接口时,,COM,规范(微软,,1995,)着重强调以下四点:,接口不是类。接口不能实例化自身,因为其上没有实现。,接口不是对象。接口是一个相关功能组,是客户和对象之间通信的二进制标准。,接口具有很强的类型性。每个接口都有自己的接口标识符,因此消除了具有人们易读相同名字接口间可能的冲突。,接口是不变的。接口从来没有版本。一旦接口被定义和公布就不能改变。,这个模型图展示了表达为接口的公共行为如何在多个对象(本例中是动物)间共享,以支持多态。,COM,类和接口,使用,COM,开发就意味着用接口开发,即所谓的基于接口的编程模式。,对象间的所有通信都是通过其接口实现的。,接口的实现方法随对象不同而不同。,类和接口通常被称为,COM,的,“,什么,”,和,“,怎么,”,。接口定义对象能做什么,而类定义怎么做。,两个类可以具有相同的接口,但它们实现这些接口的方法可能完全不同。,下面以识别一个简单的对象及其支持的接口作为开始。在这个例子中,会使用一个,Point,对象和,IPoint,接口。为这个点设置坐标的一种方法就是在,IPoint,接口上调用,PutCoords,方法并传入坐标值。,Dim,pPt,As,IPoint,Set,pPt,= New Point,pPt
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!