www.日本精品,久久中文视频,中文字幕第一页在线播放,香蕉视频免费网站,老湿机一区午夜精品免费福利,91久久综合精品国产丝袜长腿,欧美日韩视频精品一区二区

GIS開(kāi)發(fā)實(shí)習(xí)報(bào)告

發(fā)布時(shí)間:2020-10-18 來(lái)源: 精準(zhǔn)扶貧 點(diǎn)擊:

 學(xué) 號(hào) 1221030205 売徐誡產(chǎn)女 f 實(shí)習(xí)報(bào)告 GIS 程序設(shè)計(jì)實(shí)習(xí) 起止日期:

 2015 年 7 月 13 日 至 2015 年 7 月 19 日 學(xué) 生 姓 名

 吳餒

  班

 級(jí) 12 級(jí)地信 2 班 成

 績(jī)

  指導(dǎo) 教師 ( 簽 字 )

 地質(zhì)與測(cè)繪學(xué)院

 2015 年 7 月 20 日

 UwMlMri 財(cái)—寫(xiě) hl M2F Vt*rk*Wi M ; ; Wg«B »<Aa* SHEfl wsa ■住呂 GIS 程序設(shè)計(jì)實(shí)習(xí) 一、 實(shí)習(xí)目的 通過(guò) GIS 程序設(shè)計(jì)實(shí)習(xí),使學(xué)生了解需求分析、項(xiàng)目管理方案設(shè)計(jì)、系統(tǒng)總 體設(shè)計(jì)以及系統(tǒng)詳細(xì)設(shè)計(jì)、系統(tǒng)實(shí)施、運(yùn)行和維護(hù)等階段要完成的具體工作;掌 握在C#和 ArcEngine 環(huán)境下構(gòu)建應(yīng)用型地理信息系統(tǒng)的方法。

 二、 實(shí)習(xí)內(nèi)容 利 熟悉開(kāi)發(fā)環(huán)境:Visual Studio 2010; C#; Arc En gi ne 10.1 &譏功能需求分析 J 基于組件技術(shù)開(kāi)發(fā)應(yīng)用型地理信息系統(tǒng) 組件式技術(shù)已成為當(dāng)今軟件技術(shù)的潮流之一。組件式 GIS 軟件的基本思想 是把GIS 各大功能模塊劃分為幾個(gè)控件。各個(gè) GIS 控件之間,以及 GIS 控件與 其他非 GIS控件之間,可以方便地通過(guò)可視化的軟件開(kāi)發(fā)工具集成起來(lái),形成 最終的 GIS 應(yīng)用。

 重點(diǎn)完成的工作包括:1)建立 ArcGIS Engine 應(yīng)用程序框架;2)實(shí)現(xiàn)對(duì) 矢量數(shù)據(jù)(Shape File 格式)的訪問(wèn);3)實(shí)現(xiàn)采用簡(jiǎn)單、唯一值、分類(lèi)等多種 方式對(duì)面狀矢量數(shù)據(jù)進(jìn)行渲染(Ren de)

 。

 三、 實(shí)習(xí)步驟:

 實(shí)習(xí)一:初識(shí) ArcGIS Engine 開(kāi)發(fā)環(huán)境 1、新建一個(gè) Windows 窗體應(yīng)用程序

  *

 ¥« IM

 a » HTAdCML wr»* cuke 占筒空 Ci*ud i m rS曙田黑 石序事理口 W J ■Mwi* <* ^et^SnsittSLr-

 2、在新建窗體中添加控件 在工具箱中選擇添加 toolbarco ntrol , TOCCo ntrol , Map Co ntrol 控件

 在解決方案資源管理器中雙擊 program.cs 在主函數(shù)中添加 ESRI.ArcGIS.Ru ntimeMa nager.Bi nd(ESRI.ArcGIS.ProductCode.E ngi ne);使得文件可以加載到 MapControl 中。

 t iisin? Syrt en: uainf Sjrt cn.EQlluctiniu. GcnoTiu :

 :

 usinf Syst en.Li.nn :

