您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何基于C# GIS實(shí)現(xiàn)校園電子地圖”,在日常操作中,相信很多人在如何基于C# GIS實(shí)現(xiàn)校園電子地圖問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何基于C# GIS實(shí)現(xiàn)校園電子地圖”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
基于C# GIS也就是在C#平臺(tái)上進(jìn)行地理信息系統(tǒng)的校園電子地圖,主要是存儲(chǔ)和處理空間信息的高新技術(shù)。本系統(tǒng)一般分為兩個(gè)部分,***部分為地圖數(shù)據(jù)的設(shè)計(jì)和.GST地圖文件的生成,第二部分為具體代碼的設(shè)計(jì)。
1.基于C# GIS的校園電子地圖簡(jiǎn)介
地理信息系統(tǒng)(Geographic Information System, GIS)是融計(jì)算機(jī)圖形和數(shù)據(jù)于一體,存儲(chǔ)和處理空間信息的高新技術(shù)。它是以地理空間數(shù)據(jù)庫(kù)為基礎(chǔ),在計(jì)算機(jī)硬、軟件環(huán)境的支持下,對(duì)空間相關(guān)數(shù)據(jù)進(jìn)行采集、管理、操作、分析、模擬和顯示,并采用地理模型分析方法,適時(shí)提供多種空間和動(dòng)態(tài)的地理信息,為地理研究、綜合評(píng)價(jià)、管理、定量分析和決策服務(wù)而建立起來(lái)的一類(lèi)計(jì)算機(jī)應(yīng)用系統(tǒng)。校園電子地圖是利用GIS技術(shù)實(shí)現(xiàn)對(duì)校園地物位置的實(shí)時(shí)顯示,具有漫游,鷹眼,縮放,定位,量算,查詢等功能。
本系統(tǒng)以中北大學(xué)校園地圖信息為基礎(chǔ),在.NET環(huán)境下通過(guò)C#語(yǔ)言對(duì)MapX控件進(jìn)行二次開(kāi)發(fā)來(lái)實(shí)現(xiàn)的。MapX是MapInfo公司的地圖化的ActiveX,在利用面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的開(kāi)發(fā)應(yīng)用中嵌入MapX,可以非常簡(jiǎn)便的使其應(yīng)用程序具有強(qiáng)大的地圖控制功能。在應(yīng)用程序設(shè)計(jì)前期還用到了MapInfo Professional軟件。MapInfo Professional是目前世界上比較完備、功能強(qiáng)大、全面直觀的桌面地理信息系統(tǒng),是一套強(qiáng)大的基于Windows平臺(tái)的地圖化信息解決方案。MapInfo Professional主要提供地圖繪制、編輯、地理分析、網(wǎng)格影像等功能。
2.系統(tǒng)設(shè)計(jì)
本系統(tǒng)設(shè)計(jì)可分為兩個(gè)部分,***部分為地圖數(shù)據(jù)的設(shè)計(jì)和.GST地圖文件的生成,第二部分為具體代碼的設(shè)計(jì)。這樣設(shè)計(jì)有以下目的:
1)當(dāng)出現(xiàn)校園規(guī)劃地圖變更時(shí),只需變更地圖數(shù)據(jù)并重新生成.GST文件,然后覆蓋應(yīng)用程序下maps文件夾下的地圖文件即可。
2)當(dāng)?shù)貓D軟件功能變更時(shí),需要開(kāi)發(fā)人員進(jìn)行相關(guān)功能的完善與增刪。
采用這種設(shè)計(jì)可以使程序的代碼量大大降低,便于維護(hù),提高了程序運(yùn)行性能。
2.1系統(tǒng)功能與目標(biāo)
本系統(tǒng)設(shè)計(jì)目標(biāo)是提供校園各地物的具體位置及相關(guān)地物信息閱覽,為新生以及其他***次到訪者提供便利的圖文信息查詢。為此,本系統(tǒng)功能主要如下:
1)實(shí)現(xiàn)校園電子地圖功能并實(shí)現(xiàn)對(duì)其的各種基本操作,能夠詳細(xì)直觀地表達(dá)校園各項(xiàng)空間信息和屬性信息;
2)實(shí)現(xiàn)地圖上的圖元定位并顯示相關(guān)屬性信息;
3)實(shí)現(xiàn)鷹眼圖功能;
4)實(shí)現(xiàn)地圖上距離測(cè)量;
2.2系統(tǒng)空間模型設(shè)計(jì)
MapInfo采用空間數(shù)據(jù)與屬性數(shù)據(jù)分開(kāi)存儲(chǔ)模式??臻g數(shù)據(jù)是用來(lái)確定圖形和制圖特征的位置,這是以地球表面空間位置為參照的;屬性數(shù)據(jù)用來(lái)反映與幾何位置無(wú)關(guān)的屬性,它一般是經(jīng)過(guò)分類(lèi),命名,量算,統(tǒng)計(jì)等方法得到的。MapInfo根據(jù)不同專(zhuān)題將地圖分層,然后按照一定順序來(lái)組織地圖。每一個(gè)圖層都包含了地圖的不同部分,它存儲(chǔ)為若干文件。將這些圖層按一定順序疊加,就能看到整個(gè)地圖信息。
本系統(tǒng)利用MapInfo Professional軟件根據(jù)需要將校園地圖繪制為7個(gè)圖層,分別為教學(xué)區(qū)圖層、住宿區(qū)圖層、生活區(qū)圖層、體育設(shè)施圖層、道路圖層、綠化帶圖層、背景圖層。同時(shí)分別為這些圖層做了適當(dāng)?shù)膶傩詳?shù)據(jù)設(shè)計(jì),通過(guò)屬性數(shù)據(jù)來(lái)實(shí)現(xiàn)目標(biāo)圖元的查詢與定位。 圖1為教學(xué)區(qū)圖層的屬性數(shù)據(jù)表,其它圖層數(shù)據(jù)表不再一一列出。
圖1 教學(xué)區(qū)圖層屬性數(shù)據(jù)表
2.3利用Geoset Manager集成地圖
在MapX中,地圖是分層顯示的,每一層對(duì)應(yīng)一個(gè).Tab文件。安裝MapX5.0后,運(yùn)行Geoset Manager,將MapInfo Professional生成的7個(gè)圖層按照教學(xué)區(qū)圖層、住宿區(qū)圖層、生活區(qū)圖層、體育設(shè)施圖層、綠化帶圖層、道路圖層、背景圖層順序添加,然后存儲(chǔ)到一個(gè).GST文件中,本系統(tǒng)存儲(chǔ)為“nuc_1.gst”。這樣在程序段Form1_Load中直接加載該.GST文件,不用依次加載各個(gè)圖層,使編程工作更加簡(jiǎn)單。
2.4系統(tǒng)主要功能設(shè)計(jì)
2.4.1 電子地圖基本功能的實(shí)現(xiàn)
電子地圖基本功能包括放大、縮小、漫游等,MapX控件已經(jīng)集成了這些工具,因此編程時(shí)C#只需要簡(jiǎn)單調(diào)用這些工具即可,具體代碼如下:
private void toolStripButton1_Click(object sender, EventArgs e) { axMap2.CurrentTool = MapXLib.ToolConstants.miZoomInTool; //放大工具 }
其它工具調(diào)用類(lèi)似,這里不再贅述。
2.4.2 鷹眼圖實(shí)現(xiàn)
鷹眼圖是GIS系統(tǒng)的一個(gè)基本功能,它是為了方便擁護(hù)瀏覽地圖而設(shè)計(jì)的,其作用是顯示主圖中所顯示的地圖在整副地圖中的位置。用戶還可以在鷹眼圖中鼠標(biāo)單擊任意區(qū)域,則在主圖中同步顯示該區(qū)域,從而實(shí)現(xiàn)快速瀏覽。
實(shí)現(xiàn)鷹眼圖的思路為:首先在窗體上放兩個(gè)MapX控件,分別為主圖和鷹眼圖,然后在鷹眼圖上創(chuàng)建一個(gè)圖層,并在其上添加一個(gè)矩形框,該矩形的大小隨主圖邊界而變化。
C# GIS實(shí)現(xiàn)鷹眼圖的代碼如下:
private void axMap2_MapViewChanged(object sender, EventArgs e) { MapXLib.Feature tempFea; //聲明一個(gè)圖元,用于鷹眼圖中創(chuàng)建的矩形框 MapXLib.Points tempPoints = new Points(); MapXLib.Style tempStyle = new Style(); MapXLib.Point ptMap_1 = new MapXLib.Point(); MapXLib.Point ptMap_2 = new MapXLib.Point(); MapXLib.Point ptMap_3 = new MapXLib.Point(); MapXLib.Point ptMap_4 = new MapXLib.Point(); //設(shè)置矩形框四角坐標(biāo)為主圖邊框 ptMap_1.Set(axMap2.CtlBounds.XMin, axMap2.CtlBounds.YMin); ptMap_2.Set(axMap2.CtlBounds.XMax, axMap2.CtlBounds.YMin); ptMap_3.Set(axMap2.CtlBounds.XMax, axMap2.CtlBounds.YMax); ptMap_4.Set(axMap2.CtlBounds.XMin, axMap2.CtlBounds.YMax); //添加點(diǎn)到點(diǎn)集 tempPoints.Add(ptMap_1, 1); tempPoints.Add(ptMap_2, 2); tempPoints.Add(ptMap_3, 3); tempPoints.Add(ptMap_4, 4); //////////////以下創(chuàng)建臨時(shí)圖層///////////////////////// MapXLib.LayerInfo tempLayerInfo = new MapXLib.LayerInfoClass(); MapXLib.Fields flds = new MapXLib.FieldsClass(); flds.AddStringField("Name", 100, false); tempLayerInfo.Type = MapXLib.LayerInfoTypeConstants.miLayerInfoTypeTemp; tempLayerInfo.AddParameter("Name", "Eagle"); tempLayerInfo.AddParameter("Fields", flds); m_layer_Eagle = axMap1.Layers.Add(tempLayerInfo, 1); //為鷹眼圖添加圖層 //////////////以上創(chuàng)建臨時(shí)圖層////////////////////////// //以下設(shè)置邊框樣式 tempStyle.RegionPattern = FillPatternConstants.miPatternNoFill; tempStyle.RegionBorderColor = (uint)MapXLib.ColorConstants.miColorBlue; tempStyle.RegionBorderWidth = 2; //以下在臨時(shí)圖層添加大小為axMapx2的邊界的Rectangle對(duì)象 try { tempFea = axMap1.FeatureFactory.CreateRegion(tempPoints, tempStyle);//創(chuàng)建矩形框 m_feature_Eagle = axMap1.Layers._Item("Eagle").AddFeature(tempFea, new MapXLib.RowValuesClass()); //添加邊框到鷹眼圖 } catch (System.Exception ex) { MessageBox.Show(ex.ToString()); } }
以下為鷹眼圖導(dǎo)航功能的實(shí)現(xiàn)代碼:
private void axMap1_MouseDownEvent(object sender, AxMapXLib.CMapXEvents_MouseDownEvent e) { double MapX = 0.0; double MapY = 0.0; axMap1.ConvertCoord(ref e.x, ref e.y, ref MapX, ref MapY, MapXLib.ConversionConstants.miScreenToMap); //將屏幕坐標(biāo)轉(zhuǎn)換為地圖坐標(biāo) axMap2.CenterX = MapX; //將地圖坐標(biāo)付給主視圖 axMap2.CenterY = MapY; }
2.4.3 圖元查找及定位功能的實(shí)現(xiàn)
首先,根據(jù)comboBox1選擇圖層,然后將該圖層”Name”字段的值綁定到treeView1,雙擊treeView1中想要查找的圖元,則在主圖中心位置就會(huì)顯示要查找的圖元,并且將圖元其他信息顯示在主圖下方label中。
主圖中定位目標(biāo)圖元主要代碼如下:
//查找定位Name字段為node.text的圖元,node.text為treeView1雙擊查找的圖元 string str = "Name=" + '"' + node.Text + '"'; //"Name"為圖層的一個(gè)字段 string layer_name = comboBox1.SelectedItem.ToString(); //選定的圖層名 FoundFeatures = axMap2.Layers._Item(layer_name).Search(str, null); //返回找到的圖元 if (FoundFeatures.Count > 0) //若找到目標(biāo)圖元 { axMap2.CenterX = FoundFeatures._Item(1).CenterX;//將目標(biāo)圖元中心坐標(biāo)賦給主圖 axMap2.CenterY = FoundFeatures._Item(1).CenterY; } Else //未找到目標(biāo)圖元,提示目標(biāo)圖元不存在 { MessageBox.Show("查找信息不存在!"); } 將目標(biāo)圖元”Notes”字段值顯示到label中,代碼如下: ///////////////////以下是在label4中顯示圖元Notes字段信息/////////// lyr = axMap2.Layers._Item(layer_name); //comboBox1中選擇的圖層MapXLib.Fields flds = new MapXLib.FieldsClass(); flds.Add("Name", "Name", MapXLib.AggregationFunctionConstants.miAggregationSum, MapXLib.FieldTypeConstants.miTypeString); flds.Add("Notes", "Notes", MapXLib.AggregationFunctionConstants.miAggregationSum, MapXLib.FieldTypeConstants.miTypeString); dts = axMap2.DataSets.Add(MapXLib.DatasetTypeConstants.miDataSetLayer, lyr, lyr.Name, 0, 0, 0, flds, false); //將flds內(nèi)容添加到數(shù)據(jù)集 for (int i = 0; i < dts.RowCount; i++) { if (dts.get_Value(i, "Name").ToString() == node.Text) //查找“Name”字段
圖2 中北大學(xué)電子地圖界面
系統(tǒng)可分為4部分,頂部為工具欄實(shí)現(xiàn)縮放、漫游、測(cè)距功能,左側(cè)樹(shù)視圖實(shí)現(xiàn)查找定位圖元功能,左側(cè)下部為鷹眼圖實(shí)現(xiàn)導(dǎo)航功能,右側(cè)為主圖顯示地圖信息,右側(cè)下部顯示的是樹(shù)視圖中所查找圖元其它信息。
4.結(jié)束語(yǔ)
本系統(tǒng)是根據(jù)校園的地理結(jié)構(gòu)設(shè)計(jì)的,精確反映了校園內(nèi)的各種地物信息,可以為新生和家長(zhǎng)以及其他初次到訪校園人員提供出行向?qū)?。系統(tǒng)界面友好、方便,可以作為校園網(wǎng)子系統(tǒng)使用,有助于校園規(guī)劃建設(shè)和管理,為高校帶來(lái)更好的社會(huì)效益。
到此,關(guān)于“如何基于C# GIS實(shí)現(xiàn)校園電子地圖”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。