赞
踩
详细教程请见:
目录
了解ArcEngine中的地图控件对象的层次结构,通过不同方法加载mxd、shp、栅格;
掌握在vs中找到对应引用库的方法
本人环境:win10家庭版,ArcGIS10.2,vs2012
安装过程见: https://blog.csdn.net/nominior/article/details/94862147
创建GIS窗体见:https://blog.csdn.net/nominior/article/details/95308445
ArcEngine功能强大,在不同层次对各GIS功能进行了封装,满足不同用户需求,因此同一功能可以有不同实现方法
完整工程文件及相关测试数据见:https://download.csdn.net/download/nominior/11340864
对于代码中缺少/未找到的类,有两种情况(不知道类对应的类库是,可以百度或者在帮助文档中查找)
1)在右侧的解决方案——引用中,已经添加引用,但是在代码中未引用,解决方法如下:
可以将鼠标移至类名上,当左下角出现方框时,在方框周围请晃鼠标,出现帮助选项,点击三角,出现可引用的类列表,点击即可自动引用。
2)未在右侧引用中添加引用,可右击引用,
在添加引用——程序集——扩展中找到ArcGIS类库,添加到引用中,然后再执行1)中步骤
或者:在add ArcGIS reference中添加ArcGIS产品引用,选择Desktop、engine中的类库进行添加
在右侧——引用中,找到产生错误的类库,右击类库,在属性中将嵌入互操作类型改为false,等待几秒后即可更正错误
MapControl是用来地图管理的控件,其主要功能是地图的显示,一些显示操作基于MapControl进行
MapControl.Map是MapControl下用于存放地图数据的容器,主要用于数据的存储和管理、操作
MapControl.Map
1)ICommand 是在ArcEngine对的Desktop中的一些工具的集成,使用ICommand可以轻松调用Desktop中的一些工具、方法
直接使用ControlsOpenDocCommand工具进行加载
2)使用地图控件 MapControl 下的 LoadMxFile() 方法,
思路:实例化打开文件对话框,设置对话框参数,获取对话框返回的文件名路径,调用LoadMxFile方法
3)使用MapDocument方法打开mxd文件
思路:实例化打开文件对话框,设置对话框参数,获取对话框返回的文件名路径,实例化MapDocument,打开地图文件,将MapDocument对象与地图控件中的map关联
1)使用地图控件 MapControl 下的 AddShapeFile() 方法,
思路:获取文件名、文件路径,调用LoadMxFile方法
1)使用地图控件 MapControl.Map 下的 AddLayer() 方法,
思路:获取文件名、文件路径;
使用文件路径,创建工作空间工厂,并转换为要素工作空间;
通过要素工作空间打开shp文件,得到要素类;
根据要素类创建要素图层;
在地图中添加要素图层,刷新;
chaohuc1单波段Grid格式数据
grid格式与其他数据不同,是以文件夹的方式进行组织,因此打开时,需要使用文件夹打开方式
思路:使用打开文件夹对话框,选择数据文件夹,获取路径;创建栅格图层,使用axMapControl.addLayer添加图层
使用地图控件 MapControl.Map 下的 AddLayer() 方法,
思路:获取文件名、文件路径;
使用文件路径,创建工作空间工厂,并转换为栅格工作空间;
通过要素工作空间打开栅格文件,得到栅格数据集;
为栅格影像创建缩放金字塔
根据栅格数据集创建栅格数据,使用栅格数据创建栅格图层
在地图中添加栅格图层
1)加载mxd
- private void iCommand法ToolStripMenuItem_Click(object sender, EventArgs e)
- {
- ICommand command = new ControlsOpenDocCommandClass();
- command.OnCreate(axMapControl1.Object);
- command.OnClick();
- }
-
-
-
-
-
- private void loadMxFile法ToolStripMenuItem_Click(object sender, EventArgs e)
- {
- try
- {
- //实例化打开文件对话框
- OpenFileDialog pOpenFileDialog = new OpenFileDialog();
- //路径检查
- pOpenFileDialog.CheckFileExists = true;
- //对话框标题
- pOpenFileDialog.Title = "打开地图文档";
- //文件类型筛选
- pOpenFileDialog.Filter = "ArcMap文档(*.mxd)|*.mxd";
- //不允许多个文件同时选择
- pOpenFileDialog.Multiselect = false;
- //存储打开的文件路径,下次打开对话框直接定位
- pOpenFileDialog.RestoreDirectory = true;
- //如果选择了文件并确定
- if (pOpenFileDialog.ShowDialog() == DialogResult.OK)
- {
- //获取文件名
- string pFileName = pOpenFileDialog.FileName;
- //检查地图文档有效性
- if (axMapControl1.CheckMxFile(pFileName))
- {
- //**************加载文件************
- axMapControl1.LoadMxFile(pFileName);
- }
- else
- {
- MessageBox.Show(pFileName + "是无效的地图文档!", "信息提示");
- return;
- }
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show("打开地图文档失败" + ex.Message);
- }
- }
-
-
-
-
- private void mapDocument法ToolStripMenuItem_Click(object sender, EventArgs e)
- {
- try
- {
- //实例化打开文件对话框
- OpenFileDialog pOpenFileDialog = new OpenFileDialog();
- //路径检查
- pOpenFileDialog.CheckFileExists = true;
- //对话框标题
- pOpenFileDialog.Title = "打开地图文档";
- //文件类型筛选
- pOpenFileDialog.Filter = "ArcMap文档(*.mxd)|*.mxd";
- //不允许多个文件同时选择
- pOpenFileDialog.Multiselect = false;
- //存储打开的文件路径,下次打开对话框直接定位
- pOpenFileDialog.RestoreDirectory = true;
- //如果选择了文件并确定
- if (pOpenFileDialog.ShowDialog() == DialogResult.OK)
- {
- //获取文件名
- string pFileName = pOpenFileDialog.FileName;
- //检查地图文档有效性
- if (axMapControl1.CheckMxFile(pFileName)) //检查地图文档有效性
- {
- //将数据载入pMapDocument并与Map控件关联
- IMapDocument pMapDocument = new MapDocument();//using ESRI.ArcGIS.Carto;
- pMapDocument.Open(pFileName, "");
- //获取Map中激活的地图文档
- axMapControl1.Map = pMapDocument.ActiveView.FocusMap;
- axMapControl1.ActiveView.Refresh();
- }
- else
- {
- MessageBox.Show(pFileName + "是无效的地图文档!", "信息提示");
- return;
- }
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show("打开地图文档失败" + ex.Message);
- }
- }
-
-
-

2)加载shp
- private void addShpFile法ToolStripMenuItem_Click(object sender, EventArgs e)
- {
- OpenFileDialog pOpenFileDialog = new OpenFileDialog();
- pOpenFileDialog.CheckFileExists = true;
- pOpenFileDialog.Title = "打开Shape文件";
- pOpenFileDialog.Filter = "Shape文件(*.shp)|*.shp";
- pOpenFileDialog.ShowDialog();
-
- //获取文件路径
- FileInfo pFileInfo = new FileInfo(pOpenFileDialog.FileName);
- string pPath = pOpenFileDialog.FileName.Substring(0, pOpenFileDialog.FileName.Length - pFileInfo.Name.Length);
- //**************加载文件************
- axMapControl1.AddShapeFile(pPath, pFileInfo.Name);
- }
-
-
-
-
- private void addLayer法ToolStripMenuItem_Click(object sender, EventArgs e)
- {
- try
- {
- OpenFileDialog pOpenFileDialog = new OpenFileDialog();
- pOpenFileDialog.CheckFileExists = true;
- pOpenFileDialog.Title = "打开Shape文件";
- pOpenFileDialog.Filter = "Shape文件(*.shp)|*.shp";
- pOpenFileDialog.ShowDialog();
-
- IWorkspaceFactory pWorkspaceFactory;//using ESRI.ArcGIS.Geodatabase;
- IFeatureWorkspace pFeatureWorkspace;
- IFeatureLayer pFeatureLayer;
-
- string pFullPath = pOpenFileDialog.FileName;
- if (pFullPath == "") return;
-
- int pIndex = pFullPath.LastIndexOf("\\");
- string pFilePath = pFullPath.Substring(0, pIndex); //文件路径
- string pFileName = pFullPath.Substring(pIndex + 1); //文件名
-
- //实例化ShapefileWorkspaceFactory工作空间,打开Shape文件
- pWorkspaceFactory = new ShapefileWorkspaceFactory();//using ESRI.ArcGIS.DataSourcesFile;
- pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(pFilePath, 0);
- //创建并实例化要素集
- IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(pFileName);
- pFeatureLayer = new FeatureLayer();
- pFeatureLayer.FeatureClass = pFeatureClass;
- pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
- //**************加载文件************
- axMapControl1.Map.AddLayer(pFeatureLayer);
- axMapControl1.ActiveView.Refresh();
- }
- catch (Exception ex)
- {
- MessageBox.Show("图层加载失败!" + ex.Message);
- }
- }

3)加载gird
- private void 加载gridToolStripMenuItem_Click(object sender, EventArgs e)
- {
- //打开文件夹对话框
- FolderBrowserDialog fbd = new FolderBrowserDialog();
- fbd.ShowDialog();
-
- //获取路径
- string filePath = fbd.SelectedPath;
- if (filePath == "")
- return;
-
- //创建栅格文件
- IRasterLayer pRasterLayer = new RasterLayer();//引用DataSourcesRaster
- //读取栅格文件
- pRasterLayer.CreateFromFilePath(@filePath);
- //**************加载文件************
- axMapControl1.AddLayer(pRasterLayer, 0);
- }

