前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 ># 如何使用 ArcGIS Engine10.2 + C# VS2012 开发环境打开不同类型的地理数据(mxd,shp,栅格数据)

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

原创
作者头像
Abigail
发布2023-04-15 22:19:07
1.7K0
发布2023-04-15 22:19:07
举报
文章被收录于专栏:GIS二次开发基础

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

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

代码语言:javascript
复制
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 类中添加如下变量:

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

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

代码语言:javascript
复制
public Form1()
{
    InitializeComponent();
    ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
}

响应按钮点击事件

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

代码语言:javascript
复制
private void button1_Click(object sender, EventArgs e)
{
    OpenFile();
}

打开不同类型的文件

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

代码语言:javascript
复制
//打开文件
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 类中添加如下代码:

代码语言:javascript
复制
//加载Mxd数据
public void OpenMxdFile() 
{
   
        axMapControl1.LoadMxFile(filename);
    
}

打开 Shp 文件

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

代码语言:javascript
复制
//加载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 类中添加如下代码:

代码语言:javascript
复制
//加载栅格数据
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 文件和栅格文件。最后,我运行了程序,并展示了加载不同类型的文件的效果。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义变量和初始化组件
  • 响应按钮点击事件
  • 打开不同类型的文件
  • 打开 Shp 文件
  • 打开栅格文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档