当前位置:   article > 正文

ArcEngine简单教程——加载数据

arcengine

详细教程请见:

ArcEngine简单教程汇总

目录

1 目的

2 基础准备

3 概要

数据文件路径尽量不要有中文!!!

ArcEngine如何添加引用

无法嵌入互操作类型

MapControl控件的层次结构

加载mxd文件

加载shp数据

加载栅格数据

1)加载grid

2)加载img、dat、jpg等其他栅格影像

主要代码

4 小结


 


1 目的

了解ArcEngine中的地图控件对象的层次结构,通过不同方法加载mxd、shp、栅格;

掌握在vs中找到对应引用库的方法

 

2 基础准备

本人环境:win10家庭版,ArcGIS10.2,vs2012

安装过程见: https://blog.csdn.net/nominior/article/details/94862147

创建GIS窗体见https://blog.csdn.net/nominior/article/details/95308445

 

3 概要

ArcEngine功能强大,在不同层次对各GIS功能进行了封装,满足不同用户需求,因此同一功能可以有不同实现方法

完整工程文件及相关测试数据见:https://download.csdn.net/download/nominior/11340864

 

数据文件路径尽量不要有中文!!!

 

ArcEngine如何添加引用

对于代码中缺少/未找到的类,有两种情况(不知道类对应的类库是,可以百度或者在帮助文档中查找)

1)在右侧的解决方案——引用中,已经添加引用,但是在代码中未引用,解决方法如下:

可以将鼠标移至类名上,当左下角出现方框时,在方框周围请晃鼠标,出现帮助选项,点击三角,出现可引用的类列表,点击即可自动引用。

2)未在右侧引用中添加引用,可右击引用,

在添加引用——程序集——扩展中找到ArcGIS类库,添加到引用中,然后再执行1)中步骤

或者:在add ArcGIS reference中添加ArcGIS产品引用,选择Desktop、engine中的类库进行添加

 

无法嵌入互操作类型

在右侧——引用中,找到产生错误的类库,右击类库,在属性中将嵌入互操作类型改为false,等待几秒后即可更正错误

 

MapControl控件的层次结构

MapControl是用来地图管理的控件,其主要功能是地图的显示,一些显示操作基于MapControl进行

MapControl.Map是MapControl下用于存放地图数据的容器,主要用于数据的存储和管理、操作

MapControl.Map

 

加载mxd文件

1)ICommand 是在ArcEngine对的Desktop中的一些工具的集成,使用ICommand可以轻松调用Desktop中的一些工具、方法

直接使用ControlsOpenDocCommand工具进行加载

2)使用地图控件 MapControl 下的  LoadMxFile()  方法,

思路:实例化打开文件对话框,设置对话框参数,获取对话框返回的文件名路径,调用LoadMxFile方法

3)使用MapDocument方法打开mxd文件

思路:实例化打开文件对话框,设置对话框参数,获取对话框返回的文件名路径,实例化MapDocument,打开地图文件,将MapDocument对象与地图控件中的map关联

 

加载shp数据

1)使用地图控件 MapControl 下的  AddShapeFile()  方法,

思路:获取文件名、文件路径,调用LoadMxFile方法

1)使用地图控件 MapControl.Map 下的  AddLayer()  方法,

思路:获取文件名、文件路径;

使用文件路径,创建工作空间工厂,并转换为要素工作空间;

通过要素工作空间打开shp文件,得到要素类;

根据要素类创建要素图层;

在地图中添加要素图层,刷新;

 

加载栅格数据

1)加载grid

chaohuc1单波段Grid格式数据

grid格式与其他数据不同,是以文件夹的方式进行组织,因此打开时,需要使用文件夹打开方式

思路:使用打开文件夹对话框,选择数据文件夹,获取路径;创建栅格图层,使用axMapControl.addLayer添加图层

2)加载img、dat、jpg等其他栅格影像

使用地图控件 MapControl.Map 下的  AddLayer()  方法,

思路:获取文件名、文件路径;

使用文件路径,创建工作空间工厂,并转换为栅格工作空间;

通过要素工作空间打开栅格文件,得到栅格数据集;

为栅格影像创建缩放金字塔

根据栅格数据集创建栅格数据,使用栅格数据创建栅格图层

在地图中添加栅格图层

 

主要代码

