AE - 02.矢量、栅格、Mxd的加载
02.矢量、栅格、Mxd的加载
流程图
#####引用类库及接口描述
- 引用类库:
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesRaster;
- 接口:
1. OpenFileDialog 接口:用于打开文件对话框
2. IWorkspaceFactory 接口:工作空间工厂,工作空间的发布者,允许客户连接通过一组连接属性定义的工作空间。普通类。
3. IWorkspace 接口:提供访问工作空间的通用属性和方法,如它的连接属性,以及包含的数据集的方法。
4. IFeatureWorkspace 接口:用于访问和管理地理数据库中的要素的重要成分—数据集。
5. IRasterWorkspace 接口:用于打开和建立基于文件的RasterDataset。
6. IFeatureClass 接口:获取和设置要素类属性的主要接口。
7. IFeatureLayer 接口:继承自ILayer,提供了访问基于矢量数据图层的属性和方法。、
8. ILayer 接口:Layer 是图层对象,是数据的外壳,必须建立在数据的基础上才有意义。
9. IMap 接口:许多图层的集合,由多个ILayer构成。
结构
- 矢量
- 获取shp文件的路径和文件名称
- 由工作空间工厂创建Shp工作空间工厂类,打开工作空间
- 转换工作空间为要素工作空间,打开要素类
- 创建要素图层,设置要素图层的FeatureClass为上面打开的要素类
- 转换IFeatureLayer为ILayer,添加到mapcontorl中。
- 刷新
- 栅格
- 获取shp文件的路径和文件名称
- 由工作空间工厂创建Raster工作空间工厂类,打开工作空间
- 转换工作空间为栅格工作空间,打开栅格数据集
- 影像金字塔的判断和创建
- 新建栅格图层,添加到mapcontorl中。
- 刷新
代码
七、代码
打开按钮的点击事件
private void menu_open_Click(object sender, EventArgs e) { addMapFile(); }
打开文件
private void addMapFile() { OpenFileDialog pOpenfileDialog = new OpenFileDialog(); pOpenfileDialog.Filter = "全部文件|*.*" + "|Shape 文件|*.shp" + "|Mxd 文件|*.mxd" + "|栅格 文件|*.tif;*.tiff;*.jpep;*.jpg;*.png;*.bmp"; if (pOpenfileDialog.ShowDialog() == DialogResult.OK) { string path = pOpenfileDialog.FileName; bool shp = path.EndsWith(".shp"); bool mxd = path.EndsWith(".mxd"); bool tif = path.EndsWith(".tif") || path.EndsWith(".tiff") || path.EndsWith(".jpep") || path.EndsWith(".jpg") || path.EndsWith(".png") || path.EndsWith(".bmp"); if (shp) openShpFile(path); else if (mxd) openShpFile(path); else if (tif) openShanGe(path); } }
打开shp
/// <summary> /// 打开shp数据 /// </summary> private void openShpFile(string file) { int index = 0; index = file.LastIndexOf("\\"); string filePath = file.Substring(0, index); string fileName = file.Substring(index + 1, file.Length - (index + 1)); IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory(); IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(filePath, 0); IFeatureWorkspace pFeatureWokkspace = pWorkspace as IFeatureWorkspace; IFeatureClass pFC = pFeatureWokkspace.OpenFeatureClass(fileName); IFeatureLayer pFLayer = new FeatureLayer(); pFLayer.FeatureClass = pFC; pFLayer.Name = pFC.AliasName; ILayer pLayer = pFLayer as ILayer; IMap pMap = mapControl.Map; pMap.AddLayer(pLayer); mapControl.ActiveView.Refresh(); }
打开栅格
/// <summary> /// 打开栅格数据 /// </summary> private void openShanGe(string Path) { string RasterPath = System.IO.Path.GetDirectoryName(Path); string RasterName = System.IO.Path.GetFileName(Path); IWorkspaceFactory pRasterWsF = new RasterWorkspaceFactory(); IWorkspace pWs = pRasterWsF.OpenFromFile(RasterPath, 0); IRasterWorkspace pRasterWs = pWs as IRasterWorkspace; IRasterDataset pRasterDS = pRasterWs.OpenRasterDataset(RasterName); IRasterPyramid pRasterPyramid = pRasterDS as IRasterPyramid; if ((pRasterPyramid != null)&&(!pRasterPyramid.Present)) { if (MessageBox.Show("是否开始创建金字塔?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.OK) { Stopwatch sw = new Stopwatch(); sw.Start(); pRasterPyramid.Create(); sw.Stop(); MessageBox.Show("创建完成,Time:"+ sw.ElapsedMilliseconds.ToString()+"ms"); } else MessageBox.Show("放弃创建金字塔"); } IRasterLayer pRasterLayer = new RasterLayer(); pRasterLayer.CreateFromRaster(pRasterDS.CreateDefaultRaster()); IMap pmap = mapControl.Map; pmap.AddLayer(pRasterLayer); mapControl.ActiveView.Refresh(); OpenStatus(); }
打开mxd
/// <summary> /// 打开mxd数据 /// </summary> private void openMXD(string path) { mapControl.MousePointer = esriControlsMousePointer.esriPointerHourglass; mapControl.LoadMxFile(path, 0, Type.Missing); mapControl.MousePointer = esriControlsMousePointer.esriPointerDefault; OpenStatus(); }
原文作者: 冯亚杰(DanBoard·Feng)
原文链接: http://danbo3110.github.io/2019/11/25/AE - 02.矢量、栅格、Mxd的加载/
版权声明: 转载请注明出处(必须保留作者署名及链接)