版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、GIS程序設(shè)計實習(xí)實習(xí)指導(dǎo)書一、實習(xí)目的通過GIS程序設(shè)計實習(xí),使學(xué)生了解需求分析、項目管理方案設(shè)計、系統(tǒng)總體設(shè)計以及系統(tǒng)詳細(xì)設(shè)計、系統(tǒng)實施、運行和維護(hù)等階段要完成的具體工作;掌握在C#和ArcEngine環(huán)境下構(gòu)建應(yīng)用型地理信息系統(tǒng)的方法。二、實習(xí)的內(nèi)容與要求l 熟悉開發(fā)環(huán)境:Visual Studio 2010; C#; Arc Engine 10.1l 功能需求分析l 基于組件技術(shù)開發(fā)應(yīng)用型地理信息系統(tǒng)組件式技術(shù)已成為當(dāng)今軟件技術(shù)的潮流之一。組件式GIS軟件的基本思想是把GIS各大功能模塊劃分為幾個控件。各個GIS控件之間,以及GIS控件與其他非GIS控件之間,可以方便地通過可視化的軟件
2、開發(fā)工具集成起來,形成最終的GIS應(yīng)用。重點完成的工作包括:1) 建立ArcGIS Engine 應(yīng)用程序框架;2) 實現(xiàn)對矢量數(shù)據(jù)(Shape File格式)的訪問;3) 實現(xiàn)采用唯一值(Unique Values)的方式實現(xiàn)對面狀矢量數(shù)據(jù)進(jìn)行渲染(Render)。三、時間安排:1、實習(xí)動員:介紹本次實習(xí)的內(nèi)容和安排,布置任務(wù)。(1天)2、以上2項實習(xí)內(nèi)容。(3天)3、編寫實習(xí)報告,上交成果。(2天)四、成績評定1、按學(xué)生的實習(xí)態(tài)度占10%。2、獨立動手能力20%。3、實習(xí)成果70%。五、實習(xí)報告內(nèi)容:1、實習(xí)目的2、實習(xí)內(nèi)容3、實習(xí)步驟(原理,方法,如何操作)4、實習(xí)結(jié)果5、實習(xí)感受實習(xí)一
3、: 初識ArcGIS Engine 開發(fā)環(huán)境1、新建Windows窗體應(yīng)用程序啟動VS2008 ,選擇“文件|新建|項目|Windos窗體應(yīng)用程序”,在項目類型中選擇Visual C#,再選擇Windows應(yīng)用程序模板,輸入名稱“MyMap”,點擊確定。2、查看ArcGIS Windows Forms 控件3、添加地圖控件添加完這幾個控件后,VS會自動為我們添加一些引用,這些應(yīng)用如下,注意Version這個類庫是ArcGIS Engine 新增加的,而且必不可少。4、設(shè)置相應(yīng)的屬性右擊ToolbarControl控件,選擇“屬性| Items(選擇工具)| Add Commands”,選擇常用
4、工具。5、控件綁定:設(shè)置控件之間的關(guān)聯(lián)通過以上步驟添加的控件還只是單獨存在,而我們的程序需要各控件間協(xié)同工作,因此要進(jìn)行控件綁定。分別右擊ToolbarControl、TOCControl控件,將Buddy設(shè)置為axMapControl1。6、編譯運行按F5即可編譯運行程序,至此桌面GIS應(yīng)用程序框架基本框架已經(jīng)搭建好了,你可以通過工具條的工具打開地圖文檔,瀏覽地圖了。實習(xí)二:建立ArcGIS Engine 應(yīng)用程序框架2.1 地圖瀏覽1、新建項目啟動VS2008 ,選擇“文件|新建|項目|Windos窗體應(yīng)用程序”,在項目類型中選擇Visual C#,再選擇Windows應(yīng)用程序模板,輸入名
5、稱“MyMapFrame”,點擊確定。在解決方案管理器中將“Form1.cs”重命名為“MyMap.cs”,在設(shè)計視圖中,選中窗體,將其屬性中的“Text”改為“MyArcGIS”。2、添加控件選擇工具箱中的“菜單和工具欄|StatusStrip(狀態(tài)欄)”,將其拖入到窗體。選擇工具箱中的“ArcGIS Windows Forms”節(jié),將“ToolbarControl”控件拖入窗體,并將其屬性中的Dock設(shè)置為Top。選擇工具箱中的“容器|SplitContainer(容器)”拖入窗體,并將其屬性中的Dock設(shè)置為Fill。將TabControl控件拖入Panel1,將Alignment屬性設(shè)
6、置為Bottom,Dock屬性設(shè)置為Fill。點擊TabPages屬性右邊的按鈕,彈出TabPage集合編輯器,將tabPage1的Name設(shè)置為“Layer”,Text設(shè)置為“圖層”;將tabPage2的Name設(shè)置為“Property”,Text設(shè)置為“屬性”。如下所示:選擇“圖層”選項卡,拖入TOCControl控件,設(shè)置Dock屬性為Fill。選擇“屬性”選項卡,拖入所有Windows窗體|PropertyGrid控件,設(shè)置Dock屬性為Fill。 拖入TabControl控件到Panel2,設(shè)置Dock屬性為Fill。 并用上述類似的方法,將兩個選項卡的Name和Text分別設(shè)置為:
7、(Map、地圖)和(Layout,制版)。選擇“地圖”選項卡,拖入MapControl控件,設(shè)置Dock屬性為Fill。 選擇“制版”選項卡,拖入PageLayoutControl控件,設(shè)置Dock屬性為Fill。 最后將LicenseControl控件拖入到窗體的任意地方。 按F5編譯運行,可以看到布局好的程序界面。3、控件綁定通過以上步驟添加的控件還只是單獨存在,而我們的程序需要各控件間協(xié)同工作,因此要進(jìn)行控件綁定。分別右擊ToolbarControl、TOCControl控件,將Buddy設(shè)置為axMapControl1,如下圖所示。4、添加工具工具條中還沒有任何工具,添加的方法也很簡單
8、。右擊ToolbarControl,選擇“屬性|Items”,點擊Add,選擇Commands選項卡中的Generic,雙擊Open、SaveAs、Redo、Undo即可將相應(yīng)工具添加到工具條。常見的工具有: Map Navigation中的導(dǎo)航工具,Map Inquiry中的查詢工具,F(xiàn)eature Selection中的選擇工具,你可以根據(jù)需要酌情添加工具。5、右鍵點擊LicenseControl,點擊屬性菜單. 瀏覽彈出的對話框,其中ArcGIS Engine已經(jīng)選中,如果需要其它擴(kuò)展模塊的許可,可以在右側(cè)選中對應(yīng)的復(fù)選框,點擊確定按鈕。5、編譯運行 按F5即可編譯運行程序,至此桌面GI
9、S應(yīng)用程序框架基本框架已經(jīng)搭建好了,你可以通過工具條的工具打開地圖文檔,瀏覽地圖了。2.2添加shp 數(shù)據(jù)剛剛在2.1部分在沒有寫代碼的情況下,我們生成了一個地圖瀏覽小程序。下面我們來使用代碼的方式添加數(shù)據(jù)。 1、添加菜單控件并設(shè)置菜單屬性 在VS2010的工具箱中,展開菜單和工具欄,雙擊MenuStrip控件,這樣就在窗體上添加了一個菜單控件;同樣雙擊添加openFileDialog控件,置于窗體任何位置. 在菜單上點擊,輸入“添加SHP數(shù)據(jù)”作為菜單的標(biāo)題。2、代碼處理 2.1選中“添加SHP數(shù)據(jù)”菜單,在屬性框中點擊事件按鈕,在事件列表中雙擊Click事件;或者雙擊“添加SHP數(shù)據(jù)”菜單
10、.自動生成的事件處理方法如下圖所示,我們將在方法內(nèi)輸入處理代碼。下面開始使用ArcGIS Engine進(jìn)行編碼,首先需要添加ArcGIS的引用,在解決方案管理器中右鍵點擊“添加引用”。在MyMap.cs源代碼文件中,在源代碼的最頂部,輸入如下代碼,導(dǎo)入命名空間。using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Display; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.SystemUI; usin
11、g ESRI.ArcGIS.DataSourcesRaster; /為SHP數(shù)據(jù)功能 增加的類庫 using ESRI.ArcGIS.DataSourcesFile; using ESRI.ArcGIS.Geodatabase; using System.IO;在菜單的Click事件處理方法中添加如下代碼。有多種方法添加shapefile文件到地圖控件中,本示例的步驟如下: 1. 創(chuàng)建工作空間工廠。 2. 打開shapefile工作空間。 3. 打開要素類。 4. 創(chuàng)建要素圖層。 5. 關(guān)聯(lián)圖層和要素類。 6. 添加到地圖控件中。 示例代碼:openFileDialog1.Filter = s
12、hapefile文件(*.shp)|*.shp; openFileDialog1.Multiselect = false; DialogResult pDialogResult = openFileDialog1.ShowDialog(); if (pDialogResult != DialogResult.OK) return; string pPath = openFileDialog1.FileName; string pFolder = System.IO.Path.GetDirectoryName(pPath); string pFileName = System.IO.Path.G
13、etFileName(pPath); IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory(); IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pFolder, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; IFeatureClass pFC = pFeatureWorkspace.OpenFeatureClass(pFileName);IFeat
14、ureLayer pFLayer = new FeatureLayerClass(); pFLayer.FeatureClass = pFC; pFLayer.Name = pFC.AliasName; ILayer pLayer = pFLayer as ILayer; IMap pMap = axMapControl1.Map; pMap.AddLayer(pLayer); axMapControl1.ActiveView.Refresh();3、在鍵盤上按F5鍵,運行調(diào)試。點擊“添加SHP數(shù)據(jù)”菜單,在彈出的對話框中,選中任意一個shp文件,點擊確定,即可把shp文件加載到地圖控件中。實
15、習(xí)三:矢量要素符號化3.1 搭建符號化功能界面在之前創(chuàng)建的MenuStrip上,新建“地圖渲染”菜單,并新增“簡單渲染”和“唯一值渲染”兩個菜單項,如下圖所示。3.2 代碼處理 3.1選中“簡單渲染”菜單,在屬性框中點擊事件按鈕,在事件列表中雙擊Click事件;或者雙擊“簡單渲染”菜單,自動生成的事件處理方法如下圖所示,我們將在方法內(nèi)輸入處理代碼。重復(fù)相同的操作,為“唯一值渲染”菜單增加事件處理函數(shù)。在菜單“簡單渲染”的Click事件處理方法中添加如下代碼。private void DefineSimpleRender(IFeatureLayer pFeatureLayer, string s
16、FieldName) /設(shè)置用于渲染的顏色 IRgbColor pColor = new RgbColorClass(); pColor.Red = 255; pColor.Blue = 0; pColor.Green = 0; /設(shè)置用于渲染的符號的基本屬性(面狀符號) ISimpleFillSymbol pSFSBase = new SimpleFillSymbolClass(); pSFSBase.Style = esriSimpleFillStyle.esriSFSSolid; /設(shè)置填充方式 pSFSBase.Outline.Width = 0.4; /設(shè)置邊框的寬度 pSFSBas
17、e.Color = pColor as IColor; /設(shè)置簡單渲染的相關(guān)屬性 ISimpleRenderer pSR= new SimpleRendererClass(); pSR.Symbol = pSFSBase as ISymbol; /接口轉(zhuǎn)換,對渲染方式進(jìn)行設(shè)置 IGeoFeatureLayer pGFL = pFeatureLayer as IGeoFeatureLayer; pGFL.Renderer = pSR as IFeatureRenderer; /地圖刷新 axMapControl1.Refresh();在菜單“唯一值渲染”的Click事件處理方法中添加如下代碼。p
18、rivate void DefineUniqueValueRender(IFeatureLayer pFeatureLayer, string sFieldName) /變量聲明 bool bValFound; /判斷要素值是否存在 int iFieldIndex; /用于存儲字段所在的索引值 /設(shè)置顏色列表,用于隨機(jī)生成顏色(用于填充面狀要素) /設(shè)置顏色的基本屬性,包括色調(diào)(H)、飽和度(S)以及亮度(V) IRandomColorRamp pRCR = new RandomColorRampClass(); pRCR.StartHue = 76; pRCR.EndHue = 188; p
19、RCR.MinSaturation = 20; pRCR.MaxSaturation = 40; pRCR.MaxValue = 85; pRCR.MaxValue = 100; pRCR.UseSeed = true; pRCR.Seed = 43; /設(shè)置唯一值渲染的相關(guān)屬性 IUniqueValueRenderer pUVR = new UniqueValueRendererClass(); pUVR.FieldCount = 1; pUVR.set_Field(0, sFieldName); /遍歷要素類的所有要素,并為每個要素設(shè)置基本的渲染形式 /遍歷要素類中的所有要素 IFeatu
20、reClass pFC = pFeatureLayer.FeatureClass; IFeatureCursor pFCursor = pFC.Search(null, false); /通過遍歷,返回要素指針(FeatureCursor) IFeature pFeature = pFCursor.NextFeature(); /獲取當(dāng)前第一個要素 /獲得指定字段的索引值 IFields pFields = pFCursor.Fields; iFieldIndex = pFields.FindField(sFieldName); /為不同的要素,設(shè)置不同的填充顏色 pRCR.Size = pF
21、C.FeatureCount(null); /獲得應(yīng)產(chǎn)生的顏色的數(shù)目 bool bOK; pRCR.CreateRamp(out bOK); /判斷隨機(jī)顏色生產(chǎn)是否成功? /獲得隨機(jī)生成的顏色列表 IEnumColors pEnumColors = pRCR.Colors; pEnumColors.Reset(); IColor pColorForFeature = pEnumColors.Next(); /開始遍歷,為每個要素設(shè)置基本的渲染信息 while (pFeature != null) /為每個要素設(shè)置基本的渲染符號 ISimpleFillSymbol pSFSForFeature
22、= new SimpleFillSymbolClass(); pSFSForFeature.Style = esriSimpleFillStyle.esriSFSSolid; pSFSForFeature.Outline.Width = 0.4; pSFSForFeature.Color = pColorForFeature; /獲得當(dāng)前要素中指定字段的名稱 string sFeatureName; sFeatureName = pFeature.get_Value(iFieldIndex) as string; /設(shè)置唯一值渲染的相關(guān)屬性 pUVR.AddValue(sFeatureName
23、, sFieldName, pSFSForFeature as ISymbol); pUVR.set_Label(sFeatureName, sFeatureName); pUVR.set_Symbol(sFeatureName, pSFSForFeature as ISymbol); /設(shè)置該值渲染信息 /獲得下一組要素和顏色 pFeature = pFCursor.NextFeature(); pColorForFeature = pEnumColors.Next(); /接口轉(zhuǎn)換,對渲染方式進(jìn)行設(shè)置 IGeoFeatureLayer pGFL = pFeatureLayer as IGe
24、oFeatureLayer; pGFL.Renderer = pUVR as IFeatureRenderer; /地圖刷新 axMapControl1.Refresh();在菜單“分級渲染”的Click事件處理方法中添加如下代碼。private void ClassBreakRender(IFeatureLayer pFL, string sFieldName) IRandomColorRamp pRCR = new RandomColorRampClass(); IClassBreaksRenderer pCBR = new ClassBreaksRenderer(); pRCR.Star
25、tHue = 76; pRCR.EndHue = 188; pRCR.MinSaturation = 20; pRCR.MaxSaturation = 40; pRCR.MinValue = 85; pRCR.MaxValue = 100; pRCR.UseSeed = true; pRCR.Seed = 43; pCBR.Field = sFieldName; pCBR.BreakCount = 3; IFeatureClass pFC = pFL.FeatureClass; pRCR.Size = 3; bool bOK; pRCR.CreateRamp(out bOK); if (bOK = true) IEnumColors pEC = pRCR.Colors; pEC.Reset(); IColor pColorForFeature = pEC.Next(); for (int i = 0; i pCBR.BreakCount; i+) ISimpleFillSymbol pSFSForFeature = new SimpleFillSymbolClass(); pSFSForFeature
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度企業(yè)培訓(xùn)師資引進(jìn)合同
- 二零二五年度土地開發(fā)權(quán)轉(zhuǎn)讓居間代理合同模板
- 二零二五年度出差安全防護(hù)設(shè)備及服務(wù)租賃合同4篇
- 2025業(yè)績目標(biāo)達(dá)成股權(quán)激勵與員工股權(quán)激勵績效合同3篇
- 二零二五年度企業(yè)培訓(xùn)項目監(jiān)督合同
- 二零二五年度天然氣交易平臺服務(wù)合同
- 二零二五年度兩居房車租賃與民宿合作合同樣本2篇
- 2025年度水路聯(lián)合運輸貨運代理服務(wù)合同范本
- 二零二五版文化產(chǎn)業(yè)發(fā)展擔(dān)保合同示范文本4篇
- 2025年度個人房產(chǎn)抵押貸款擔(dān)保合同違約責(zé)任4篇
- 2025年度杭州市固廢處理與資源化利用合同3篇
- 部編版二年級下冊《道德與法治》教案及反思(更新)
- 充電樁項目運營方案
- 退休人員出國探親申請書
- 傷殘撫恤管理辦法實施細(xì)則
- 高中物理競賽真題分類匯編 4 光學(xué) (學(xué)生版+解析版50題)
- 西方經(jīng)濟(jì)學(xué)-高鴻業(yè)-筆記
- 幼兒園美術(shù)教育研究策略國內(nèi)外
- 2024屆河南省五市高三第一次聯(lián)考英語試題及答案
- 【永輝超市公司員工招聘問題及優(yōu)化(12000字論文)】
- 孕婦學(xué)校品管圈課件
評論
0/150
提交評論