自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于C# GIS的校園電子地圖具體實現方法

開發(fā) 后端
這里將介紹基于C# GIS的校園電子地圖具體實現方法。校園電子地圖在地理研究,定量分析和決策服務中應用很多。

基于C# GIS也就是在C#平臺上進行地理信息系統(tǒng)的校園電子地圖,主要是存儲和處理空間信息的高新技術。本系統(tǒng)一般分為兩個部分,***部分為地圖數據的設計和.GST地圖文件的生成,第二部分為具體代碼的設計。

1.基于C# GIS的校園電子地圖簡介

地理信息系統(tǒng)(Geographic Information System, GIS)是融計算機圖形和數據于一體,存儲和處理空間信息的高新技術。它是以地理空間數據庫為基礎,在計算機硬、軟件環(huán)境的支持下,對空間相關數據進行采集、管理、操作、分析、模擬和顯示,并采用地理模型分析方法,適時提供多種空間和動態(tài)的地理信息,為地理研究、綜合評價、管理、定量分析和決策服務而建立起來的一類計算機應用系統(tǒng)。校園電子地圖是利用GIS技術實現對校園地物位置的實時顯示,具有漫游,鷹眼,縮放,定位,量算,查詢等功能。

本系統(tǒng)以中北大學校園地圖信息為基礎,在.NET環(huán)境下通過C#語言對MapX控件進行二次開發(fā)來實現的。MapX是MapInfo公司的地圖化的ActiveX,在利用面向對象程序設計語言的開發(fā)應用中嵌入MapX,可以非常簡便的使其應用程序具有強大的地圖控制功能。在應用程序設計前期還用到了MapInfo Professional軟件。MapInfo Professional是目前世界上比較完備、功能強大、全面直觀的桌面地理信息系統(tǒng),是一套強大的基于Windows平臺的地圖化信息解決方案。MapInfo Professional主要提供地圖繪制、編輯、地理分析、網格影像等功能。

2.系統(tǒng)設計

本系統(tǒng)設計可分為兩個部分,***部分為地圖數據的設計和.GST地圖文件的生成,第二部分為具體代碼的設計。這樣設計有以下目的:

1)當出現校園規(guī)劃地圖變更時,只需變更地圖數據并重新生成.GST文件,然后覆蓋應用程序下maps文件夾下的地圖文件即可。

2)當地圖軟件功能變更時,需要開發(fā)人員進行相關功能的完善與增刪。

采用這種設計可以使程序的代碼量大大降低,便于維護,提高了程序運行性能。

2.1系統(tǒng)功能與目標

本系統(tǒng)設計目標是提供校園各地物的具體位置及相關地物信息閱覽,為新生以及其他***次到訪者提供便利的圖文信息查詢。為此,本系統(tǒng)功能主要如下:

1)實現校園電子地圖功能并實現對其的各種基本操作,能夠詳細直觀地表達校園各項空間信息和屬性信息;

2)實現地圖上的圖元定位并顯示相關屬性信息;

3)實現鷹眼圖功能;

4)實現地圖上距離測量;

2.2系統(tǒng)空間模型設計

MapInfo采用空間數據與屬性數據分開存儲模式。空間數據是用來確定圖形和制圖特征的位置,這是以地球表面空間位置為參照的;屬性數據用來反映與幾何位置無關的屬性,它一般是經過分類,命名,量算,統(tǒng)計等方法得到的。MapInfo根據不同專題將地圖分層,然后按照一定順序來組織地圖。每一個圖層都包含了地圖的不同部分,它存儲為若干文件。將這些圖層按一定順序疊加,就能看到整個地圖信息。

本系統(tǒng)利用MapInfo Professional軟件根據需要將校園地圖繪制為7個圖層,分別為教學區(qū)圖層、住宿區(qū)圖層、生活區(qū)圖層、體育設施圖層、道路圖層、綠化帶圖層、背景圖層。同時分別為這些圖層做了適當的屬性數據設計,通過屬性數據來實現目標圖元的查詢與定位。 圖1為教學區(qū)圖層的屬性數據表,其它圖層數據表不再一一列出。

教學區(qū)圖層屬性數據表

圖1 教學區(qū)圖層屬性數據表

2.3利用Geoset Manager集成地圖

在MapX中,地圖是分層顯示的,每一層對應一個.Tab文件。安裝MapX5.0后,運行Geoset Manager,將MapInfo Professional生成的7個圖層按照教學區(qū)圖層、住宿區(qū)圖層、生活區(qū)圖層、體育設施圖層、綠化帶圖層、道路圖層、背景圖層順序添加,然后存儲到一個.GST文件中,本系統(tǒng)存儲為“nuc_1.gst”。這樣在程序段Form1_Load中直接加載該.GST文件,不用依次加載各個圖層,使編程工作更加簡單。

2.4系統(tǒng)主要功能設計

