Part1.基于ArcGIS Engine二次开发的数据加载(2021-07-28)

基于ArcGIS Engine二次开发的数据加载

  1. 准备工作
  2. 加载地图文档
  3. 加载矢量数据
  4. 加载栅格数据
  5. 总结

1.准备工作

  1.添加控件包括:Esri MapControl;Esri LicenseControl;Button(Text改成相应的目标);如下图即可:

在这里插入图片描述
2.在引用中添加ArcGIS,并绑定ArcGIS Engine & ArcGIS License;
在这里插入图片描述

2.添加地图文档

using ESRI.ArcGIS

OpenFileDialog pOpenFileDialog = new OpenFileDialog();       //其来自于命名空间 System.Windows.Forms
pOpenFileDialog.CheckFileExists = true;   // 获取或设置一个值,该值指示如果用户指定不存在的文件名,对话框是否显示警告。
pOpenFileDialog.Title = "打开地图文档";
pOpenFileDialog.Filter = "ArcGIS文档(*.mxd)|*.mxd|ArcGIS模板(*.mxt)|*.mxt|发布地图文件(*.pmf)|*.pmf|所有地图文档(*.mxd;*.mxt;*.pmf)|*.mxd;*.mxt;*.pmf";
pOpenFileDialog.Multiselect = false;        //不允许多个文件同时进行选择
pOpenFileDialog.RestoreDirectory = true;         //存储打开的文件路径
if(pOpenFileDialog.ShowDialog() == DialogResult.OK)           //当选中文档后,即点击"确定",则进入下面的步骤
{
	string pFileName = pOpenFileDialog.FileName;
	if(pFileName == "")
	{
		return;
	}
	if(axMapControl1.CheckMxFile(pFileName))                     //检查地图文档是否有效
	{
		axMapControl1.ClearLayers();
		axMapControl1.LoadMxFile(pFileName);                //加载地图文档
	}
	else
	{
		MessageBox.Show(pFileName + "是无效的地图文档!", "信息提示")
		return;
	}
}

通过上面的代码就可以实现对地图文档的加载,具体可以得到类似于以下的效果图:
在这里插入图片描述

3.添加矢量数据

 OpenFileDialog pOpenFileDialog = new OpenFileDialog();
            pOpenFileDialog.CheckFileExists = true;
            pOpenFileDialog.Title = "打开shp文件";
            pOpenFileDialog.Filter = "shp文件(*.shp)|*.shp";
            pOpenFileDialog.ShowDialog();      //获取文件路径,之后是需要的;

            IWorkspaceFactory pWorkspaceFactory;
            IFeatureWorkspace pFeatureWorksapce;
            IFeatureLayer pFeatureLayer;

            string pFullPath = pOpenFileDialog.FileName;
            if (pFullPath == "") return;
            int pIndex = pFullPath.LastIndexOf("\\");
            string pFilePath = pFullPath.Substring(0, pIndex);   //这里需要注意下Substring()的用法,对路径进行截取
            string pFileName = pFullPath.Substring(pIndex + 1);   //截取获得Shape的文件名

            pWorkspaceFactory = new ShapefileWorkspaceFactory();
            pFeatureWorksapce = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(pFilePath, 0);   //

            IFeatureClass pFeatureClass = pFeatureWorksapce.OpenFeatureClass(pFileName);
            pFeatureLayer = new FeatureLayer();
            pFeatureLayer.FeatureClass = pFeatureClass;
            pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
            axMapControl1.ClearLayers();
            axMapControl1.Map.AddLayer(pFeatureLayer);
            axMapControl1.ActiveView.Refresh();

通过上面的代码可以实现shp文件的加载,上述代码中仍旧有部分不太理解,已经进行标注,熟悉之后可能会有所明白。具体的实现逻辑如下图所示,方便代码的记忆():
在这里插入图片描述

4.添加栅格数据

同样在进行添加栅格数据的时候也是需要思考一下逻辑,和之前的矢量数据一致,主要是在栅格数据时需要注意一下影像金字塔的判断和创建。

            OpenFileDialog pOpenFileDialog = new OpenFileDialog();
            pOpenFileDialog.CheckFileExists = true;
            pOpenFileDialog.Title = "打开栅格数据";
            pOpenFileDialog.Filter = "栅格文件(*.*)|*.bmp;*.tif;*.jpg;*.img|(*.bmp)|(*.tif)|(*.jpg)|(*.img)";
            pOpenFileDialog.ShowDialog();

            string pFullPath = pOpenFileDialog.FileName;
            if (pFullPath == "") return;
            string pRasterPath = System.IO.Path.GetDirectoryName(pFullPath);
            string pRasterName = System.IO.Path.GetFileName(pFullPath);

            IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory();
            //IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pRasterPath, 0);
            IRasterWorkspace pRasterWorkspace = (IRasterWorkspace)pWorkspaceFactory.OpenFromFile(pRasterPath, 0);
            //IRasterWorkspace pRasterWorkspace = pWorkspace as IRasterWorkspace;
            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);

效果图如下:
在这里插入图片描述

5.总结

以上主要是参考书本上的一些代码,并添加了部分自己的思考,多记忆和多思考,多练习就可以了。
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值