1)加载mxd

  1. private void iCommand法ToolStripMenuItem_Click(object sender, EventArgs e)
  2. {
  3. ICommand command = new ControlsOpenDocCommandClass();
  4. command.OnCreate(axMapControl1.Object);
  5. command.OnClick();
  6. }
  7. private void loadMxFile法ToolStripMenuItem_Click(object sender, EventArgs e)
  8. {
  9. try
  10. {
  11. //实例化打开文件对话框
  12. OpenFileDialog pOpenFileDialog = new OpenFileDialog();
  13. //路径检查
  14. pOpenFileDialog.CheckFileExists = true;
  15. //对话框标题
  16. pOpenFileDialog.Title = "打开地图文档";
  17. //文件类型筛选
  18. pOpenFileDialog.Filter = "ArcMap文档(*.mxd)|*.mxd";
  19. //不允许多个文件同时选择
  20. pOpenFileDialog.Multiselect = false;
  21. //存储打开的文件路径,下次打开对话框直接定位
  22. pOpenFileDialog.RestoreDirectory = true;
  23. //如果选择了文件并确定
  24. if (pOpenFileDialog.ShowDialog() == DialogResult.OK)
  25. {
  26. //获取文件名
  27. string pFileName = pOpenFileDialog.FileName;
  28. //检查地图文档有效性
  29. if (axMapControl1.CheckMxFile(pFileName))
  30. {
  31. //**************加载文件************
  32. axMapControl1.LoadMxFile(pFileName);
  33. }
  34. else
  35. {
  36. MessageBox.Show(pFileName + "是无效的地图文档!", "信息提示");
  37. return;
  38. }
  39. }
  40. }
  41. catch (Exception ex)
  42. {
  43. MessageBox.Show("打开地图文档失败" + ex.Message);
  44. }
  45. }
  46. private void mapDocument法ToolStripMenuItem_Click(object sender, EventArgs e)
  47. {
  48. try
  49. {
  50. //实例化打开文件对话框
  51. OpenFileDialog pOpenFileDialog = new OpenFileDialog();
  52. //路径检查
  53. pOpenFileDialog.CheckFileExists = true;
  54. //对话框标题
  55. pOpenFileDialog.Title = "打开地图文档";
  56. //文件类型筛选
  57. pOpenFileDialog.Filter = "ArcMap文档(*.mxd)|*.mxd";
  58. //不允许多个文件同时选择
  59. pOpenFileDialog.Multiselect = false;
  60. //存储打开的文件路径,下次打开对话框直接定位
  61. pOpenFileDialog.RestoreDirectory = true;
  62. //如果选择了文件并确定
  63. if (pOpenFileDialog.ShowDialog() == DialogResult.OK)
  64. {
  65. //获取文件名
  66. string pFileName = pOpenFileDialog.FileName;
  67. //检查地图文档有效性
  68. if (axMapControl1.CheckMxFile(pFileName)) //检查地图文档有效性
  69. {
  70. //将数据载入pMapDocument并与Map控件关联
  71. IMapDocument pMapDocument = new MapDocument();//using ESRI.ArcGIS.Carto;
  72. pMapDocument.Open(pFileName, "");
  73. //获取Map中激活的地图文档
  74. axMapControl1.Map = pMapDocument.ActiveView.FocusMap;
  75. axMapControl1.ActiveView.Refresh();
  76. }
  77. else
  78. {
  79. MessageBox.Show(pFileName + "是无效的地图文档!", "信息提示");
  80. return;
  81. }
  82. }
  83. }
  84. catch (Exception ex)
  85. {
  86. MessageBox.Show("打开地图文档失败" + ex.Message);
  87. }
  88. }

