# 如何使用 ArcGIS Engine10.2 + C# VS2012 开发环境打开不同类型的地理数据(mxd,shp,栅格数据) 您所在的位置:网站首页 arcgis地图怎么加想要的经纬线 # 如何使用 ArcGIS Engine10.2 + C# VS2012 开发环境打开不同类型的地理数据(mxd,shp,栅格数据)

# 如何使用 ArcGIS Engine10.2 + C# VS2012 开发环境打开不同类型的地理数据(mxd,shp,栅格数据)

2023-04-22 12:22| 来源: 网络整理| 查看: 265

这是我的练习作业,这个文章是我拿来复习和回忆的。

ArcGIS 是一款强大的地理信息系统软件,它可以帮助我们处理和分析各种类型的地理数据,如矢量数据,栅格数据,地图文档等。在本文中,我将介绍如何使用 ArcGIS Engine + C# VS2012 开发环境来打开不同类型的地理数据,并在地图控件上显示它们。我将使用一个 Windows 窗体应用程序作为示例,它有一个按钮和一个地图控件,如下图所示:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using ESRI.ArcGIS; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.DataSourcesFile; using ESRI.ArcGIS.DataSourcesGDB; using ESRI.ArcGIS.DataSourcesRaster; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.SystemUI;

定义变量和初始化组件

接下来,我们需要定义一些变量,用于存储打开文件对话框,文件路径,鹰眼地图的范围,矩形框,活动视图,移动点和拖动标志。我们可以在 Form1 类中添加如下变量:

public OpenFileDialog OpenFileda;//创建一个打开文件对话框 public string filename;//获取文件路径 public IEnvelope pEnv;//用于存储鹰眼地图的范围 public IGraphicsContainer pGraphicsContainer;//用于存储鹰眼地图的矩形框 public IActiveView pActiveView;//用于存储鹰眼地图的活动视图 public IPoint pMoveRectPoint; public Boolean bCanDrag;//用于判断是否可以拖动矩形框

然后,我们需要在构造函数中初始化组件,并绑定 ArcGIS 的运行时。我们可以在 Form1 类中添加如下代码:

public Form1() { InitializeComponent(); ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); }响应按钮点击事件

当用户点击按钮时,我们需要弹出一个打开文件对话框,让用户选择要打开的文件,并根据不同的文件类型调用不同的方法来加载文件。我们可以为按钮添加一个 Click 事件处理函数,并在其中调用 OpenFile 方法。我们可以在 Form1 类中添加如下代码:

private void button1_Click(object sender, EventArgs e) { OpenFile(); }打开不同类型的文件

在 OpenFile 方法中,我们需要创建一个打开文件对话框,并设置标题和过滤条件。如果用户选择了一个文件并点击确定,我们就获取文件的路径和扩展名,并根据不同的扩展名调用不同的方法来打开不同类型的文件。我们可以在 Form1 类中添加如下代码:

//打开文件 public void OpenFile() { //创建一个打开文件对话框 OpenFileda = new OpenFileDialog(); //设置标题 OpenFileda.Title = "打开文件"; //设置过滤条件 OpenFileda.Filter = "Shapefile文件(*.shp)|*.shp|Mxd文件(*.mxd)|*.mxd|栅格文件(*.tif;*.jpg;*.bmp)|*.tif;*.jpg;*.bmp|所有文件(*.*)|*.*"; if (OpenFileda.ShowDialog() == DialogResult.OK) { filename = OpenFileda.FileName; string flieext = System.IO.Path.GetExtension(filename); switch (flieext) { case ".shp": //打开Shp数据 OpenShpFile(); break; case ".mxd": //打开Mxd数据 OpenMxdFile(); break; case ".tif": case ".jpg": case ".bmp": //打开栅格数据 OpenRasterFile(); break; default: break; } } }

打开 Mxd 文件

在 OpenMxdFile 方法中,我们直接使用 axMapControl1 控件的 LoadMxFile 方法来加载 Mxd 文件。这个方法会自动加载 Mxd 文件中的所有图层和符号,并显示在地图控件上。我们可以在 Form1 类中添加如下代码:

//加载Mxd数据 public void OpenMxdFile() { axMapControl1.LoadMxFile(filename); }打开 Shp 文件

在 OpenShpFile 方法中,我们首先设置打开文件对话框的 Multiselect 属性为 true,允许用户选择多个文件,然后遍历用户选择的文件,获取每个文件的路径和名称,并使用 axMapControl1 控件的 AddShapeFile 方法来加载 Shp 文件。这个方法会自动创建一个 FeatureLayer 对象,并添加到地图控件的图层集合中。我们可以在 Form1 类中添加如下代码:

//加载Shp数据 public void OpenShpFile() { OpenFileda.Multiselect = true; int intposition;//定义int型接收路径和文件名界限的顺序,lastindex的最后一个匹配项从0开始的位置 string stringFilePath, stringShpName; foreach (String file in OpenFileda.FileNames) { intposition = file.LastIndexOf("\\");//找到分界线 stringFilePath = file.Substring(0, intposition);//找到文件路径的结尾 stringShpName = file.Substring(intposition + 1);//分界点的后一位就是 axMapControl1.AddShapeFile(stringFilePath, stringShpName); } }打开栅格文件

在 OpenRasterFile 方法中,我们首先获取文件的路径和名称,然后创建一个 RasterWorkspaceFactory 对象,用于打开栅格数据的工作空间。接着,我们使用 OpenRasterDataset 方法来打开栅格数据集,并判断是否需要创建影像金字塔。最后,我们创建一个 RasterLayer 对象,并使用 CreateFromRaster 方法和 axMapControl1 控件的 AddLayer 方法来加载栅格文件。我们可以在 Form1 类中添加如下代码:

//加载栅格数据 public void OpenRasterFile() { //获取文件路径和名称 string pRasterPath = System.IO.Path.GetDirectoryName(filename); string pRasterName = System.IO.Path.GetFileName(filename); //创建一个工作空间工厂 IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory(); //打开工作空间 IRasterWorkspace pRasterWorkspace = (IRasterWorkspace)pWorkspaceFactory.OpenFromFile(pRasterPath, 0); //打开栅格数据集 IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(pRasterName); //影像金字塔判断与创建 IRasterPyramid3 pRasPyrmid = pRasterDataset as IRasterPyramid3; if (pRasPyrmid != null) { if (!(pRasPyrmid.Present)) { pRasPyrmid.Create(); //创建金字塔 } } IRaster pRaster = pRasterDataset.CreateDefaultRaster(); IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromRaster(pRaster); axMapControl1.AddLayer(pRasterLayer, 0);

至此,我们已经完成了打开不同类型的文件的功能,我们可以运行程序,点击按钮,选择要打开的文件,然后在地图控件上看到加载的数据。

总结:

在本文中,我介绍了如何使用 ArcGIS Engine 10.2+ C# VS2012 开发环境来打开不同类型的地理数据,并在地图控件上显示它们。我使用了一个 Windows 窗体应用程序作为示例,它有一个按钮和一个地图控件。我首先引入了 ArcGIS 相关的命名空间和类库,然后定义了一些变量和初始化了组件。接着,我响应了按钮点击事件,并调用了 OpenFile 方法。在 OpenFile 方法中,我创建了一个打开文件对话框,并根据不同的文件类型调用了不同的方法来加载文件。在这些方法中,我使用了 ArcGIS 的相关对象和方法来打开和加载 Mxd 文件,Shp 文件和栅格文件。最后,我运行了程序,并展示了加载不同类型的文件的效果。

希望本文对你有所帮助,如果你有任何问题或建议,请在评论区留言。谢谢!😊



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有