内容摘要:
本文提供利用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并选中,点击“确定”按钮即可解决。
运行成功结果如下。
欢迎交流🌹🌹