4)加载img、dat等
- private void 加载其他栅格影像ToolStripMenuItem_Click(object sender, EventArgs e)
- {
- OpenFileDialog pOpenFileDialog = new OpenFileDialog();
- pOpenFileDialog.CheckFileExists = true;
- pOpenFileDialog.Title = "打开Raster文件";
- pOpenFileDialog.Filter = "栅格文件 (*.*)|*.bmp;*.tif;*.jpg;*.dat;*.img|(*.bmp)|*.bmp|(*.tif)|*.tif|(*.jpg)|*.jpg|(*.img)|*.img|(*.dat)|*.dat";
- pOpenFileDialog.ShowDialog();
-
- string pRasterFileName = pOpenFileDialog.FileName;
- if (pRasterFileName == "")
- {
- return;
- }
-
- string pPath = System.IO.Path.GetDirectoryName(pRasterFileName);
- string pFileName = System.IO.Path.GetFileName(pRasterFileName);
-
- IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory();
- IRasterWorkspace pRasterWorkspace = pWorkspaceFactory.OpenFromFile(pPath, 0) as IRasterWorkspace;
- IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(pFileName);
- //影像金字塔判断与创建
- IRasterPyramid3 pRasPyrmid;
- pRasPyrmid = pRasterDataset as IRasterPyramid3;
- if (pRasPyrmid != null)
- {
- if (!(pRasPyrmid.Present))
- {
- pRasPyrmid.Create(); //创建金字塔
- }
- }
- IRaster pRaster;
- pRaster = pRasterDataset.CreateDefaultRaster();
- IRasterLayer pRasterLayer;
- pRasterLayer = new RasterLayerClass();
- pRasterLayer.CreateFromRaster(pRaster);
-
- axMapControl1.AddLayer(pRasterLayer, 0);
- }

地图控件的主要结构:
AxMapControl.Map,AxMapControl、Map分别可以实现加载地图图层,map使用情况更多
加载数据的主要思路:获取路径,创建地图/图层对象,加载地图/图层对象
栅格、矢量/要素 两种数据的加载也有相似之处,要素类与栅格数据集的功能结构相似,都是存放具体数据,创建图层时以此为据进行相应图层的创建。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。