ArcEngine加载地图

  对于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); 

原文地址:https://www.cnblogs.com/HelsingWang/p/8944947.html