版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 地理與生物信息學(xué)院2014 / 2015 學(xué)年 第 一 學(xué)期GIS軟件設(shè)計(jì)實(shí) 驗(yàn) 報(bào) 告 課程名稱: GIS軟件設(shè)計(jì) 實(shí)驗(yàn)名稱: 小型GIS軟件系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā) 班 級(jí) 學(xué) 號(hào) B12090114 學(xué) 生 姓 名 別小文 指 導(dǎo) 教 師 姜杰 日 期: 2014 年 12 月1、 實(shí)驗(yàn)?zāi)康?基于ArcGIS Engine及C#編程語(yǔ)言構(gòu)建一個(gè)小型GIS平臺(tái)系統(tǒng)。二、實(shí)驗(yàn)內(nèi)容軟件為一個(gè)小型的GIS平臺(tái),主要包括:空間數(shù)據(jù)存取模塊、地圖瀏覽模塊、地圖編輯模塊、空間查詢模塊、空間分析模塊、地圖修飾模塊。(1)空間數(shù)據(jù)存取模塊該模塊實(shí)現(xiàn)對(duì)地圖數(shù)據(jù)的新建、加載、保存、另存和打印輸出對(duì)于地圖的硬拷貝輸出
2、實(shí)現(xiàn)所見(jiàn)即所得效果。(2)地圖瀏覽模塊該模塊主要包括地圖工具、滾動(dòng)條,狀態(tài)條、鷹眼圖、內(nèi)容視圖等。其中地圖工具可以實(shí)現(xiàn)放大、縮小、中心放大、中心縮小、全景視圖、漫游、要素選擇和取消、空間查詢等具體功能。(3)地圖數(shù)據(jù)編輯模塊該模塊能夠?qū)崿F(xiàn)新建圖層、添加圖層、刪除所有圖層、開(kāi)始編輯和結(jié)束編輯的操作。編輯可以對(duì)圖層進(jìn)行創(chuàng)建新特征、修改任務(wù)、移動(dòng)特征和設(shè)置捕捉環(huán)境等操作。(4)空間查詢模塊該模塊實(shí)現(xiàn)的是屬性查詢。(5)空間分析模塊該模塊可以進(jìn)行緩沖區(qū)分析。3、 實(shí)驗(yàn)要求使用ArcGIS Engine和C#、VB.net等編程語(yǔ)言完成任務(wù)。4、 實(shí)驗(yàn)過(guò)程1. 空間數(shù)據(jù)存儲(chǔ)模塊該模塊實(shí)現(xiàn)對(duì)地圖數(shù)據(jù)的新建
3、、加載、保存、另存和打印輸出對(duì)于地圖的硬拷貝輸出實(shí)現(xiàn)所見(jiàn)即所得效果。新建項(xiàng)目a. 啟動(dòng)VS2005,選擇“文件|新建|項(xiàng)目”,在項(xiàng)目類型中選擇Visual C#,再選擇Windows應(yīng)用程序模板,輸入名稱“3bxwMap”,點(diǎn)擊確定。b. 在解決方案管理器中將“Form1.cs”重命名為“3bxwMap.cs”,在設(shè)計(jì)視圖中,選中窗體,將其屬性中的“Text”改為“3bxwMap”。添加控件c.選擇工具箱中的“菜單和工具欄|MenuStrip”,將其拖入窗體。選擇工具箱中的“ArcGIS Windows Forms”節(jié),將“ToolbarControl”控件拖入窗體,并將其屬性中的Dock設(shè)置
4、為T(mén)op。選擇工具箱中的“菜單和工具欄|StatusStrip”,將其拖入到窗體。選擇工具箱中的“容器|SplitContainer”容器拖入窗體,并將其屬性中的Dock設(shè)置為Fill。將TabControl控件拖入Panel1,將Alignment屬性設(shè)置為Bottom,Dock屬性設(shè)置為Fill。點(diǎn)擊TabPages屬性右邊的按鈕,彈出TabPage集合編輯器,將tabPage1的Name設(shè)置為tabPageLayer,Text設(shè)置為圖層,將tabPage2的Name設(shè)置為tabPageProperty,Text設(shè)置為屬性。如下所示。d. 選擇“圖層”選項(xiàng)卡,拖入TOCControl控件,
5、設(shè)置Dock屬性為Fill。選擇“屬性”選項(xiàng)卡,拖入DataGridView控件,設(shè)置Dock屬性為Fill。拖入TabControl控件到Panel2,設(shè)置Dock屬性為Fill。并上述類似的方法,將兩個(gè)選項(xiàng)卡的Name和Text分別設(shè)置為:(tabPageMap、地圖),(tabPageLayout,制版)。選擇“地圖”選項(xiàng)卡,拖入MapControl控件,設(shè)置Dock屬性為Fill。選擇“制版”選項(xiàng)卡,拖入PageLayoutControl控件,設(shè)置Dock屬性為Fill。最后將LicenseControl控件拖入到窗體的任意地方。按F5編譯運(yùn)行??丶壎╡. 分別右擊ToolbarCo
6、ntrol、TOCControl控件,將Buddy設(shè)置為axMapControl1,如下圖所示。添加工具f.右擊ToolbarControl,選擇“屬性|Items”,點(diǎn)擊Add,選擇Commands選項(xiàng)卡中的Generic,雙擊Open、SaveAs、Redo、Undo。添加菜單g. 在設(shè)計(jì)視圖中,單擊菜單欄,出現(xiàn)“請(qǐng)?jiān)诖颂庢I入”的提示,單擊提示鍵入菜單名稱,如“文件”,再單擊“文件”,輸入其下拉子菜單:添加新建( New )、打開(kāi)( Open )、添加數(shù)據(jù)( AddData )、保存( Save )、另存為( SaveAs )、退出( Exit )這些菜單,()內(nèi)為相應(yīng)的 Name 屬性值
7、。h.在屬性面板中的 Image 屬性中設(shè)置菜單圖標(biāo)。單擊 Image 那一行右邊的按鈕,彈出如下菜單。選擇“項(xiàng)目資源文件”,再單擊導(dǎo)入最終效果如下所示。實(shí)現(xiàn)相關(guān)菜單i. 首先定義指針(寫(xiě)在 public partial class Form1 : Form 下面): private ESRI.ArcGIS.Controls.IMapControl3 m_mapControl = null; private ESRI.ArcGIS.Controls.IPageLayoutControl2 m_pageLayoutControl = null; private IMapDocument pMap
8、Document; 添加以下引用: usinrto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.SystemUI; 在設(shè)計(jì)視圖中的屬性面板中,選擇 Form1 ,即主窗體,單擊事件按鈕,打到“ Load ”事件并雙擊,添加此事件。在 Form1_Load 函數(shù)中初始化這些指針: m_mapControl = (IMapControl3)this.axMapControl1.Ob
9、ject; m_pageLayoutControl = (IPageLayoutControl2)this.axPageLayoutControl1.Object;地圖數(shù)據(jù)的新建功能j.在設(shè)計(jì)視圖下,雙擊“文件”菜單下的“新建”,添加菜單響應(yīng)函數(shù)。private void New_Click(object sender, EventArgs e) DialogResult res = MessageBox.Show(" 是 否 保 存 當(dāng) 前 地 圖 ?", " 提 示 ", MessageBoxButtons.YesNo,MessageBoxIcon.
10、Question); if (res = DialogResult.Yes) ICommand command = new ControlsSaveAsDocCommandClass(); if (m_mapControl != null) command.OnCreate(m_controlsSynchronizer.MapControl.Object); else command.OnCreate(m_controlsSynchronizer.PageLayoutControl.Object); command.OnClick(); IMap map = new MapClass(); =
11、 "Map" m_controlsSynchronizer.MapControl.Document = string.Empty; m_controlsSynchronizer.ReplaceMap(map); 加載功能k. 雙擊“文件”菜單下的“添加數(shù)據(jù)”,添加菜單響應(yīng)函數(shù)。private void AddData_Click(object sender, EventArgs e) int currentLayerCount = this.axMapControl1.LayerCount; ICommand pCommand = new ControlsAddDataCo
12、mmandClass(); pCommand.OnCreate(this.axMapControl1.Object); pCommand.OnClick(); 保存功能l. 雙擊“文件”菜單下的“保存”,添加菜單響應(yīng)函數(shù)。private void Save_Click(object sender, EventArgs e) / 首先確認(rèn)當(dāng)前地圖文檔是否有效if (null != m_pageLayoutControl.Document m_mapControl.CheckMx LayoutControl.Document) / 創(chuàng)建一個(gè)新的地圖文檔實(shí)例IMapDocument mapDoc =
13、 new MapDocumentClass(); / 打開(kāi)當(dāng)前地圖文檔mapDoc.Open(m_pageLayoutControl.Document, string.Empty); / 用 PageLayout 中的文檔替換當(dāng)前文檔中的 PageLayout 部分mapDoc.ReplaceContents(IMxdContents)m_pageLayoutControl.PageLayout); / 保存地圖文檔mapDoc.SavesRelativePaths, false); mapDoc.Close(); 另存為功能m. 雙擊“文件”菜單下的“另存為”,添加菜單響應(yīng)函數(shù)。privat
14、e void SaveAs_Click(object sender, EventArgs e) / 調(diào)用另存為命令I(lǐng)Command command = new ControlsSaveAsDocCommandClass(); command.OnCreate(m_controlsSynchronizer.ActiveControl); command.OnClick(); MapControl與PageLayoutControl同步n. 新建同步類ControlsSynchronizer 在解決方案面板中右擊項(xiàng)目名,選擇“添加|類”,在類別中選擇“Visual C#項(xiàng)目項(xiàng)”,在模板中選擇“類”
15、,輸入類名“ControlsSynchronizer.cs”,將以下代碼覆蓋自動(dòng)生成的代碼: using System; using System.Drawing; using System.Collections; usinponentModel; using System.Windows.Forms; using System.IO; using System.Runtime.InteropServices; using ESRI.ArcGIS.esriSystem; usinrto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.System
16、UI; namespace _sdnMap public class ControlsSynchronizer #region class members private IMapControl3 m_mapControl = null; private IPageLayoutControl2 m_pageLayoutControl = null; private ITool m_mapActiveTool = null; private ITool m_pageLayoutActiveTool = null; private bool m_IsMapCtrlactive = true; pr
17、ivate ArrayList m_frameworkControls = null; #endregion #region constructor public ControlsSynchronizer() /初始化ArrayList m_frameworkControls = new ArrayList(); public ControlsSynchronizer(IMapControl3 mapControl, IPageLayoutControl2 pageLayoutControl) : this() /為類成員賦值 m_pageLayoutControl = pageLayoutC
18、ontrol; #endregion #region properties public IMapControl3 MapControl get return m_mapControl; set m_mapControl = value; public IPageLayoutControl2 PageLayoutControl get return m_pageLayoutControl; set m_pageLayoutControl = value; public string ActiveViewType get if (m_IsMapCtrlactive) return "M
19、apControl" else return "PageLayoutControl" public object ActiveControl get if (m_mapControl = null | m_pageLayoutControl = null) throw new Exception("ControlsSynchronizer:ActiveControl:rnEither MapControl or PageLayoutControlare not initialized!"); if (m_IsMapCtrlactive) ret
20、urn m_mapControl.Object; else return m_pageLayoutControl.Object; #endregion #regio public void ActivateMap() try if (m_pageLayoutControl = null | m_mapControl = null) throw new Exception("ControlsSynchronizer:ActivateMap:rnEither MapControl or PageLayoutControl are not initialized!") if (m
21、_pageLayoutControl.CurrentTool != null) m_pageLayoutActiveTool = m_pageLayoutControl.CurrentTool; m_pageLayoutControl.ActiveView.Deactivate(); m_mapControl.ActiveView.Activate(m_mapControl.hWnd); MapControl 的 CurrentTool if (m_mapActiveTool != null) m_mapControl.CurrentTool = m_mapActiveTool; m_IsMa
22、pCtrlactive = true; MapControl this.SetBuddies(m_mapControl.Object); catch (Exception ex) throw new Exception(string.Format("ControlsSynchronizer:ActivateMap:rn0", ex.Message); public void ActivatePageLayout() try if (m_pageLayoutControl = null | m_mapControl = null) Exception("Contro
23、lsSynchronizer:ActivatePageLayout:rnEither MapControlorPageLayoutControl are not initialized!"); if (m_mapControl.CurrentTool != null) m_mapActiveTool = m_mapControl.CurrentTool; m_mapControl.ActiveView.Deactivate(); m_pageLayoutControl.ActiveView.Activate(m_pageLayoutControl.hWnd); if (m_pageL
24、ayoutActiveTool != null) m_pageLayoutControl.CurrentTool = m_pageLayoutActiveTool; m_IsMapCtrlactive = false; this.SetBuddies(m_pageLayoutControl.Object); catch (Exception ex) throw new Exception(string.Format("ControlsSynchronizer:ActivatePageLayout:rn0", ex.Message); public void ReplaceM
25、ap(IMap newMap) if (newMap = null) throw new Exception("ControlsSynchronizer:ReplaceMap:rnNew map for replacement is not initialized!"); if (m_pageLayoutControl = null | m_mapControl = null) throw new Exception("ControlsSynchronizer:ReplaceMap:rnEither MapControl or PageLayoutControl
26、are not initialized!"); IMaps maps = new Maps(); maps.Add(newMap); bool bIsMapActive = m_IsMapCtrlactive; this.ActivatePageLayout(); m_pageLayoutControl.PageLayout.ReplaceMaps(maps); m_mapControl.Map = newMap; m_pageLayoutActiveTool = null; m_mapActiveTool = null; if (bIsMapActive) this.Activat
27、eMap(); m_mapControl.ActiveView.Refresh(); else this.ActivatePageLayout(); m_pageLayoutControl.ActiveView.Refresh(); public void BindControls(IMapControl3 mapControl, IPageLayoutControl2 pageLayoutControl, bool activateMapFirst) if (mapControl = null | pageLayoutControl = null) throw new Exception(&
28、quot;ControlsSynchronizer:BindControls:rnEither MapControl or PageLayoutControl are not initialized!"); m_mapControl = MapControl; m_pageLayoutControl = pageLayoutControl; this.BindControls(activateMapFirst); public void BindControls(bool activateMapFirst) if (m_pageLayoutControl = null | m_map
29、Control = null) throw new Exception("ControlsSynchronizer:BindControls:rnEither MapControl or PageLayoutControl are not initialized!"); IMap newMap = new MapClass(); = "Map" IMaps maps = new Maps(); maps.Add(newMap); m_pageLayoutControl.PageLayout.ReplaceMaps(maps); m_mapControl.
30、Map = newMap; m_pageLayoutActiveTool = null; m_mapActiveTool = null; if (activateMapFirst) this.ActivateMap(); else this.ActivatePageLayout(); public void AddFrameworkControl(object control) if (control = null) throw new Exception("ControlsSynchronizer:AddFrameworkControl:rnAdded control is not
31、 initialized!"); m_frameworkControls.Add(control); public void RemoveFrameworkControl(object control) if (control = null) throw new Exception("ControlsSynchronizer:RemoveFrameworkControl:rnControl to be removed is not initialized!"); m_frameworkControls.Remove(control); public void Re
32、moveFrameworkControlAt(int index) if (m_frameworkControls.Count < index) throw new Exception("ControlsSynchronizer:RemoveFrameworkControlAt:rnIndex is out of range!"); m_frameworkControls.RemoveAt(index); private void SetBuddies(object buddy) try if (buddy = null) throw new Exception(&q
33、uot;ControlsSynchronizer:SetBuddies:rnTarget Buddy Control is not initialized!"); foreach (object obj in m_frameworkControls) if (obj is IToolbarControl) (IToolbarControl)obj).SetBuddyControl(buddy); else if (obj is ITOCControl) (ITOCControl)obj).SetBuddyControl(buddy); catch (Exception ex) thr
34、ow new Exception(string.Format("ControlsSynchronizer:SetBuddies:rn0", ex.Message); #endregion 新建 Maps 類在同步類中,要用到 Maps 類,用于管理地圖對(duì)象。與新建同步類 ControlsSynchronizer 類似,我們新建一 Maps 類,其所有代碼如下所示:using System;using System.Collections;using System.Collections.Generic;using System.Text;using System.Runti
35、me.InteropServices;usinrto;namespace _sdnMap Guid("f27d8789-fbbc-4801-be78-0e3cd8fff9d5") ClassInterface(ClassInterfaceType.None) ProgId("_sdnMap.Maps") public class Maps : IMaps, IDisposable /class member - using internally an ArrayList to manage the Maps collection private Arra
36、yList m_array = null; #region class constructor public Maps() m_array = new ArrayList(); #endregion #region IDisposable Members public void Dispose() if (m_array != null) m_array.Clear(); m_array = null; #endregion #region IMaps Members public void RemoveAt(int Index) if (Index > m_array.Count |
37、Index < 0) throw new Exception("Maps:RemoveAt:rnIndex is out of range!"); m_array.RemoveAt(Index); public void Reset() m_array.Clear(); public int Count get return m_array.Count; public IMap get_Item(int Index) if (Index > m_array.Count | Index < 0) throw new Exception("Maps:
38、get_Item:rnIndex is out of range!"); return m_arrayIndex as IMap; public void Remove(IMap Map) m_array.Remove(Map); public IMap Create() IMap newMap = new MapClass(); m_array.Add(newMap); return newMap; public void Add(IMap Map) if (Map = null) throw new Exception("Maps:Add:rnNew Map is mo
39、t initialized!"); m_array.Add(Map); #endregion 兩種視圖的同步在 3bxwMap.cs 中添加成員變量,即同步類對(duì)象: private ControlsSynchronizer m_controlsSynchronizer = null; 在 Form1_Load 函數(shù)中進(jìn)行初始化工作: controls synchronization calssm_controlsSynchronizer = new ControlsSynchronizer(m_mapControl, m_pageLayoutControl); m_controlsSynchronizer.BindControls(true); m_controlsSynchronizer.AddFrameworkControl(axToolbarControl1.Object); m_controlsSynchronizer.AddFrameworkControl(this.axTOCControl1.Object); OpenNewMapDocument openMapDoc = new OpenNewMapDocument(m_controlsSynchronizer); axToolbarControl1.AddItem(openMa
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版白酒品牌二批經(jīng)銷商產(chǎn)品定制合同3篇
- 四年級(jí)數(shù)學(xué)(四則混合運(yùn)算)計(jì)算題專項(xiàng)練習(xí)與答案
- 二零二五年電子商務(wù)平臺(tái)采購(gòu)計(jì)劃編制合同3篇
- 現(xiàn)代學(xué)校心理健康教育策略及師資能力要求
- 2025年北師大版選擇性必修3物理上冊(cè)月考試卷含答案
- 2025年華師大新版七年級(jí)地理上冊(cè)階段測(cè)試試卷含答案
- 2025年上外版選擇性必修1歷史上冊(cè)月考試卷含答案
- 2025年冀教版共同必修2物理上冊(cè)階段測(cè)試試卷含答案
- 廣告租賃協(xié)議
- 2025年人教版三年級(jí)語(yǔ)文下冊(cè)月考試卷含答案
- 國(guó)家自然科學(xué)基金項(xiàng)目申請(qǐng)書(shū)
- 電力電纜故障分析報(bào)告
- 中國(guó)電信網(wǎng)絡(luò)資源管理系統(tǒng)介紹
- 2024年浙江首考高考選考技術(shù)試卷試題真題(答案詳解)
- 《品牌形象設(shè)計(jì)》課件
- 倉(cāng)庫(kù)管理基礎(chǔ)知識(shí)培訓(xùn)課件1
- 藥品的收貨與驗(yàn)收培訓(xùn)課件
- GH-T 1388-2022 脫水大蒜標(biāo)準(zhǔn)規(guī)范
- 高中英語(yǔ)人教版必修第一二冊(cè)語(yǔ)境記單詞清單
- 政府機(jī)關(guān)保潔服務(wù)投標(biāo)方案(技術(shù)方案)
- HIV感染者合并慢性腎病的治療指南
評(píng)論
0/150
提交評(píng)論