。

 VFuudovs. . I- namespMe 大董歸竦 | ( jts"tir cl*fs Rrngrim 弓 E) /// <mnuniTy> //<宙用程帛的壬廬口點(diǎn)* /// </5uwniiy> [ ; UTtu*ad] static void I ESRJ T

 A T ^GIS,R r- ii 訓(xùn)卄- F r . ^indCESRI. ArcGIS.P ndii tCod . Enfine): 川 pl i, i— EnabltVisual StyL es (", A ( ( -pJd - iti 3r.* S»tConpai , : ibleTe-xiEendecirg^efault (f; Apulut w RnrJn 艸 5 口:

 () | :

 右擊 toolbarcontrol 選擇屬性,如圖選擇 Items 選項(xiàng),添加如圖控件

 :魯 ArcGiS 丄。一匕國(guó)曲電 ■oclbarLontrol

  =[Rh Arc5I5 W 1 Fn 斗車(chē) N^mF:

 ^xTCXTC

  -on Bin. Is T CIA I EC T E N JO 口雹 T bl«t t s>s C4^e«ry 39 i Edt F»<tcr i

 Ed.t tlik^ 卩« «.lm i 5il«cti ;ga Find Ugg G CJL -= I I

 亡 1 帀宓 G] flbe IrwjuL ry ■jt C tLLg -hCHi t Ttk WL liMint"k iftjLAiys.t ULL IM

 E^rvie 電二 Fw 滬匸衛(wèi)嚴(yán) Ql 右擊 MapCo ntrol 屬性,在 Ge neral 的 map docume nt 中添加要加載的地圖文件

 0 - MET j.Fl “ T«t Canlrols, Comcrundi u 蘋(píng) J 1

 A TE GIS

 10.1 Engine TonlbarCerrtrail :韋寺 切:£厲 ItLl En^ne TOCCCr-Iroll NamE. JETOCCGHEriDl 1 —— n i- 1 聞冋 4 CCT5 10.1 Enijrie KapCCXltrol M BTIW .

 aXMaotertfiiH HmTtl

 | Itws| | 園片 [I]

 ¥ ± f?

 Q T LSM

  [^KQtate 』.認(rèn) Ir«i^

 * S cr<fllL B arv 口

 ^■tScralL Left

 * S cralt E: gtil

 f Scroll V,

 土 J DSTI

 Ln * t

 ■ *1 j

 If C ITU Ui U

 通過(guò)以上步驟添加的控件還只是單獨(dú)存在, 而我們的程序需要各控件間協(xié)同工作, 因此要進(jìn) 行控件綁定。分別右擊 ToolbarControl、TOCControl 控件,將 Buddy 設(shè)置為 axMapControll。

 試運(yùn)行一下如圖

  可以看出基本框架已經(jīng)搭建好了,但是還得調(diào)整一下布局 在工具箱的所有 Windows 窗體下選擇 —: ■ ■控件,放在窗體里,如圖 褐 ArrGIS 10.1. Cnaift* Too b^rControl 亙 ircGlE 1D.1 Engine a>cMapControl 1 分別選擇窗體里 TOCControl,MapControl 的屬性,將其 Dock 值設(shè)置為 fill,如圖 調(diào)整窗體布局如圖 八 For ml ArrGlE W.l Engmw Tc«cltia.rC0ffTTtrol 即址| JkrcGIS 10.1 fnyn ircG]S 10. L Erkgir^ MdpCantiali ■l=S N^ ITHQ ;

 jMMapQinifoll 叫 Fomn l

  實(shí)習(xí)二:建立 ArcGIS Engine 應(yīng)用程序框架 2.1 地圖瀏覽 1 、新建項(xiàng)目,添加控件 新建 windows 窗體應(yīng)用程序, 選擇工具箱中 StatusStrip(狀態(tài)欄 )

 ,將其拖入到窗體, 再選擇工具箱中的 ToolbarCo ntrol 控件拖入窗體,修改 dock 值為 TOP,再將 SplitC on tai ner 控件拖入窗體,Dock 設(shè)置為 Fill,將 TabControl 控件拖入 Panel1,將 Alignment 屬性設(shè)置為 Bottom,Dock 屬性設(shè)置為 Fill。點(diǎn)擊 TabPages 屬性右邊的按鈕,彈出 TabPage 集合編輯器, 將 tabPage1 的 Name 設(shè)置為 "Layer ; " Text 設(shè)置為 圖層”;將 tabPage2 的 Name 設(shè)置為 “ Property, Text 設(shè)置為 屬性”。

 選擇圖層”選項(xiàng)卡,拖入 TOCControl 控件,設(shè)置 Dock 屬性為 Fill,選擇屬性”選 項(xiàng)卡,拖入所有 Windows 窗體|PropertyGrid 控件,設(shè)置 Dock 屬性為 Fill。

 拖入 TabControl 控件到 Panel2,設(shè)置 Dock 屬性為 Fill 。

 結(jié)果如圖所示:

 f ■ :F CEI I

 口 "3 £3 T4

  2、力卩 shp 數(shù)據(jù) 在工具箱中選擇 MenuStrip 控件,添加到左上角,命名為文件,下拉選項(xiàng)為打開(kāi)矢量數(shù) 據(jù)和打開(kāi)柵格數(shù)據(jù),如圖:

 選中文件控件下的加入矢量數(shù)據(jù)控件, 雙擊事件并寫(xiě)入代碼,在開(kāi)始使用 ArcGIS Engine 進(jìn)行編碼前,首先需要添加 ArcGIS 的引用,在解決方案管理器中右鍵點(diǎn)擊 添加引用”,如 圖:

  usi ng ESRI.ArcGIS.Carto; usi ng ESRI.ArcGIS.C on trols; usi ng ESRI.ArcGIS.esriSystem; usi ng ESRI.ArcGIS.Display; usi ng ESRI.ArcGIS.Geometry; usi ng ESRI.ArcGIS.SystemUI; usi ng ESRI.ArcGIS.DataSourcesRaster; ///////////////為 SHP 數(shù)據(jù)功能 增加的類(lèi)庫(kù) usi ng ESRI.ArcGIS.DataSourcesFile; usi ng ESRI.ArcGIS.Geodatabase; using Syste m.IO;

  鍵入的代碼如圖:

 rrivarte void 打 JF® TocISt ripHenLiIten_C1 ick""ot j ezt sendsr. E"jentAras e) I

 |apenF^leDialogl.Filter = * sl".apefile^L l *.shp) |*. shp"; openFileDialojl.MuL ti select = false; DialofResult pDialngFjegul! = apenFileDialogl. Shcmt)ialog (": if (pDialagfiEsult == Dialog?esalt,OK) { st iinf pPart 上 = oTEnFileQialogl .FiLeHajne ; st i pF alder = Syst em, Iu, Path ? recto ryWaJiie [pF art h); string piFileNa*e = System. IQ,Fath, GetFileWsme(praTh): IWuLkipaucFc. I .1; pWu:kipaJc-Fabt <jry = [ ICM

 □ cfi 1 cW J ikipa. J cFiut J

 1 (). T" orbcpico pWockzpacs - pWorkspaceFCpenFrcnFi ^pFolder, Q) IFe^iur^Wo rkrp ■ - pFe ature^fc.rk sp are — p.Wo rkrp ac>? ww IF ta.+.lveV^crkrpi re; TF P

 -.+nr^ -i?pFC — pFpsrtiirpVorlz"ffpar a. rtppnFpatUTe 匚 1 hfm (pFi 1 pTffajie): IFeatureLayer pFLayer = new FeartuceLayerO ; ; pFLavein Featured lass = rFC; pFLayetn Name = pFC ?

 Al ;asNanie ILaye r pLayer - pFLayer as ILayer; IT Tap pMap = ^KWafCantrol 1 IVIap: pMap. AddLayer (pLayer) axJIapControll ?

 ActiveV^ew ?

 Ref resh();

  實(shí)習(xí)三:矢量要素符號(hào)化 1、簡(jiǎn)單渲染 選中“簡(jiǎn)單渲染”菜單,在屬性框中點(diǎn)擊事件按鈕,在事件列表中雙擊 Click 事件;或 者雙擊“簡(jiǎn)單渲染”菜單,在方法內(nèi)輸入處理代碼。部分代碼如下:

 private void 簡(jiǎn)單渲染 ToolStripMenuItem_Click( object sender, EventArgs e) {

 IFeatureLayer pFLForRender = axMapControl1.get_Layer(0) as IFeatureLayer ; SimpleRender(pFLForRender, @""); } private void SimpleRender( IFeatureLayer pFeatureLayer, string sFieldName) {

 // 設(shè)置用于渲染的顏色 IRgbColor pColor = new RgbColor(); pColor.Red = 255; pColor.Blue = 0; pColor.Green = 0; // 設(shè)置用于渲染的符號(hào)的基本屬性(面狀符號(hào)) ISimpleFillSymbol pSFSBase = new SimpleFillSymbol (); pSFSBase.Style = esriSimpleFillStyle .esriSFSSolid; // 設(shè)置填充方式 pSFSBase.Outline.Width = 0.4; // 設(shè)置邊框的寬度 pSFSBase.Color = pColor as IColor ; // 設(shè)置簡(jiǎn)單渲染的相關(guān)屬性 ISimpleRenderer pSR = new SimpleRenderer (); pSR.Symbol = pSFSBase as ISymbol ; // 接口轉(zhuǎn)換,對(duì)渲染方式進(jìn)行設(shè)置 IGeoFeatureLayer pGFL = pFeatureLayer as IGeoFeatureLayer ; pGFL.Renderer = pSR as IFeatureRenderer ; // 地圖刷新 axMapControl1.Refresh(); } 2、唯一值渲染 private void 唯一值渲染 ToolStripMenuItem_Click( object sender, EventArgs e) {

 IFeatureLayer pFLForRender = axMapControl1.get_Layer(0) as IFeatureLayer DefineUniqueValueRender(pFLForRender, @"CONTINEN)T; " private void DefineUniqueValueRender( IFeatureLayer pFeatureLayer, string sFieldName) { // 變量聲明

  bool bValFound; // 判斷要素值是否存在 int iFieldIndex; // 用于存儲(chǔ)字段所在的索引值 // 設(shè)置顏色列表,用于隨機(jī)生成顏色(用于填充面狀要素) //設(shè)置顏色的基本屬性,包括色調(diào)(H)、飽和度(S)以及亮度( V IRandomColorRamppRCR = new RandomColorRam(p); pRCR.StartHue = 76; pRCR.EndHue = 188; pRCR.MinSaturation = 20; pRCR.MaxSaturation = 40; pRCR.MaxValue = 85; pRCR.MaxValue = 100; pRCR.UseSeed = true ; pRCR.Seed = 43; // 設(shè)置唯一值渲染的相關(guān)屬性 IUniqueValueRenderer pUVR = new UniqueValueRenderer (); pUVR.FieldCount = 1; pUVR.set_Field(0, sFieldName); // 遍歷要素類(lèi)的所有要素,并為每個(gè)要素設(shè)置基本的渲染形式 // 遍歷要素類(lèi)中的所有要素 IFeatureClass pFC = pFeatureLayer.FeatureClass; IFeatureCursor pFCursor = pFC.Search( null , false ); // 通過(guò)遍歷,返回要素指針 ( FeatureCursor ) IFeature pFeature = pFCursor.NextFeature(); // 獲取當(dāng)前第一個(gè)要素 // 獲得指定字段的索引值 IFields pFields = pFCursor.Fields; iFieldIndex = pFields.FindField(sFieldName); // 為不同的要素,設(shè)置不同的填充顏色 pRCR.Size = pFC.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(); // 開(kāi)始遍歷,為每個(gè)要素設(shè)置基本的渲染信息 while (pFeature != null ) {

 // 為每個(gè)要素設(shè)置基本的渲染符號(hào) ISimpleFillSymbol pSFSForFeature = new SimpleFillSymbol (); 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, 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)換,對(duì)渲染方式進(jìn)行設(shè)置 IGeoFeatureLayer pGFL = pFeatureLayer as IGeoFeatureLayer ; pGFL.Renderer = pUVRas IFeatureRenderer ; // 地圖刷新 axMapControl1.Refresh(); } 3、分級(jí)渲染 先打開(kāi) ArcMap 講要導(dǎo)入數(shù)據(jù)的屬性表打開(kāi)添加一個(gè)字段命名為 X ,并進(jìn)行 計(jì)算幾何處理,分級(jí)渲染便以這個(gè)字段里的值分級(jí),分為兩級(jí),最小值到 90, 和 90 到最大值。代碼如下:

 private void 分類(lèi)渲染 ToolStripMenuItem_Click( object sender, EventArgs e) {

 IFeatureLayer pFLForRender = axMapControl1.get_Layer(0) as IFeatureLayer ; ClassBreakRender(pFLForRender, @"x");

 private void ClassBreakRender( IFeatureLayer pFL, string sFieldName) { IRandomColorRamppRCR = new RandomColorRam(p); IClassBreaksRenderer pCBR = new ClassBreaksRenderer (); pRCR.StartHue = 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 = 2; 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++) {

 pSFSForFeature = new SimpleFillSymbol (); pSFSForFeature1 = new SimpleFillSymbol (); esriSimpleFillStyle .esriSFSSolid; pSFSForFeature.Outline.Width = 0.4; pSFSForFeature.Color = pColorForFeature; switch (i) {

 case 0: pCBR.set_Break(i, 90); pCBR.set_Label(i,

 ISimpleFillSymbol ISimpleFillSymbol pSFSForFeature.Style = "-92 - 90" );

 pCBR.set_Descriptio n(i, "-92 - 90"); pCBR.set_Symbol(i, pSFSForFeature as ISymbol); pSFSForFeaturel.Color = pSFSForFeature.Color; break; case 1:

  pCBR.set_Break(i, 153); pCBR.set_Label(i, pCBR.set_Descriptio n(i. "-90 - 90"); "-90 - 90"); pCBR.set_Symbol(i, pSFSForFeature as ISymbol); break; } pColorForFeature = pEC.Next(); } IGeoFeatureLayer pGFL = pFL as IGeoFeatureLayer pGFL.Renderer = pCBR as IFeatureRenderer ; axMapCo ntrol1.Refresh(); } } 四、實(shí)習(xí)結(jié)果 1、實(shí)習(xí)一結(jié)果

 2、實(shí)習(xí)二結(jié)果

  3、實(shí)習(xí)三結(jié)果 叫 -F-orml . * I — 1 口 Map F m Conlne^Tts

 k融 輕■§網(wǎng) iw?7 沽"玉跖 D5 羽卻価

 "時(shí) F(XE :

 I - . 二

  立 I 豐繪屢壬

。郛T-上;- 1 Igl 巧? W1DM 蘭嚴(yán)呷 MW7974 昨舁

 五、實(shí)習(xí)感受

 通過(guò)此次實(shí)習(xí),了解了用ARC Engine進(jìn)行地理信息系統(tǒng)的二次開(kāi)發(fā)的大致 流程,利用 ARC Engine 開(kāi)發(fā)可以很好地定制自己所需的功能,而且也不是很難, 在 VS 中敲代碼時(shí)很多方法和接口就自動(dòng)提示出現(xiàn),都不需要記住那么多方法, 只要了解那些方法的功能,需要用時(shí)能夠調(diào)用就行。開(kāi)發(fā)的關(guān)鍵還是在于各種 接口以及控件方法的引用。此次實(shí)習(xí)也只是接觸了皮毛,要想更好地利用其進(jìn) 行地理信息系統(tǒng)的開(kāi)發(fā)還是得熟悉和了解各種接口和方法的功能,要學(xué)會(huì)利用 幫助文檔來(lái)查詢所需的各種借口和方法。

相關(guān)熱詞搜索:實(shí)習(xí)報(bào)告 開(kāi)發(fā) GIS

版權(quán)所有 蒲公英文摘 www.newchangjing.com