ArcGIS_Engine+C_实例开发教程.pdf
《ArcGIS_Engine+C_实例开发教程.pdf》由会员分享,可在线阅读,更多相关《ArcGIS_Engine+C_实例开发教程.pdf(85页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ArcGIS Engine+C#实 例 开 发 教 程 第 一 讲:桌 面 GIS应 用 程 序 框 架 的 建 立 本 讲 主 要 是 使 用 MapControl PageLayoutControR ToolbarControK TOCControl 四 个 控 件 建 立 起 基 本 的 桌 面 GIS应 用 程 序 框 架。最 终 成 果 预 览 如 下:1、新 建 项 目 启 动 VS2005,选 择“文 件|新 建 I项 目”,在 项 目 类 型 中 选 择 Visual C#,再 选 择 Windows应 用 程 序 模 板,输 入 名 称“3sdnMap”,点 击 确 定。田
2、园 新 建 项 目 在 解 决 方 案 管 理 器 中 将“Forml.cs”重 命 名 为“3sdnMap.cs”,在 设 计 视 图 中,选 中 窗 体,将 其 属 性 中 的“Text”改 为“3sdnMap”。2、添 加 控 件 选 择 工 具 箱 中 的“菜 单 和 工 具 栏 I MenuStrip”,将 其 拖 入 窗 体。选 择 工 具 箱 中 的 ArcGIS Windows Forms 节,将 ToolbarControl”控 件 拖 入 窗 体,并 将 其 属 性 中 的 Dock设 置 为 Top。选 择 工 具 箱 中 的“菜 单 和 工 具 栏 I StatusSt
3、rip”,将 其 拖 入 到 窗 体。选 择 工 具 箱 中 的“容 器 ISplitContainer”容 器 拖 入 窗 体,并 将 其 属 性 中 的 Dock设 置 为 Fillo将 TabControl控 件 拖 入 Panel 1,将 Alignment属 性 设 置 为 Bottom,Dock属 性 设 置 为 Fill。点 击 TabPages属 性 右 边 的 按 钮,弹 出 TabPage集 合 编 辑 器,将 tabPage 1 的 Name设 置 为 tabPageLayer,Text 设 置 为 图 层,将 tabPage2 的 Name 设 置 为 tabPageP
4、roperty,Text设 置 为 属 性。如 下 所 示。选 择“图 层”选 项 卡,拖 入 TOCControl控 件,设 置 Dock属 性 为 FilL选 择“属 性”选 项 卡,拖 入 DataGridView控 件,设 置 Dock属 性 为 Fill。拖 入 TabControl控 件 到 Panel2,设 置 Dock属 性 为 Fill,并 上 述 类 似 的 方 法,将 两 个 选 项 卡 的 Name和 Text分 别 设 置 为:(tabPageMap、地 图),(tabPageLayout,制 版)。选 择“地 图”选 项 卡,拖 入 MapControl控 件,设
5、置 Dock属 性 为 Fill。选 择 制 版 选 项 卡,拖 入 PageLayoutControl控 件,设 置 Dock属 性 为 Fill。最 后 将 LicenseControl控 件 拖 入 到 窗 体 的 任 意 地 方。按 F5编 译 运 行,可 以 看 到 刚 才 布 局 好 的 程 序 界 面 了。3、控 件 绑 定 通 过 以 上 步 骤 添 加 的 控 件 还 只 是 单 独 存 在,而 我 们 的 程 序 需 要 各 控 件 间 协 同 工 作,因 此 要 进 行 控 件 绑 定。分 别 右 击 ToolbarControl、TOCControl 控 件,将 Bud
6、dy 设 置 为 axMapControll,如 下 图 所 示。这 样,工 具 条 和 图 层 控 件 就 与 地 图 控 件 关 联 了。4、添 加 工 具 此 时,工 具 条 中 还 没 有 任 何 工 具,添 加 的 方 法 也 很 简 单。右 击 ToolbarControl,选 择 属 性|Items”,点 击 Add,选 择 Commands选 项 卡 中 的 Generic,双 击 Open、SaveAs、Redo、Undo即 可 将 相 应 工 具 添 加 到 工 具 条。常 见 的 工 具 有:Map Navigation中 的 导 航 工 具,Map Inquiry中 的
7、 查 询 工 具,Feature Selection中 的 选 择 工 具,你 可 以 根 据 需 要 酌 情 添 加 工 具。5、编 译 运 行 按 F5即 可 编 译 运 行 程 序,至 此 桌 面 GIS应 用 程 序 框 架 基 本 框 架 已 经 搭 建 好 了,你 可 以 通 过 工 具 条 的 工 具 打 开 地 图 文 档,浏 览 地 图 了,效 果 如 开 篇 所 示。第 二 讲 菜 单 的 添 加 及 其 实 现 在 上 一 讲 中,我 们 实 现 了 应 用 程 序 基 本 框 架,其 中 有 个 小 错 误,在 此 先 跟 大 家 说 明 下。在“属 性”选 项 卡 中
8、,我 们 当 时 添 加 的 是 DataGridView控 件,这 个 控 件 是 用 来 显 示 数 据 表 的,而 专 门 用 于 属 性 的 查 询 和 设 置 的 控 件 是 PropertyGrid控 件。因 此 请 你 删 除 属 性 选 项 卡 中 的 DataGridView控 件,再 把 位 于“工 具 箱|所 有 Windows窗 体|PropertyGrid(如 果 没 有,右 击 选 择“选 择 项”以 添 加 此 控 件)控 件 拖 到 该 选 项 卡。在 这 一 讲 中,主 要 讲 解 菜 单 的 添 加 和 实 现。1、添 加 菜 单 在 设 计 视 图 中,单
9、 击 菜 单 栏,会 出 现“请 在 此 处 键 入”的 提 示,单 击 提 示 就 可 以 键 入 菜 单 名 称,如“文 件”,再 单 击“文 件”,即 可 输 入 其 下 拉 子 菜 单,如 下 所 示:imgjfile:/C:/Documents%20and%20Settings/Administrator/Local%20Settings/Temporary%20Internet%20Files/Content.IE5/WVUJQZMD/20090512083746513%5Bl%5D.jpg/imgTips:每 创 建 一 个 菜 单,请 在 其 属 性 面 板 中 设 置 Nam
10、e属 性,而 且 不 要 为 中 文,因 此 Name值 将 是 此 菜 单 响 应 函 数 的 函 数 名 的 一 部 分,带 中 文 的 函 数 名,总 是 不 好 吧。本 讲 中,我 们 将 添 加 新 建(New)、打 开(Open)、添 加 数 据(AddData)、保 存(Save)、另 存 为(SaveAs)、退 出(Exit)这 些 菜 单,()内 为 相 应 的 Name属 性 值。Tips:你 可 以 在 属 性 面 板 中 的 Text属 性 中,把 菜 单 名 设 置 为 中 英 文 形 式,如“打 开 Open”,带 下 划 线 的 0 表 示 此 项 菜 单 的 快
11、 捷 键 是 字 母 0,设 置 方 法 是 在 相 应 字 母 前 加 上“&”字 符,如“打 开&0pen”。但 这 种 快 捷 键 只 在 打 开 此 下 拉 菜 单 时 才 有 效,即 当 你 单 击“文 件”菜 单 弹 出 下 拉 菜 单 时,按 下 字 母 0 就 可 以 定 位 到“打 开”菜 单。还 有 一 种 在 程 序 运 行 时 都 有 效 的 全 局 快 捷 键,可 以 在 属 性 面 板 中 的“ShortCutKeys”中 设 置。你 还 可 以 在 属 性 面 板 中 的 Image属 性 中 设 置 你 喜 欢 的 菜 单 图 标。单 击 Image那 行 右
12、边 的 按 钮,弹 出 如 下 菜 单。选 择“项 目 资 源 文 件”,再 单 击 导 入 就 可 以 选 择 你 的 图 标 了。选 择 黄 源 项 目 资 源 文 件 9:资 源 上 下 文 O 本 地 资 源(L):e,x(M,|I 港 阵 E导 入;&最 终 效 果 如 下 所 示。/朝 口 冉 触 一,一-新 建 N ew ontrol打 开 Open添 加 数 据 Add Data保 存 Save另 存 为 Save As地 图 制 版 SArcGIS EName:i退 出 E xit!.:.年 注 意,在 解 决 方 案 面 板 中,选 中 刚 才 添 加 的 所 有 图 标,
13、在 其 属 性 面 板 中 将 生 成 操 作 设 置 为“嵌 入 的 资 源”,这 一 点 很 重 要!2、实 现 相 关 菜 单 首 先 定 义 指 针(写 在 public partial class Forml:Form下 面 即 可):private ESRI.ArcGIS.Controls.IMapControl3 m mapControl=null;private ESRL ArcGIS.Controls.IPageLayoutControl2 m pageLayoutControl=null;private IMapDocument pMapDocument;若 以 上 指 针
14、 无 效,请 添 加 以 卜.引 用:using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.SystemUI;在 设 计 视 图 中 的 属 性 面 板 中,选 择 Forml,即 主 窗 体,单 击 事 件 按 钮(闪 电 形 状 的 那 个 按 钮),打 到“Load”事 件 并 双 击,添 加 此 事 件。在 Forml_Load函 数 中 初
15、 始 化 这 些 指 针:/取 得 MapControl 和 PageLayoutControl 的 引 用 m_mapControl=(IMapControl3)this.axMapControll.Object;m_pageLayoutControl=(IPageLayoutControl2)this.axPageLayoutControl1.Object;依 次 双 击 每 个 菜 单 项,添 加 菜 单 响 应 函 数。实 现 代 码 如 下:/新 建 地 图 命 令/private void New_Click(object sender,EventArgs e)(/本 命 令 涉
16、及 到 MapControl和 PageLayoutControl同 步 问 题,将 在 下 一 讲 中 实 现)/打 开 地 图 文 档 Mxd命 令/private void Open_Click(object sender,EventArgs e)(/本 命 令 涉 及 到 MapControl和 PageLayoutControl同 步 问 题,将 在 下 一 讲 中 实 现)/添 加 数 据 命 令/private void AddData_Click(object sender,EventArgs e)(int currentLayerCount=this.axMapControl
17、l.LayerCount;ICommand pCommand=new ControlsAddDataCommandClass();pCommand.OnCreate(this.axMapControll.Object);pCommand.OnClick();)/保 存 地 图 文 档 命 令/private void Save_Click(object sender,EventArgs e)(/首 先 确 认 当 前 地 图 文 档 是 否 有 效 if(null!=m_pageLayoutControl.DocumentFilename&m_mapControl.CheckMxFile(m_
18、pageLayoutControl.DocumentFilename)(/创 建 一 个 新 的 地 图 文 档 实 例 IMapDocument mapDoc=new MapDocumentClass();/打 开 当 前 地 图 文 档 mapDoc.Open(m_pageLayoutControl.DocumentFilename,string.Empty);/用 PageLayout中 的 文 档 替 换 当 前 文 档 中 的 PageLayout部 分 mapDoc.ReplaceContents(IMxdContents)m_pageLayoutControl.PageLayou
19、t);/保 存 地 图 文 档 mapDoc.Save(mapDoc.UsesRelativePaths,false);mapDoc.Close();)/另 存 为 地 图 文 档 命 令/private void SaveAs_Click(object sender,EventArgs e)/调 用 另 存 为 命 令 ICommand command=new ControlsSaveAsDocCommandClassO;command.OnCreate(m_controlsSynchronizer.ActiveControl);command.OnClickO;)/退 出 程 序/priv
20、ate void Exit_Click(object sender,EventArgs e)(Application.Exit();3、编 译 运 行 按 F 5 编 译 运 行 程 序。也 许 你 会 发 现,菜 单 命 令 的 实 现 方 式 都 是 类 型 的。没 错,在 AE9.2中,内 置 了 许 多 常 用 的 Command 和 Tool,如 ControlsAddDataCommandClass、ControlsMapZoomlnToolClass、ControlsMapPanToolClass 等 等,这 些 内 置 对 象 在 ESRI.ArcGIS.Controls命 名
21、 空 间 中,你 可 以 对 象 浏 览 器 中 查 看。而 且 这 些 内 置 对 象 的 调 用 方 式 都 类 似,如 下 所 示:/定 义 ICommand command=new ControlsSaveAsDocCommandClassO;/创 建 command.OnCreate(m_controlsSynchronizer.ActiveControl);/调 用 command.OnClickO;第 三 讲 MapControl 与 PageLayoutControl 同 步(一)在 ArcMap中,能 够 很 方 面 地 进 行 MapView和 Layout View两 种
22、 视 图 的 切 换,而 且 二 者 之 间 的 数 据 是 同 步 显 示 的。关 于 两 种 视 图 同 步 的 实 现 方 法 有 多 种,可 以 使 用 ObjectCopy对 象 进 行 数 据 硬 拷 贝,而比 较 简 单 的 方 法 莫 过 于 二 者 共 享 一 份 地 图 了,这 也 是 最 常 用 的 方 法。1、新 建 同 步 类 ControlsSynchronizer在 解 决 方 案 面 板 中 右 击 项 目 名,选 择“添 加 I类”,在 类 别 中 选 择“Visual C#项 目 项”,在 模 板 中 选 择“类”,输 入 类 名 ControlsSynch
23、ronizer.cs”,将 以 下 代 码 覆 盖 自 动 生 成 的 代 码:using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.10;using System.Runtime.InteropServices;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.Ar
24、cGIS.SystemUI;namespace _sdnMap(/This class is used to synchronize a gven PageLayoutControl and aMapControl./When initialized,the user must pass the reference of these control tothe class,bind/the control together by calling BindControls which in turn sets ajoined Map referenced/by both control;and
25、set all the buddy controls joined between thesetwo controls./When alternating between the MapControl and PageLayoutControl,youshould activate the visible control/and deactivate the other by calling ActivateXXX./This calss is limited to a situation where the controls are notsimultaneously visible./pu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ArcGIS_Engine C_ 实例 开发 教程
限制150内