对于ArcEngine开发者来说,万事第一步,就是要先加载地图数据,不过我们下面要讲的加载地图的方法不是用ArcEngine自带的控件或命令来实现的,而是以代码方式实现的。加载地图的方式主要分为两种:加载地图文档(.mxd/.pmf)和加载图层,下面主要以加载图层为重点来讲述。
1.加载地图文档
1.1实现原理
通过IMapReader打开一个地图文档,然后获取IMap,最后将IMap加载到MapControl控件中。
1.2涉及接口
IMapReader,IMap
1.3具体实现
1 OpenFileDialog dlg = new OpenFileDialog(); 2 dlg.Filter = "地图文档(*.mxd)|*.mxd|地图发布文档(*.pmf)|*.pmf"; 3 var ret = dlg.ShowDialog(); 4 5 if (ret == System.Windows.Forms.DialogResult.OK) 6 { 7 IMapReader pMapReader = new MapReaderClass(); 8 pMapReader.Open(dlg.FileName); 9 IMap pMap = pMapReader.get_Map(0); 10 this.axMapControl1.Map = pMap; 11 }
PS:除了上述方法外还可以直接使用地图控件提供的方法
1 this.axMapControl1.LoadMxFile(dlg.FileName);
2.加载图层
2.1实现原理
通过图形数据的工作空间工厂(WorkspaceFactory)建立一个工作空间(Workspace),在这个工作空间中打开图形数据,图像数据将以要素类(FeatureClass)的形式创建,然后将要素类包装成要素图层(FeatureLayer),最后加载到MapControl控件中。
2.2涉及接口
IWorkspaceFactory,IWorkspace,IFeatureClass,IFeatureLayer,ILayer,IDataset
2.3具体实现
1 // 创建工作工厂,根据不同数据类型创建不同的工厂 2 IWorkspaceFactory factory = new ShapefileWorkspaceFactory(); 3 // 打开工作空间 4 IWorkspace workspace = factory.OpenFromFile(fileFolder, 0); 5 // QI到要素工作空间 6 IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace; 7 // 打开要素类 8 IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(fileName); 9 // 封装图层 10 IFeatureLayer featureLayer = new FeatureLayerClass(); 11 featureLayer.FeatureClass = featureClass; 12 featureLayer.Name = ((IDataset)featureClass).Name; // 或featureClass.AliasName 13 // 将图层添加到地图 14 this.axMapControl1.AddLayer(featureLayer);
PS:如果图形数据是存在文件夹中的,则可采用直接添加ShapeFile的方式
1 this.axMapControl1.AddShapeFile(fileFolder, fileName);