照着书上敲完了两个主要函数的代码,先mark一下,以备下次偷懒。

using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;

private void LoadMapDocument()
{
System.Windows.Forms.OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "打开地图文档";
openFileDialog.Filter = "map documents (*.mxd)|*.mxd";
openFileDialog.ShowDialog();
string filePath = openFileDialog.FileName;
if (axMapControl1.CheckMxFile(filePath))
{
axMapControl1.MousePointer = ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerHourglass;
axMapControl1.LoadMxFile(filePath, 0, Type.Missing);
axMapControl1.MousePointer = ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerDefault;
}
else
{
MessageBox.Show(filePath + "不是有效的地图文档!");
}
}

private void LoadMapDocument2()
{
System.Windows.Forms.OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "打开地图文档";
openFileDialog.Filter = "map documents (*.mxd)|*.mxd";
openFileDialog.ShowDialog();
string filePath = openFileDialog.FileName;
if (axMapControl1.CheckMxFile(filePath))
{
ESRI.ArcGIS.esriSystem.IArray arrayMap = axMapControl1.ReadMxMaps(filePath, Type.Missing);
ESRI.ArcGIS.Carto.IMap map;
for (int i = 0; i < arrayMap.Count; i++)
{
map = arrayMap.get_Element(i) as ESRI.ArcGIS.Carto.IMap;
if (map.Name == "Layers")
{
axMapControl1.MousePointer = ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerHourglass;
axMapControl1.LoadMxFile(filePath, 0, Type.Missing);
axMapControl1.MousePointer = ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerDefault;
break;
}
}
}
else
{
MessageBox.Show(filePath + "不是有效的地图文档!");
}
}

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
LoadMapDocument();
}

private void button2_Click(object sender, EventArgs e)
{
LoadMapDocument2();
}

敲完代码之后报错:

error CS0246: 未能找到类型或命名空间名称“IArray”(是否缺少 using 指令或程序集引用?)

error CS0246: 未能找到类型或命名空间名称“IMap”(是否缺少 using 指令或程序集引用?)

百度了一下,是缺少类库引用,那么问题来了,明明引用中已经添加了这个,还是报错、

然后又积(wu)极(chi)的百度了一下,原来C#的引用文件夹与使用using的区别是大大的!

引用文件夹引用的是目标文件:当程序需要使用外部库的时候,引用文件夹向编译器说明:我正在使用外部类库,并且告之这个外部类库的位置。

using引用的是目标内容:这个才是我们正常遇到的添加引用,不对,准确的说应该是使用这个命名空间,这样的话,就可以直接调用我想要的内容。

举例来说:

我是用的IArray和IMap是包含在ESRI.ArcGIS.esriSystem和ESRI.ArcGIS.Carto里面的。

我添加了引用文件夹表示我现在就可以使用这两个类库了,同样的我也就可以使用这两个变量类型了。

但是,现实是当我使用它们的时候还是报错,IArray和IMap没有声明。

原因就是,虽然我告诉了编译器,我要是用这两个类库,但是编译器只认识这两个类库,并不认识IArray和IMap。

所以我就需要添加using ESRI.ArcGIS.esriSystem 和using ESRI.ArcGIS.Carto,这样的话我就可以使用它们了。

当然不引用这两个类库也是可以的,在使用的时候,ESRI.ArcGIS.esriSystem.IArray和ESRI.ArcGIS.Carto.Imap就可以了。

这个不用说明了吧,std::cout<< "hello world!"<<std::endl;想必大家都用过!

最后展示一下效果。

最后再唠叨一句,那个第二个加载函数的代码我是照着书上抄的,发现并不能实现效果,我也看不懂这段代码是要干什么,暂时用不上,所以弃之不理!

采用IMapDocument类型进行地图文件的加载,保存和另存为。

namespace 地图的保存
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}