2.4.1 電子地圖基本功能的實現

電子地圖基本功能包括放大、縮小、漫游等,MapX控件已經集成了這些工具,因此編程時C#只需要簡單調用這些工具即可,具體代碼如下:

  1. private void toolStripButton1_Click(object sender, EventArgs e)  
  2. {  
  3. axMap2.CurrentTool = MapXLib.ToolConstants.miZoomInTool; //放大工具  

其它工具調用類似,這里不再贅述。

2.4.2 鷹眼圖實現

鷹眼圖是GIS系統(tǒng)的一個基本功能,它是為了方便擁護瀏覽地圖而設計的,其作用是顯示主圖中所顯示的地圖在整副地圖中的位置。用戶還可以在鷹眼圖中鼠標單擊任意區(qū)域,則在主圖中同步顯示該區(qū)域,從而實現快速瀏覽。

實現鷹眼圖的思路為:首先在窗體上放兩個MapX控件,分別為主圖和鷹眼圖,然后在鷹眼圖上創(chuàng)建一個圖層,并在其上添加一個矩形框,該矩形的大小隨主圖邊界而變化。

C# GIS實現鷹眼圖的代碼如下:

  1. private void axMap2_MapViewChanged(object sender, EventArgs e)  
  2. {  
  3. MapXLib.Feature tempFea; //聲明一個圖元,用于鷹眼圖中創(chuàng)建的矩形框  
  4. MapXLib.Points tempPoints = new Points();   
  5. MapXLib.Style tempStyle = new Style();   
  6. MapXLib.Point ptMap_1 = new MapXLib.Point();  
  7. MapXLib.Point ptMap_2 = new MapXLib.Point();  
  8. MapXLib.Point ptMap_3 = new MapXLib.Point();  
  9. MapXLib.Point ptMap_4 = new MapXLib.Point();  
  10. //設置矩形框四角坐標為主圖邊框  
  11. ptMap_1.Set(axMap2.CtlBounds.XMin, axMap2.CtlBounds.YMin);  
  12. ptMap_2.Set(axMap2.CtlBounds.XMax, axMap2.CtlBounds.YMin);  
  13. ptMap_3.Set(axMap2.CtlBounds.XMax, axMap2.CtlBounds.YMax);  
  14. ptMap_4.Set(axMap2.CtlBounds.XMin, axMap2.CtlBounds.YMax);  
  15. //添加點到點集  
  16. tempPoints.Add(ptMap_1, 1);  
  17. tempPoints.Add(ptMap_2, 2);  
  18. tempPoints.Add(ptMap_3, 3);  
  19. tempPoints.Add(ptMap_4, 4);  
  20. //////////////以下創(chuàng)建臨時圖層/////////////////////////   
  21. MapXLib.LayerInfo tempLayerInfo = new MapXLib.LayerInfoClass();  
  22. MapXLib.Fields flds = new MapXLib.FieldsClass();  
  23. flds.AddStringField("Name", 100, false);  
  24. tempLayerInfo.Type = MapXLib.LayerInfoTypeConstants.miLayerInfoTypeTemp;  
  25. tempLayerInfo.AddParameter("Name""Eagle");  
  26. tempLayerInfo.AddParameter("Fields", flds);  
  27. m_layer_Eagle = axMap1.Layers.Add(tempLayerInfo, 1); //為鷹眼圖添加圖層  
  28. //////////////以上創(chuàng)建臨時圖層//////////////////////////   
  29. //以下設置邊框樣式  
  30. tempStyle.RegionPattern = FillPatternConstants.miPatternNoFill;  
  31. tempStyle.RegionBorderColor = (uint)MapXLib.ColorConstants.miColorBlue;  
  32. tempStyle.RegionBorderWidth = 2;  
  33. //以下在臨時圖層添加大小為axMapx2的邊界的Rectangle對象   
  34. try 
  35. {  
  36. tempFea = axMap1.FeatureFactory.CreateRegion(tempPoints, tempStyle);//創(chuàng)建矩形框   
  37. m_feature_Eagle = axMap1.Layers._Item("Eagle").AddFeature(tempFea,  
  38. new MapXLib.RowValuesClass()); //添加邊框到鷹眼圖  
  39. }  
  40. catch (System.Exception ex)  
  41. {  
  42. MessageBox.Show(ex.ToString());  
  43. }  

以下為鷹眼圖導航功能的實現代碼:

  1. private void axMap1_MouseDownEvent(object sender, AxMapXLib.CMapXEvents_MouseDownEvent e)  
  2. {  
  3. double MapX = 0.0;  
  4. double MapY = 0.0;  
  5. axMap1.ConvertCoord(ref e.x, ref e.y, ref MapX, ref MapY, MapXLib.ConversionConstants.miScreenToMap); //將屏幕坐標轉換為地圖坐標  
  6. axMap2.CenterX = MapX; //將地圖坐標付給主視圖  
  7. axMap2.CenterY = MapY;  

2.4.3 圖元查找及定位功能的實現

首先,根據comboBox1選擇圖層,然后將該圖層”Name”字段的值綁定到treeView1,雙擊treeView1中想要查找的圖元,則在主圖中心位置就會顯示要查找的圖元,并且將圖元其他信息顯示在主圖下方label中。

主圖中定位目標圖元主要代碼如下:

  1. //查找定位Name字段為node.text的圖元,node.text為treeView1雙擊查找的圖元  
  2.  
  3. string str = "Name=" + '"' + node.Text + '"'//"Name"為圖層的一個字段  
  4.  
  5. string layer_name = comboBox1.SelectedItem.ToString(); //選定的圖層名 FoundFeatures = axMap2.Layers._Item(layer_name).Search(str, null); //返回找到的圖元  
  6.  
  7. if (FoundFeatures.Count > 0) //若找到目標圖元  
  8.  
  9. {  
  10.  
  11. axMap2.CenterX = FoundFeatures._Item(1).CenterX;//將目標圖元中心坐標賦給主圖  
  12.  
  13. axMap2.CenterY = FoundFeatures._Item(1).CenterY;  
  14.  
  15. }  
  16.  
  17. Else //未找到目標圖元,提示目標圖元不存在  
  18.  
  19. {  
  20.  
  21. MessageBox.Show("查找信息不存在!");  
  22.  
  23. }  
  24.  
  25. 將目標圖元”Notes”字段值顯示到label中,代碼如下:  
  26.  
  27. ///////////////////以下是在label4中顯示圖元Notes字段信息///////////  
  28.  
  29. lyr = axMap2.Layers._Item(layer_name); //comboBox1中選擇的圖層MapXLib.Fields flds = new MapXLib.FieldsClass();  
  30.  
  31. flds.Add("Name""Name", MapXLib.AggregationFunctionConstants.miAggregationSum, MapXLib.FieldTypeConstants.miTypeString);  
  32.  
  33. flds.Add("Notes""Notes", MapXLib.AggregationFunctionConstants.miAggregationSum, MapXLib.FieldTypeConstants.miTypeString);  
  34.  
  35. dts = axMap2.DataSets.Add(MapXLib.DatasetTypeConstants.miDataSetLayer, lyr, lyr.Name, 0, 0, 0, flds, false); //將flds內容添加到數據集  
  36.  
  37. for (int i = 0; i < dts.RowCount; i++)  
  38.  
  39. {  
  40.  
  41. if (dts.get_Value(i, "Name").ToString() == node.Text) //查找“Name”字段 

中北大學電子地圖界面

圖2 中北大學電子地圖界面

系統(tǒng)可分為4部分,頂部為工具欄實現縮放、漫游、測距功能,左側樹視圖實現查找定位圖元功能,左側下部為鷹眼圖實現導航功能,右側為主圖顯示地圖信息,右側下部顯示的是樹視圖中所查找圖元其它信息。

4.結束語

本系統(tǒng)是根據校園的地理結構設計的,精確反映了校園內的各種地物信息,可以為新生和家長以及其他初次到訪校園人員提供出行向導。系統(tǒng)界面友好、方便,可以作為校園網子系統(tǒng)使用,有助于校園規(guī)劃建設和管理,為高校帶來更好的社會效益。

【編輯推薦】

  1. C# this關鍵字詳解
  2. C#調用析構方法詳解
  3. C#釋放托管資源簡單描述
  4. C#單路代理簡單分析
  5. C#文法產生式概述
責任編輯:彭凡 來源: 技術應用頻道
相關推薦

2009-09-11 09:59:47

2009-08-26 13:41:58

C#打印源碼

2009-09-27 10:43:13

C#合并多個WORD文

2022-06-16 14:36:18

鴻蒙操作系統(tǒng)

2009-08-19 17:00:07

C#實現PrintPa

2009-08-20 14:22:17

C#實現 Contro

2009-09-07 09:36:29

C# DisposeDispose方法

2009-09-03 14:49:49

C#實現網絡點對點

2009-08-31 10:38:34

C#變量初始化

2017-02-21 14:30:03

2009-08-25 14:26:28

C#播放AVI文件

2024-05-16 12:33:37

C#編程指針

2009-09-02 17:38:19

C#開發(fā)GIS

2009-08-31 13:53:03

C#創(chuàng)建一個文件

2009-09-11 11:39:23

C# RadioBut

2010-02-04 11:23:25

C++反射機制

2009-09-02 18:53:28

C#鼠標坐標

2009-04-20 10:09:46

C#優(yōu)先隊列.NET Framew

2009-08-17 16:59:47

C#轉義字符雙引號

2009-09-10 17:37:01

C# get post
點贊
收藏

51CTO技術棧公眾號