2)加载shp

  1. private void addShpFile法ToolStripMenuItem_Click(object sender, EventArgs e)
  2. {
  3. OpenFileDialog pOpenFileDialog = new OpenFileDialog();
  4. pOpenFileDialog.CheckFileExists = true;
  5. pOpenFileDialog.Title = "打开Shape文件";
  6. pOpenFileDialog.Filter = "Shape文件(*.shp)|*.shp";
  7. pOpenFileDialog.ShowDialog();
  8. //获取文件路径
  9. FileInfo pFileInfo = new FileInfo(pOpenFileDialog.FileName);
  10. string pPath = pOpenFileDialog.FileName.Substring(0, pOpenFileDialog.FileName.Length - pFileInfo.Name.Length);
  11. //**************加载文件************
  12. axMapControl1.AddShapeFile(pPath, pFileInfo.Name);
  13. }
  14. private void addLayer法ToolStripMenuItem_Click(object sender, EventArgs e)
  15. {
  16. try
  17. {
  18. OpenFileDialog pOpenFileDialog = new OpenFileDialog();
  19. pOpenFileDialog.CheckFileExists = true;
  20. pOpenFileDialog.Title = "打开Shape文件";
  21. pOpenFileDialog.Filter = "Shape文件(*.shp)|*.shp";
  22. pOpenFileDialog.ShowDialog();
  23. IWorkspaceFactory pWorkspaceFactory;//using ESRI.ArcGIS.Geodatabase;
  24. IFeatureWorkspace pFeatureWorkspace;
  25. IFeatureLayer pFeatureLayer;
  26. string pFullPath = pOpenFileDialog.FileName;
  27. if (pFullPath == "") return;
  28. int pIndex = pFullPath.LastIndexOf("\\");
  29. string pFilePath = pFullPath.Substring(0, pIndex); //文件路径
  30. string pFileName = pFullPath.Substring(pIndex + 1); //文件名
  31. //实例化ShapefileWorkspaceFactory工作空间,打开Shape文件
  32. pWorkspaceFactory = new ShapefileWorkspaceFactory();//using ESRI.ArcGIS.DataSourcesFile;
  33. pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(pFilePath, 0);
  34. //创建并实例化要素集
  35. IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(pFileName);
  36. pFeatureLayer = new FeatureLayer();
  37. pFeatureLayer.FeatureClass = pFeatureClass;
  38. pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
  39. //**************加载文件************
  40. axMapControl1.Map.AddLayer(pFeatureLayer);
  41. axMapControl1.ActiveView.Refresh();
  42. }
  43. catch (Exception ex)
  44. {
  45. MessageBox.Show("图层加载失败!" + ex.Message);
  46. }
  47. }

3)加载gird

  1. private void 加载gridToolStripMenuItem_Click(object sender, EventArgs e)
  2. {
  3. //打开文件夹对话框
  4. FolderBrowserDialog fbd = new FolderBrowserDialog();
  5. fbd.ShowDialog();
  6. //获取路径
  7. string filePath = fbd.SelectedPath;
  8. if (filePath == "")
  9. return;
  10. //创建栅格文件
  11. IRasterLayer pRasterLayer = new RasterLayer();//引用DataSourcesRaster
  12. //读取栅格文件
  13. pRasterLayer.CreateFromFilePath(@filePath);
  14. //**************加载文件************
  15. axMapControl1.AddLayer(pRasterLayer, 0);
  16. }

4)加载img、dat等

  1. private void 加载其他栅格影像ToolStripMenuItem_Click(object sender, EventArgs e)
  2. {
  3. OpenFileDialog pOpenFileDialog = new OpenFileDialog();
  4. pOpenFileDialog.CheckFileExists = true;
  5. pOpenFileDialog.Title = "打开Raster文件";
  6. pOpenFileDialog.Filter = "栅格文件 (*.*)|*.bmp;*.tif;*.jpg;*.dat;*.img|(*.bmp)|*.bmp|(*.tif)|*.tif|(*.jpg)|*.jpg|(*.img)|*.img|(*.dat)|*.dat";
  7. pOpenFileDialog.ShowDialog();
  8. string pRasterFileName = pOpenFileDialog.FileName;
  9. if (pRasterFileName == "")
  10. {
  11. return;
  12. }
  13. string pPath = System.IO.Path.GetDirectoryName(pRasterFileName);
  14. string pFileName = System.IO.Path.GetFileName(pRasterFileName);
  15. IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory();
  16. IRasterWorkspace pRasterWorkspace = pWorkspaceFactory.OpenFromFile(pPath, 0) as IRasterWorkspace;
  17. IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(pFileName);
  18. //影像金字塔判断与创建
  19. IRasterPyramid3 pRasPyrmid;
  20. pRasPyrmid = pRasterDataset as IRasterPyramid3;
  21. if (pRasPyrmid != null)
  22. {
  23. if (!(pRasPyrmid.Present))
  24. {
  25. pRasPyrmid.Create(); //创建金字塔
  26. }
  27. }
  28. IRaster pRaster;
  29. pRaster = pRasterDataset.CreateDefaultRaster();
  30. IRasterLayer pRasterLayer;
  31. pRasterLayer = new RasterLayerClass();
  32. pRasterLayer.CreateFromRaster(pRaster);
  33. axMapControl1.AddLayer(pRasterLayer, 0);
  34. }

 

4 小结

地图控件的主要结构:

AxMapControl.Map,AxMapControl、Map分别可以实现加载地图图层,map使用情况更多

加载数据的主要思路:获取路径,创建地图/图层对象,加载地图/图层对象

栅格、矢量/要素   两种数据的加载也有相似之处,要素类与栅格数据集的功能结构相似,都是存放具体数据,创建图层时以此为据进行相应图层的创建。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号