《ArcGISEngine开发.ppt》由会员分享,可在线阅读,更多相关《ArcGISEngine开发.ppt(145页珍藏版)》请在三一办公上搜索。
1、,ArcGIS Engine 开发,城市与旅游学院张会霞,组件化程序设计,组件:是指已经编译、链接好并可以使用的二进制代码模块,每一个模块可以运行在同一台机器上,也可以运行在局域网、广域网及Internet上的不同机器上。组件技术中的关键技术之一是接口通信问题。在同一软件中的组件必须使用同样的接口标准才能保证组件之间可以进行通信。,COM概述,COM 的特性封装性多态性重用性语言无关性进程透明性,COM 的结构COM 对象COM 接口类和接口,组件对象模型,COM(Component Object Model),即组件对象模 型,是关于如何建立组件以及如何通过组件建立应用程序的一个规范,说明了
2、如何可动态交替更新组件。COM是开发软件组件的一种方法。对象拥有一个或多个接口 接口是定义了一组方法和属性的逻辑关系与对象的通信是通过接口来进行的,.NET平台概述,.NET开发平台包括.NET Framework 和Visual S。Visual S是一套完整的开发工具,用于生成ASP Web应用程序、Web Services、桌面应用程序和移动应用程序。.NET Framework是生成、部署和运行Web服务及应用程序的平台。其具有两个主要组件:通用语言运行时(Common Language Runtime)和.NET Framework类库。,ArcObjects简介,ArcObject
3、s是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标准的开发
4、语言都能使用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功能层
5、次上由以下五个部分组成:基本服务:由GIS核心Arc Objects构成,如要素几何体(geometry)和显示(display)。数据存取:Arc Engine可以对许多栅格和矢量格式进行存取,包括强大而灵活的地理数据库(geodatabase)。地图表达:ArcObjects使用符号、注记和专题地图来生成和表达地图。开发组件:用于快速定制应用开发程序的高度封装用户接口以及开发过程中全面的帮助系统。运行时选项:Arc Engine运行时可以与标准功能或其他高级功能一起部署。,ArcGIS 控件介绍,ArcGIS的控件是高度集成化的,首先能够让开发者构建和扩展ArcGIS的功能,其次能够提供图
6、形用户界面(GUI)。ArcGIS的控件被称为Active X控件,.NET控件。MapControl 类似于“数据”。PageLayoutControlToolbarControlTOCControl(Tablet of Contents Control)SceneControlGlobleControlReaderControl,使用ArcGIS控件,可以用两种方式来构建应用程序。ArcGIS 控件可以被嵌入到应用程序中,将地图相关的功能作为辅助功能添加进去。ArcGIS 控件可以用来创建一个独立的应用程序。不管是那种方式,独立的ArcGIS 控件能够被嵌入到已有程序中,或者TOCCont
7、rol和ToolbarControl能够和其他ArcGIS控件联合使用,提供应用程序的部分框架。,ArcGIS Engine 中的控件,制图控件3D控件介绍框架控件介绍控件使用实例,制图控件介绍,MapControl控件MapControl对应于ArcMap Desktop 应用中的“数据”。MapControl控件中封装了Map对象,用于管理控件的外观、显示属性和地图属性、管理、添加数据图层,装载地图文档,显示、绘制跟踪图层。它实现的主要接口有IMapControlDefault、IMapControl2、IMapControl3、IMapControlEvents。,PageLayoutC
8、ontrol控件PageLayoutControl控件主要用于页面布局与制图。对应于ArcMap Desktop 应用中的“页面布局”视图,该控件封装了PageLayout类。PageLayoutControl控件不能添加地图图层或地理数据,必须通过MXD文件来加载需要处理的数据。PageLayoutControl控件主要实现 IPageLayoutControlDefault、IPageLayoutControl、IPageLayoutControl2、IPageLayoutControlevents等接口。,3D控件介绍,场景控件(SceneControl)SceneControl是一个高
9、性能的嵌入式的开发组件,提供给开发者建立和扩展Scene程序。控件SceneControl相当于ArcScene Desktop 应用程序中的3D视图,并提供了显示和增加空间数据到3D的方法等。SceneControl是通过对象接口ISceneViewer来表现。这个接口提供一个Camera对象,该对象由视角(Observer)和目标(Target)构成。,Globe控件GlobeControl是一个高性能的嵌入式的开发组件,提供给开发者建立和扩展ArcGlobe程序,以便进行绘图等操作。GlobeControl显示3D视图,并能提供全球表现的位置,而且是基于3D数据。GlobleContro
10、l控件对应于ArcGlobe桌面应用程序的三维视图。GlobeControl通过对象接口来操作IGlobe视图,用户可以通过IGlobeViewer对象来操作ArcGlobe应用程序。,框架控件介绍,图层树控件(TOCControl)TOCControl用来管理图层的可见性和标签的编辑。TOCControl需要一个“伙伴控件”一起工作,“伙伴控件”可以是一个MapControl、PageLayoutControl、ReaderControl、SceneControl或者是GlobeControl。“伙伴控件”能够在设计的时候通过ToolbarControl的属性页设置。或者在程序运行中通过Se
11、tBuddyControl方法来设置。“伙伴控件”都实现了ITOCBuddy接口。TOCControl利用“伙伴控件”来显示交互性的树结构目录,包括“伙伴控件”的地图、图层、符号等内容。,工具栏控件(ToolbarControl)ToolbarControl需要与一个“伙伴控件”一起工作。“伙伴控件”可以是一个MapControl,PageLayoutControl,SceneControl或者是GlobeControl。“伙伴控件”能够在设计的时候通过ToolbarControl的属性页设置。ToolbarControl实现了ARCGIS中的所有功能,如果想使这些功能进一步扩展,难度很大。,
12、ToolbarControl的使用在ToolbarControl属性页中,有一个Items的选项卡,通过选项卡中的Add 按钮可以添加相应的功能按钮。,基于.NET的ArcGIS Engine的开发,一个简单的应用程序(1)创建一个新的工程(2)添加控件及引用(3)窗体上添加控件,编写代码(地图)(4)设置ToolbarControl 与MapControl控件关联(5)运行程序,(1)创建一个新的工程启动Visual Studio.NET,从“新建项目”对话框中创建一个新的Visual C#“Windows应用程序”项目,并设置项目名称为“Sample”,选择位置保存该项目。,(2)添加控件
13、及引用在工具箱中添加选项卡,改为ESRI,在ESRI标签上单击鼠标右键,从弹出的快捷菜单中选择“选择项”,在弹出的“选择工具箱”对话框中选择“.NET Framework组件”选项卡,选中“ArcMapControl”、“PageLayoutControl”、“ToolbarControl”、“TOCControl”,在“项目”菜单中选择“添加引用”,在弹出的“添加引用”对话框中,双击“ESRI.ArcGIS.Carto”、“ESRI.ArcGIS.Display”、“ESRI.ArcGIS.Geometry”、“ESRI.ArcGIS.System”、“ESRI.ArcGIS.SystemU
14、I”和“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;stri
15、ng fiename=multipoint.shp;axMapControl1.AddShapeFile(path,fiename);axMapControl1.Extent=axMapControl1.FullExtent;,(4)设置ToolbarControl 与MapControl控件关联 设置工具控件与地图控件关联,使用工具栏来操作地图,在.NET 窗体上选中ToolbarControl 控件,单击Properties,弹出“属性”对话框,在“Buddy”下拉列表中选择关联“axMapControl”。选择“Items”选项卡,单击“Add”按钮,在弹出的“Controls Comm
16、ands”对话框中添加“Pan”、“Zoom In”和“Zoom Out”。,桌面GIS 应用程序框架的建立,本讲主要是使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本的桌面GIS应用程序框架。最终成果预览如下:,1、新建项目启动VS2005,选择“文件|新建|项目”,在项目类型中选择Visual C#,再选择Windows应用程序模板,输入名称“3sdnMap”,点击确定。在解决方案管理器中将“Form1.cs”重命名为“3sdnMap.cs”,在设计视图中,选中窗体,将其属性中的“Text”改为“3sdnMa
17、p”。,2、添加控件选择工具箱中的“菜单和工具栏|MenuStrip”,将其拖入窗体。选择工具箱中的“ArcGIS Windows Forms”节,将“ToolbarControl”控件拖入窗体,并将其属性中的Dock设置为Top。选择工具箱中的“菜单和工具栏|StatusStrip”,将其拖入到窗体。选择工具箱中的“容器|SplitContainer”容器拖入窗体,并将其属性中的Dock设置为Fill。,将TabControl控件拖入Panel1,将Alignment属性设置为Bottom,Dock属性设置为Fill。点击TabPages属性右边的按钮,弹出TabPage集合编辑器,将tab
18、Page1的Name设置为tabPageLayer,Text设置为图层,将tabPage2的Name设置为tabPageProperty,Text设置为属性。如下所示。选择“图层”选项卡,拖入TOCControl控件,设置Dock属性为Fill。选择“属性”选项卡,拖入DataGridView控件,设置Dock属性为Fill。,拖入TabControl控件到Panel2,设置Dock属性为Fill。并上述类似的方法,将两个选项卡的Name和Text分别设置为:(tabPageMap、地图),(tabPageLayout,制版)。选择“地图”选项卡,拖入MapControl控件,设置Dock属性
19、为Fill。选择“制版”选项卡,拖入PageLayoutControl控件,设置Dock属性为Fill。最后将LicenseControl控件拖入到窗体的任意地方。按F5编译运行,可以看到刚才布局好的程序界面了。,3、控件绑定通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要进行控件绑定。分别右击ToolbarControl、TOCControl控件,将Buddy设置为axMapControl1,如下图所示。,4、添加工具此时,工具条中还没有任何工具,添加的方法也很简单。右击ToolbarControl,选择“属性|Items”,点击Add,选择Commands选项
20、卡中的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文件的加载,此示例用
21、于加载地图文档,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.Sy
22、stemUI;,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.Show
23、Dialog();string filepath=OpenFileDialog.FileName;,if(axMapControl1.CheckMxFile(filepath)axMapControl1.MousePointer=esriControlsMousePointer.esriPointerHourglass;axMapControl1.LoadMxFile(filepath,0,Type.Missing);axMapControl1.MousePointer=esriControlsMousePointer.esriPointerDefault;else MessageBox.Sh
24、ow(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;openFile
25、Dialog.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 bu
26、tton3_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
27、、IGraphicsContainer、IActiveView、IActiveViewEvents、IMapBookmark和ITableCollection等,35个接口。,IMap接口,IMap 接口主要用于管理Map对象中的layer对象、要素选择集、MapSourround 对象和标注等。IMap 接口的方法:AddLayer、AddLayers方法,将一个、多个图层加载进Map对象。ClearLayers方法是清除地图中的所有图层。LayerCount是Map中的图层计数器,计算Map中有多少个图层。SelectFeature 是在地图中选择实体。SelectByShape 是通过指
28、定的实体在Map中选择实体。SelectionCount 是获取选择实体的个数。,IActiveView接口,IActiveView接口定义了Map对象的数据显示功能。通过该接口,可以在Map上绘制图形、改变视图范围、获取ScreenDisplay对象的指针。显示或隐藏标尺和滚动条,也可以刷新视图。IActiveView接口提供的方法和属性:Extent 属性,该属性用于返回Map对象当前视图的范围。FullExtent 属性,用于返回视图的全图范围。ScreenDisplay属性,用于控制视图的图形绘制工作。PartialRefresh方法,常用的一种刷新方法,该方法通过指定esriView
29、DrawPhase参数,可以实现不同方式的局部刷新。,图层对象,Map对象用来装载地理数据,这些数据是以图层的形式放入地图对象中的。Layer作为装载的单位,当第一图层装载进Map对象时,Map对象会自动设置空间坐标系为当前图层的空间坐标系。Layer本身没有装载数据,只是获得数据的引用,用于管路数据源的连接,数据始终在GeoDatabase或地图文档中。,ILayer接口,ILayer接口是所有图层类都实现的接口。该接口定义了所有图层的公共方法和属性。Name属性,用于返回图层名称。MaximumScale和MinimumScale属性用于显示或设置图层可以出现的最大和最小比例尺。Spati
30、alReference 属性用于设置图层的空间参考。,要素图层,要素图层用于表示离散的矢量对象的信息。IFeatureLayer 接口IFeatureLayer 接口用于管理要素图层的数据源,即要素类(FeatureClass)。DataSourceType 属性用于返回图层的数据源类型。Search方法,通过两个参数,一个是过滤器,一个是IQueryFilter类型的对象;一个是布尔值,用于说明返回的要素游标是否循环,返回一个ICursor类型的对象。,IGeoDataset接口该接口仅有两个属性,用于管理地理要素集。Extent属性用于返回当前数据集的范围。SpatialReference
31、 属性用于获取这个数据集的空间参考。,数据查询与选择,创建一个新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.
32、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 openFi
33、leDialog;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
34、;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
35、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.esriViewGeoSe
36、lection,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=axMapCon
37、trol1.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.
38、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.IMapCon
39、trolEvents2_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=a
40、xMapControl1.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”中双击
41、要添加的库文件。2、添加控件 在工具箱中点击右键,在弹出的菜单中选择“选择项”,在“COM组件”中选择需要的组件。3、如何在一个窗体中单击显示另一个窗体private void button1_Click(object sender,EventArgs e)Form2 f=new Form2();f.Show();,4、地图文档的加载方法1System.Windows.Forms.OpenFileDialog openFileDialog;openFileDialog=new OpenFileDialog();openFileDialog.Title=打开地图文档;openFileDialog
42、.Filter=map documents(*.mxd)|*.mxd;方法2在窗体上方式openFileDialog1对话框,程序代码改为openFileDialog1.Title=打开地图文档;openFileDialog1.Filter=map documents(*.mxd)|*.mxd;,空间查询,空间查询主要分两类基于属性查询基于空间位置查询,也称为空间关系查询。游标(Cursor):是一个指向数据的指针,其本身不包含数据内容,只提供了一个连接ROW对象或要素对象的桥梁。游标分类:查询游标、插入游标、更新游标。分别对应相应的获取方法Search、Insert、Update。更新和查询
43、游标需要使用一个过滤器对象,筛选出需要进行操作的要素。,基于属性查询,基于属性查询是通过对要素的属性信息设定要求来查询定位空间位置。根据属性字段的不同类型分为字符型字段查询:使用“LIKE”进行模糊查询数值型字段查询:使用比较运算符“、=等完成”多条件查询:使用“AND”、“OR”等。,鹰眼图功能实现,使用鹰眼图,用户可以很直观地看到主视图中的地图范围在整个地图范围内的位置,犹如鸟瞰一样。本例需要使用两个AxMapControl控件,即主控件AxMapControl1和鹰眼控件AxMapControl2。要实现这一功能,主要是保持两个控件显示的数据一致,以及在鹰眼控件的显示框中让两个控件的数据
44、共享。,创建一个新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
45、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.Fi
46、leName;if(axMapControl1.CheckMxFile(filePath)axMapControl1.MousePointer=esriControlsMousePointer.esriPointerHourglass;axMapControl1.LoadMxFile(filePath,0,Type.Missing);axMapControl1.MousePointer=esriControlsMousePointer.esriPointerDefault;else MessageBox.Show(filePath+不是有效的地图文档);,private void loadEa
47、gleEyeDocument()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)axMapControl
48、2.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.
49、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.
50、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