IMapDocument mapDoc;
private void loadMapDoc()
{
mapDoc = new MapDocumentClass();
try
{
System.Windows.Forms.OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "打开地图文档";
openFileDialog.Filter = "map documents (*.mxd)|*.mxd";
openFileDialog.ShowDialog();
string filePath = openFileDialog.FileName;
mapDoc.Open(filePath, "");
for (int i = 0; i < mapDoc.MapCount; i++)
{
axMapControl1.Map = mapDoc.get_Map(i);
}
axMapControl1.Refresh();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}

private void saveDoc()
{
if (mapDoc.get_IsReadOnly(mapDoc.DocumentFilename) == true)
{
MessageBox.Show("地图文档只读,无法保存!");
}
else
{
try
{
mapDoc.Save(mapDoc.UsesRelativePaths, true);
MessageBox.Show("保存地图文档成功!");
}
catch (Exception e)
{
MessageBox.Show("保存地图文档失败" + e.ToString());
}
}
}

private void saveAsDoc()
{
if (mapDoc.get_IsReadOnly(mapDoc.DocumentFilename) == true)
{
MessageBox.Show("地图文档只读,无法保存!");
}
else
{
try
{
System.Windows.Forms.SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Title = "保存地图文档";
saveFileDialog.FileName = "new.mxd";
saveFileDialog.Filter = "map documents (*.mxd)|*.mxd";
saveFileDialog.ShowDialog();
string filePath = saveFileDialog.FileName;
mapDoc.SaveAs(filePath, true, true);
MessageBox.Show("保存地图文档成功!");
}
catch (Exception e)
{
MessageBox.Show("保存地图文档失败" + e.ToString());
}
}
}
private void button1_Click(object sender, EventArgs e)
{
loadMapDoc();
}

private void button2_Click(object sender, EventArgs e)
{
saveDoc();
}

private void button3_Click(object sender, EventArgs e)
{
saveAsDoc();
}

编译之后发现报错。

IMapDocument m_MapDocument = new ESRI.ArcGIS.Carto.MapDocumentClass();

报错:

无法嵌入互操作类型"ESRI.ArcGIS.Carto.MapDocumentClass".请改用适用的接口.

解决方案如下:

解决方案——项目——引用——ESRI.ArcGIS.Carto

右键ESRI.ArcGIS.Carto ——属性——嵌入互操作类型=false

转自:http://theseaanna.blog.163.com/blog/static/1997180092011101984414974/

转载于:https://www.cnblogs.com/Zzitai/p/5045545.html

《ArcGIS Engine开发 从入门到精通》学习笔记1 地图的加载与保存。相关推荐

  1. python web开发入门_python大佬整理的python web开发从入门到精通学习笔记

    原标题:python大佬整理的python web开发从入门到精通学习笔记 Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通 ...

  2. Revit二次开发从入门到精通学习之路, (含Revit二次开发教程下载)

    Revit二次开发从入门到精通学习之路 Autodesk Joe Ye叶雄进 2. 18 2014    yexiongjin@hotmail.com Revit在国内的应用越来越广泛, Revit ...

  3. 第1课 EOS开发从入门到精通学习导航

    第1课 EOS开发从入门到精通学习导航 柚子(EOS)可以理解为Enterprise Operation System,即为商用分布式应用设计的一款区块链操作系统.EOS是EOS软件引入的一种新的区块 ...

  4. Revit二次开发从入门到精通学习之路

    Revit的在国内的应用越来越广泛, Revit 2011在速度和功能上有显著的提高,所以现在对Revit应用关注更多.Revit二次开发亦受到大量的关注和评估,许多国内朋友想了解学习 Revit 二 ...

  5. mysql数据库应用_MySQL数据库应用 从入门到精通 学习笔记

    以下内容是学习<MySQL数据库应用 从入门到精通>过程中总结的一些内容提要,供以后自己复现使用. 一:数据库 查看所有数据库:SHOW DATABASES 创建数据库:CREATE DA ...

  6. 黑马程序员新版Linux零基础快速入门到精通——学习笔记

    01初识Linux 1.1.操作系统概述 1.1.1.硬件和软件 我们所熟知的计算机是由硬件和软件组成的. 硬件: 计算机系统中由电子.机械和光电元件等组成的各种物理装置的总称. ​ (看的见.摸得着 ...

  7. MySQL8从入门到精通学习笔记

    MySQL8学习笔记 MySQL8从入门到精通 1.数据库操作 1.1 创建数据库 1.2 查看数据库 1.3 删除数据库 1.4 选择数据库 2.数据表操作 2.1 创建数据表 2.2 查看表 2. ...

  8. 基金投资好简单,从入门到精通 -学习笔记day1

    本系列笔记是我通过在喜马拉雅平台,跟随"威尼斯摆渡人"出品的"基金投资好简单,入门到精通"系列时学习记录的笔记,如果大家对基金投资感兴趣,并不知道怎么入手的话, ...

  9. WMS学习笔记:1.尝试加载WMS

    1.首先找一个可用的WMS栅格地图服务:http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi 获取GetCapabilities: http://de ...

最新文章

  1. 内存溢出和内存泄漏的区别、产生原因以及解决方案
  2. Hibernate:映射文件元素属性说明
  3. 3月25日 JavaScript
  4. 简单计算器 逆波兰表达式
  5. CMU Deep Learning 2018 by Bhiksha Raj 学习记录(8)
  6. mongodb ssl java_MongoDB自签名SSL连接:SSL对等证书验证失败
  7. PHP for 循环
  8. Asp.net core 通过Models 生成数据库的方法
  9. 基于Verilog的简易计算器
  10. 常微分方程的近似计算和误差估计(2)
  11. COMSOL 固体力学 第一主应力、第二主应力、第三主应力、径向应力、环向应力、切向应力 截面一维曲线
  12. GPS测量原理及应用 知识总结
  13. 数据库时间慢了14个小时,Mybatis说,这个锅我不背~
  14. 金蝶K3修改核算项目锁定字段的默认长度(以物料主数据的助记码为例)
  15. vps mysql_vps mysql自动关闭
  16. 你一定要看的安装及卸载测试用例的步骤及方法总结
  17. 检测点云中的目标(ROS2 Tao-PointPillars)
  18. Android动态申请Camera权限应用闪退问题
  19. 试问甘心从年少轻狂到一事无成吗?
  20. Systemd 技术原理实践

热门文章

  1. 项目组 eslint 统一配置及疑难解决
  2. 接入萤石云的踩坑问题
  3. 文本语音朗读电子书 2005 免费
  4. Android弹出选项框及指示箭头动画选择
  5. 看到文件大小 xxKB 懵了
  6. 机械专业中计算机的应用情况,CAD技术在机械工程设计中的应用
  7. xp下如何配置php,windows xp下 如何配置 php
  8. 区块链手机,是创新还是炒作
  9. verilog数值计算-有符号数和无符号数
  10. ID选择器和类选择器的合理使用