1、本次实验主要为了认识ArcGIS Engine开发环境,并学习简单的窗口搭建、控件绑定以及添加引用。实验二:建立 ArcGIS Engine应用程序框架搭建Windows应用程序窗口,实现打开shapefile文件功能。1.1、新建项目启动VS2010,选择“文件|新建|项目”,在项目类型中选择VisualC#,再选择Windows应用程序模板,输入名称“mymap2”,点击确定。1.2、添加控件选择工具箱中的“菜单和工具栏|StatusStrip(状态栏)”,将其拖入到窗体。选择工具箱中的“ArcGIS Windows Forms”节,将“AxToolbarControl”控件拖入窗体,并将
2、其属性中的Dock设置为Top。选择工具箱中的“容器|SplitContainer(容器)”拖入窗体,并将其属性中的Dock设置为fill。将TabControl 控件拖入Panel1, 将Alignment属性设置为Bottom, Dock 属性设置为Fill。点击 TabPages 属性右边的按钮,弹出 TabPage 集合编辑器,将 tabPage1 的 Name 设置为 “Layer”,Text 设置为“图层”;将tabPage2 的Name设置为“Property”,Text设置为“属性”。如下所示:1.3、控件绑定通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工
3、作,因此要进行控件绑定。分别右击ToolbarControl、TOCControl 控件,将Buddy设置为axMapControl1,如下图所示:1.4、添加工具右击ToolbarControl,选择“属性|Items”,点击Add,选择Commands选项卡中的Generic,双击Open、SaveAs、Redo、Undo将相应工具添加到工具条。1.5、编译运行按F5即可编译运行程序。2.1、添加shp数据在VS2010的工具箱中,展开菜单和工具栏,双击MenuStrip控件,这样就在窗体上添加了一个菜单控件;同样双击添openFileDialog控件,置于窗体任何位置。在菜单上点击,输入
4、“添加SHP数据”作为菜单的标题,输入“AddShpData”作为菜单的名称。2.2、代码处理选中“添加SHP数据”菜单,在属性框中点击事件按钮,在事件列表中双击Click事件;或者双击“添加SHP数据”菜单自动生成的事件处理方法如下图所示,我们将在方法内输入处理代码。private void 添加SHP数据ToolStripMenuItem_Click(object sender, EventArgs e) /使用openFileDialog获取shapefile文件 openFileDialog1.Filter = shapefile 文件(*.shp)|*.shp; /不允许openFi
5、leDialog同时选择多个文件 openFileDialog1.Multiselect = false; /返回值为openFileDialog所打开文件的窗体 DialogResult pDialogResult = openFileDialog1.ShowDialog(); /如果弹出窗口点击的不是确定的话就return if (pDialogResult != DialogResult.OK) return; string pPath = openFileDialog1.FileName; string pFolder = System.IO.Path.GetDirectoryName
6、(pPath); string pFileName = System.IO.Path.GetFileName(pPath); /新建一个Shapefile的工作空间工厂 IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory(); /打开Shapefile的工作空间 IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pFolder, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatu
7、reWorkspace;/QI 跳转 /打开要素类 IFeatureClass pFC = pFeatureWorkspace.OpenFeatureClass(pFileName);/可实例化类 /创建要素图层 IFeatureLayer pFLayer = new FeatureLayerClass(); /关联图层和要素类 pFLayer.FeatureClass = pFC; pFLayer.Name = pFC.AliasName; ILayer pLayer = pFLayer as ILayer; /将图层和要素类添加到地图控件中 IMap pMap = axMapControl
8、1.Map; pMap.AddLayer(pLayer); /刷新axMapControl1的视图 axMapControl1.ActiveView.Refresh(); 2.3、编译运行在键盘上按 F5 键,运行调试,点击“添加SHP数据”菜单,在弹出的对话框中,选中任意一个shp文件,点击确定,即可把shp文件加载到地图控件中。本次实验目的主要在于使用工作空间打开shapefile文件,之后也可以将其引申到打开栅格数据等功能!实验三:代码加载 Mxd 文档使用代码加载Mxd文档。1、添加事件按照实验二的方式添加菜单“打开Mxd文档”,菜单的Name属性为OpenMxdDoc.添加Click
9、事件。在菜单的Click事件处理方法中添加如下代码:首先在头部定义IMapDocument pMapDocument,如下图所示:代码如下:private void OpenMxdDoc_Click(object sender, EventArgs e) /使用openFileDialog获取mxd文件地图文档(*.mxd)|*.mxd /将数据加载入 pMapDocument 并与 map 控件联系起来 pMapDocument = new MapDocumentClass(); pMapDocument.Open(pPath, ); for (int i = 0; i pMapDocume
10、nt.MapCount; i+) /遍历可能的 Map 对象 axMapControl1.Map = pMapDocument.get_Map(i); /刷新地图 axMapControl1.Refresh();2、编译运行按F5即可编译运行程序,你可以通过菜单“打开Mxd文档”打开地图文档,浏览地图.熟悉帮助文档的使用和对象模型图的使用对基于ArcGIS Engine的开发有很大帮助。实验四:调用新创建类封装方法实现Mxd文档操作新建自定义类,封装对Mxd文档的各类操作,提高代码重用性与程序安全性。1、新建类库1.1打开实验2-3所建项目,在解决方案管理器中右击选择“mymap2|添加|新建
11、项”;1.2 在弹出对话框中点击“Visual C#模板”,选择“类”命名为“MyMaxDocClass1.cs”.2、用新创建类封装方法2.1双击“MyMaxDocClass.cs”类,在代码框中导入命名空间.2.2将新建类改为静态变量,并对文档命令进行封装.namespace mymap2 /静态变量 public static class MyMxDocClass /定义公有静态IMapDocument对象,并实例化 public static IMapDocument pMapDocument = new MapDocumentClass(); private static Syste
12、m.Windows.Forms.OpenFileDialog OpenFileDialog2; private static System.Windows.Forms.SaveFileDialog SaveFileDialog2; /新建地图文档 public static void NewMapDoc(AxMapControl axMapControl1) /选择新建地图文档的位置 SaveFileDialog2 = new SaveFileDialog(); SaveFileDialog2.Title = 新建地图文档 SaveFileDialog2.Filter = Mxd文档(*.mx
13、d)|*.mxd /显示新建的地图文档 SaveFileDialog2.ShowDialog(); string sFilePath = SaveFileDialog2.FileName; /保证新建的文档命名不为空 if (sFilePath != ) /创建并打开新的地图文档 pMapDocument.New(sFilePath); pMapDocument.Open(sFilePath, /MapControl1显示的地图为MapDocument中的第一张 axMapControl1.Map = pMapDocument.get_Map(0); else /打开地图文档 public s
14、tatic void OpenMapDoc(AxMapControl axMapControl1) /选择要打开的地图文档的路径 OpenFileDialog2 = new OpenFileDialog(); OpenFileDialog2.Title = 打开地图文档 OpenFileDialog2.Filter = /显示新打开的地图文档 OpenFileDialog2.ShowDialog(); string sFilePath = OpenFileDialog2.FileName; /判断选中的地图文档是否有效 if (pMapDocument.get_IsMapDocument(sF
15、ilePath) /添加地图文档到MapControl1中 /刷新窗口 /保存地图文档 public static void SaveMapDoc() /判断MapDocument中的地图文档是否为只读 if (pMapDocument.get_IsReadOnly(pMapDocument.DocumentFilename) MessageBox.Show(地图文档只读! pMapDocument.Save(pMapDocument.UsesRelativePaths, true); /相对路径保存保存成功! /另存为 public static void SaveAsMapDoc() /选
16、择地图文档保存位置地图文档另存为 string pFilePath = SaveFileDialog2.FileName; /判断路径是否为空 if (pFilePath = null) /如果保存路径和当前文档路径相同,就替换原文件保存 if (pFilePath = pMapDocument.DocumentFilename) SaveMapDoc(); /否则另存为 else pMapDocument.SaveAs(pFilePath, true, true); /对话框显示保存成功 3、封装方法的调用3.1同实验三中,在菜单上点击,依次输入“新建Mxd文档、另存Mxd文档、”作为菜单的
17、标题,分别修改Name属性“NewMxdDoc、SaveAsMxdDoc”作为菜单的名称.3.2双击菜单,在自动生成的事件处理方法中加载方法调用代码./保存Mxd文档 private void SaveMxdDoc_Click(object sender, EventArgs e) MyMxDocClass.SaveMapDoc(); /新建Mxd文档 private void NewMxdDoc_Click(object sender, EventArgs e) MyMxDocClass.NewMapDoc(axMapControl1); /另存Mxd文档 private void Save
18、AsMxdDoc_Click(object sender, EventArgs e) MyMxDocClass.SaveAsMapDoc();4、调试运行点击“生成|生成解决方案”,然后点击运行按钮或在键盘上按 F5 键,运行调试.该实验主要是实现使用封装类方法实现对Mxd文档的操作,提高代码重用性。实验五:ArcGIS Engine 实现视窗联动使用ArcGIS Engine代码实现视窗联动。1、新建一个Windows窗体应用程序启动VS2010,选择“文件|新建|项目|Windos 窗体应用程序”,在项目类型中选择Visual C#,再选择Windows应用程序模板,输入名称“FormsL
19、inks”,点击确定。1.2添加控件:选择工具箱中的“容器|SplitContainer(容器)”拖入窗体,并将其属性中的Dock设置为Fill;拖入MapControl控件,设置Dock属性为Fill;拖入PageLayoutControl控件,设置Dock属性为Fill。;最后将LicenseControl(许可控件)拖入窗体任意位置.2、新建类和加载代码在解决方案管理器中右击选择“FormsLinks |添加|新建项”,在弹出对话框中点击“Visual C#模板”,选择“类”命名为“MapAndPage”;双击“MapAndPage”类,在代码框中导入命名空间,在代码框里引用类库,并加载
20、代码:namespace FormsLinks public class MapAndPage /将 MapControl 中的地图 复制 到 PageLayoutControl 中去 public void MapToPage(AxMapControl axMapControl1,AxPageLayoutControl axPageLayoutControl1) IObjectCopy pObjectCopy = new ObjectCopyClass(); Object pSourceMap = (Object)axMapControl1.Map; Object pOverwritedMa
21、p = (Object)axPageLayoutControl1.ActiveView.FocusMap; pObjectCopy.Overwrite(pSourceMap, ref pOverwritedMap);3、添加相应的代码打开Form1.cs的代码框,在代码框里引用类库,并加载代码: public partial class Form1 : Form /调用MapAndPage类 实例化对象 MapAndPage MapAndPage1 = new MapAndPage(); public Form1() InitializeComponent(); private void Fo
22、rm1_Load(object sender, EventArgs e) /加载MXD文档 openMapDoc(); private void openMapDoc() /实例化 OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Title = 打开地图文档 Open Mxd Document地图文档 Map Document(*.mxd)|*.mxd /显示openFileDialog所打开的文件 openFileDialog1.ShowDialog(); string filePath = ope
23、nFileDialog1.FileName; /检查文件路径下的文件是否为有效的地图文档并加载 if (axMapControl1.CheckMxFile(filePath) axMapControl1.LoadMxFile(filePath); /否侧显示对话框文件路径和不是有效的地图文档 MessageBox.Show(filePath + 不是有效的地图文档! /调用MapAndPage private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e) MapA
24、ndPage1.MapToPage(axMapControl1, axPageLayoutControl1); private void axMapControl1_OnAfterScreenDraw(object sender, IMapControlEvents2_OnAfterScreenDrawEvent e) /QI 方式通过焦点地图获得对象 IActiveView pPageLayoutView = axPageLayoutControl1.ActiveView.FocusMap as IActiveView; /控制显示范围 pPageLayoutView.ScreenDisplay.DisplayTransformation.VisibleBounds = axMapControl1.Extent; /刷新视图 axPageLayoutControl1.ActiveView.Refresh(); /根据 MapControl 的视图范围,确定 PageLayoutControl 的视图范围4、编译运行按F5即可编译运行程序,即可实现窗口联动.通过实验五了解到视窗联动的功能,在以后实习过程中要实现鹰眼功能提供了编程基础和熟悉了部分最基础的功能。实验六:ArcGIS Engine实现标签编辑与右
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2