ArcEngine入门开发第2篇:打开/保存Mxd地图文档

内容摘要:

本文提供利用ArcEngine10.7&VS2017设计Windows窗体实现对Mxd地图文档的打开+保存功能,并解决“未找到类型或命名空间名”等的报错,环境配置见上篇:

ArcEngine入门开发第1篇:ArcEngine10.7&VS2017环境配置

本文内容接上篇。

一、开发环境

1.语言:C#

2.编程环境:Visual Studio2017

3.ArcEngine版本:10.7

二、菜单栏设计

在窗体的“文件”菜单下添加两个二级菜单“打开文件”和“保存文件”。

三、丰富ToolbarControl

右键窗体中的ToolbarControl控件,点击“属性”。

在属性对话框中点击“项目”,点击“添加”。

在控件命令对话框的“类别”中选择“地图导航”,双击图标可添加命令至属性框内,添加完成后点击“关闭”按钮退回至属性对话框。点击“确定”按钮。

注意:本文演示选择的命令为放大、缩小、平移、全图功能,只能选择“地图导航”类别中的这些命令进行添加,细心的读者可发现“Scene”类别中同样有类似的放大、缩小、平移、全图等功能的命令,但该类别的功能添加至ToolbarControl控件后不可对显示的地图进行操作。

若要删除某个命令,选中该命令,右键选择“删除”即可。

添加成功后运行结果如下。

四、打开文件功能

双击菜单栏中的“打开文件”,进入Form1.cs,在如下函数中添加代码:

private void 打开文件ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            axMapControl1.LoadMxFile(OpenMxd());
        }

在该函数外添加OpenMxd()函数,确保OpenMxd()函数仍在 public partial class Form1 : Form内:

public string OpenMxd()
        {
            string MxdPath = "";
            OpenFileDialog OpenMXD = new OpenFileDialog();
            OpenMXD.Title = "打开地图";
            OpenMXD.InitialDirectory = "D:";//打开路径
            OpenMXD.Filter = "Map Documents (*.mxd)|*.mxd";
            if (OpenMXD.ShowDialog() == DialogResult.OK)
            {
                MxdPath = OpenMXD.FileName;
            }
            return MxdPath;
        }

五、保存文件功能

双击菜单栏中的“保存文件”,进入Form1.cs,在如下函数中添加代码:

private void 保存文件ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                string sMxdFileName = axMapControl1.DocumentFilename;
                IMapDocument pMapDocument = (IMapDocument)Activator.CreateInstance(Type.GetTypeFromProgID("esriCarto.MapDocument"));
                if (sMxdFileName != null && axMapControl1.CheckMxFile(sMxdFileName))
                {
                    if (pMapDocument.get_IsReadOnly(sMxdFileName))
                    {
                        MessageBox.Show("本地文档是只读的,不能保存!");
                        pMapDocument.Close();
                        return;
                    }
                }
                else
                {
                    SaveFileDialog pSaveFileDialog = new SaveFileDialog();
                    pSaveFileDialog.Title = "请选择保存路径";
                    pSaveFileDialog.OverwritePrompt = true;
                    pSaveFileDialog.Filter = "ArcMap文档(*.mxd)|*.mxd|ArcMap模板(*.mxt)|*.mxt";
                    pSaveFileDialog.RestoreDirectory = true;
                    if (pSaveFileDialog.ShowDialog() == DialogResult.OK)
                    {
                        sMxdFileName = pSaveFileDialog.FileName;
                    }
                    else
                    {
                        return;
                    }
                }

                pMapDocument.New(sMxdFileName);
                pMapDocument.ReplaceContents(axMapControl1.Map as IMxdContents);
                pMapDocument.Save(pMapDocument.UsesRelativePaths, true);
                pMapDocument.Close();
                MessageBox.Show("保存地图文档成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

此时运行代码会报错如下。

这是由于缺少对部分ArcGIS指令的引用,在Form1.cs引用部分添加如下代码可解决:

using ESRI.ArcGIS.Carto;

若仍然如下显示报错不存在类型或命名空间名“Carto”,则右键解决方案资源管理器中“引用”,选择“添加引用”,在打开的引用管理器对话框中点击“扩展”,找到ESRI.ArcGIS.Carto并选中,点击“确定”按钮即可解决。

运行成功结果如下。

欢迎交流🌹🌹

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值