《ArcGIS Engine开发 从入门到精通》学习笔记1 地图的加载与保存。
照着书上敲完了两个主要函数的代码,先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 地图的加载与保存。相关推荐
- python web开发入门_python大佬整理的python web开发从入门到精通学习笔记
原标题:python大佬整理的python web开发从入门到精通学习笔记 Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通 ...
- Revit二次开发从入门到精通学习之路, (含Revit二次开发教程下载)
Revit二次开发从入门到精通学习之路 Autodesk Joe Ye叶雄进 2. 18 2014 yexiongjin@hotmail.com Revit在国内的应用越来越广泛, Revit ...
- 第1课 EOS开发从入门到精通学习导航
第1课 EOS开发从入门到精通学习导航 柚子(EOS)可以理解为Enterprise Operation System,即为商用分布式应用设计的一款区块链操作系统.EOS是EOS软件引入的一种新的区块 ...
- Revit二次开发从入门到精通学习之路
Revit的在国内的应用越来越广泛, Revit 2011在速度和功能上有显著的提高,所以现在对Revit应用关注更多.Revit二次开发亦受到大量的关注和评估,许多国内朋友想了解学习 Revit 二 ...
- mysql数据库应用_MySQL数据库应用 从入门到精通 学习笔记
以下内容是学习<MySQL数据库应用 从入门到精通>过程中总结的一些内容提要,供以后自己复现使用. 一:数据库 查看所有数据库:SHOW DATABASES 创建数据库:CREATE DA ...
- 黑马程序员新版Linux零基础快速入门到精通——学习笔记
01初识Linux 1.1.操作系统概述 1.1.1.硬件和软件 我们所熟知的计算机是由硬件和软件组成的. 硬件: 计算机系统中由电子.机械和光电元件等组成的各种物理装置的总称. (看的见.摸得着 ...
- MySQL8从入门到精通学习笔记
MySQL8学习笔记 MySQL8从入门到精通 1.数据库操作 1.1 创建数据库 1.2 查看数据库 1.3 删除数据库 1.4 选择数据库 2.数据表操作 2.1 创建数据表 2.2 查看表 2. ...
- 基金投资好简单,从入门到精通 -学习笔记day1
本系列笔记是我通过在喜马拉雅平台,跟随"威尼斯摆渡人"出品的"基金投资好简单,入门到精通"系列时学习记录的笔记,如果大家对基金投资感兴趣,并不知道怎么入手的话, ...
- WMS学习笔记:1.尝试加载WMS
1.首先找一个可用的WMS栅格地图服务:http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi 获取GetCapabilities: http://de ...
最新文章
- 内存溢出和内存泄漏的区别、产生原因以及解决方案
- Hibernate:映射文件元素属性说明
- 3月25日 JavaScript
- 简单计算器 逆波兰表达式
- CMU Deep Learning 2018 by Bhiksha Raj 学习记录(8)
- mongodb ssl java_MongoDB自签名SSL连接:SSL对等证书验证失败
- PHP for 循环
- Asp.net core 通过Models 生成数据库的方法
- 基于Verilog的简易计算器
- 常微分方程的近似计算和误差估计(2)
- COMSOL 固体力学 第一主应力、第二主应力、第三主应力、径向应力、环向应力、切向应力 截面一维曲线
- GPS测量原理及应用 知识总结
- 数据库时间慢了14个小时,Mybatis说,这个锅我不背~
- 金蝶K3修改核算项目锁定字段的默认长度(以物料主数据的助记码为例)
- vps mysql_vps mysql自动关闭
- 你一定要看的安装及卸载测试用例的步骤及方法总结
- 检测点云中的目标(ROS2 Tao-PointPillars)
- Android动态申请Camera权限应用闪退问题
- 试问甘心从年少轻狂到一事无成吗?
- Systemd 技术原理实践