1地理信息系統的發展
地理信息系統(GIS:Geographic Information System)作為一門綜合性的技術,是一種對空間數據進行采集、存儲、更新、分析、輸出等處理的工具,而軟件是其核心內容之一。GIS技術的發展,在軟件模式上經歷了功能模塊、包式軟件、核心式軟件,從而發展到組件式GIS和WebGIS的過程。傳統GIS雖然在功能上已經比較成熟,但是由于這些系統多是基于十多年前的軟件技術開發的,屬于獨立封閉的系統。同時,GIS軟件變得日益龐大,用戶難以掌握,費用昂貴,阻礙了GIS的普及和應用。組件式GIS的出現為傳統GIS面臨的多種問題提供了全新的解決思路。
2 組件式GIS
2.1 組件式GIS的基本思想及特點
組件式GIS(Components GIS,以下簡稱ComGIS)是指基于組件對象平臺,具有標準的接口,允許跨語言應用,因而使GIS軟件的可配置性、可擴展性和開放性更強,使用更靈活,二次開發更方便。其基本思想是把GIS的各大功能模塊劃分為幾個控件,每個控件完成不同的功能。各個GIS控件之間,以及GIS控件與其它非GIS控件之間,可以方便地通過可視化的軟件開發工具集成起來,形成最終的GIS應用。
把GIS的功能適當抽象,以組件形式供開發者使用,將會帶來許多傳統GIS工具無法比擬的優點。主要優點:
(1)小巧靈活、價格適中,性價比高;
(2)無須利用專門GIS開發語言,可直接嵌入MIS開發工具進行開發;
(3)可以實現強大的GIS功能;
(4)開發更簡捷,代碼實現簡易。
2.2 目前流行的組件式GIS軟件平臺
目前應用比較廣泛的是:MapInfo開發的MapX以及ERIS公司開發的MapObjects。下面將重點對利用MapInfo公司開發的MapX進行GIS軟件開發特點以及主要過程進行分析。
MapX是具有強大地圖分析功能的ActiveX控件產品,能支持絕大多數標準的可視化開發環境如Visual C++、VisualBasic、Delphi、PowerBuilder等。編程人員在開發過程中可以選用自己最熟悉的開發語言,輕松地將地圖功能嵌入到應用中,并且可以脫離MapInfo的軟件平臺運行。MapX提供了各種工具、屬性和方法,熟練的運用這些工具、屬性、方法通過編程可以滿足不同開發需求。
用MapX開發ComGIS系統的基本方法如下圖1示:
2.3 MapX簡介
2.3.1 MapX的數據組織
MapX中的數據分為空間數據和屬性數據.其中圖形矢量數據以MapInfo標準文件格式.tab存貯和管理,屬性數據用關系數據庫進行管理,屬性數據和空間數據之間通過目標標識進行關聯??臻g數據在MapX控件中采用分層存放的結構,每張單獨的地圖被表示成一個圖層,每個圖層存儲為4個基本文件:屬性數據的表結構文件.tab,屬性數據文件.dat,交叉索引文件.id,空間數據文件.map. 這種分層存放的結構,可以提高圖形的搜索速度,便于各種不同數據的靈活調用、更新和管理。屬性數據是用來反映與空間實體相對應的屬性,在系統中用關系數據庫的二維關系表進行存儲和管理。
2.3.2 MapX的模型結構
MapX組件的基本組成單元是Object(單個對象)和Collection(集合)。其中集合包括對象,是多個對象的組合。每種對象和集合負責處理地圖某一方面的功能.位于頂層的是Map對象,Layers、DataSets、Annotations是Map對象下面的3個重要的分支。其中Layer主要用于操作地圖的圖層,DataSet用于實現地圖與數據的綁定,訪問空間數據表,Annotation用于在地圖上增加文本或者符號。
3 利用VB,MapX,SQL開發ComGIS系統
結合筆者所開發的一個電力地理信息系統來看如何開發ComGIS系統。
3.1 編輯功能實現
?屬性數據的編輯
包括對高壓線路,配電線路,電力電纜線路,變電站,配電變壓器,道路,建筑物,行政區域等屬性數據庫表的錄入與修改??刹捎肧QL Server等關系數據庫來存儲,這樣便于數據的維護和共享使用。
?圖形數據的編輯
包括對圖形對象點,線,面錄入與修改,以及對其風格進行編輯。
GeoSet是在Geo Manager中建立好的GST文件,是圖層及其設置的集合,控制程序中顯示的地圖,對圖層進行編輯和管理.通過對GeoSet屬性賦值可方便的引入所需的地圖集,并在引入的同時對Map對象初始化。
Map1.GetSet=opendialog1.filename // 從地圖文件夾中引入地圖
對于由圖層組織起來的MapX地圖,可通過對圖層的創建、增加、刪除、移動、縮放等來編輯,還可以創建用于實時跟蹤的活動圖層和可繪制特殊圖形的用戶自定義圖層。
Set lyrMyLayer=Map1.Layers.CreateLayer("MyLayer", , 1) // 新創建一個圖層
Set Map1.Layers.AnimationLayer=lyrMyLayer // 將新建的圖層設置為活動圖層
通過MapX提供給用戶的一些通用工具,對Map對象的Current Tool屬性賦值,可方便的實現一些諸如放大、縮小、漫游等多種GIS基本操作功能。還可以使用自定義工具來增強這方面的功能。
Map1.ZoomTo(x1,y1,x2,y2); // 將地圖窗口縮放到某一特定位置
Map1.Rotation=45; // 將當前地圖窗口旋轉45度
Map1.CurrentTool=miPanTool; // 實現地圖漫游
Map1.CurrentTool=miLableTool; // 指定位置加標注
Map1.CreateCustomTool MyTool,miToolTypeLine,miSizeAllCursor // 創建標尺工具
MapX提供了四種類型的Feature對象:區域、點、線、文本可通過訪問、修改、刪除及自定義feature對象的各種屬性來實現對地圖的編輯。
Dim f As MapXLib.Feature
Dim ps As MapXLib.Points
ps.AddXY x1,y1
ps.AddXY x2,y2 // 畫線
Setf=Map1.Layers(1).AddFeature(Map1.FeatureFactory.CreateLine(ps,Map1.DefaultStyle))
3.2 查詢功能實現
MapX以Dataset對象提供的方法進行數據綁定,實現與數據庫交互,從而實現對圖形的屬性信息查詢或通過屬性信息查詢空間目標。對于設備等的信息管理,可根據圖庫數據一致性對圖形和屬性進行空間查詢。
數據綁定: Dim parm As New ODBCQueryInfo
parm.SqlQuery = "select * from 數據表名"
parm.DataSource = "數據庫名 " // ODBC數據源名字
parm.ConnectString = "ODBC; "
Set ds = Map.Datasets.Add(miDataSetODBC, parm)
區域查詢:可查詢任何一個區域圖元中編輯圖層在該區域中的圖元數,既可實時顯示某一范圍內的各種需要的地理信息,又可通過這種方式來判斷地理元素之間的相對位置及關系,從而進一步分析基于地理接線圖的空間連接關系,實現網絡分析,跟蹤和動態著色。
//查詢編輯圖層上矩形區域內圖元
Dim rect As MapXLib.Rectangle
Dim curFeatures As MapXLib.Features
rect.set(x1,y1,x2,y2)
Set curFeatures = searchLayer.SearchWithinRectangle(rect,searchType)
查找定位:確定查找圖層,找到匹配圖元并將地圖放大,查找結果定位到地圖中央。
Dim FindObj As MapXLib.Find //據數據庫中的字段值進行查找定位
Dim FoundFeature As FindFeature
Set FindObj = Map1.Layers("圖層名稱").Find
Set FindObj.FindDataset = Map1.Datasets("圖層名稱"&"dataset")
Set FindObj.FindField = FindObj.FindDataset.Fields("域名")
Set FoundFeature = FindObj.Search ("域值")
If (FoundFeature.FindRC Mod 10 = 1) Then
Map1.Zoom To 縮放值, FoundFeature.CenterX, FoundFeature.CenterY
3.3 分析功能實現
?地理運算
測量兩個地理對象間的直線、折線距離等地理運算,需要注意的是鼠標在MapX組件中截獲的點的坐標是屏幕坐標,而在計算中我們往往是使用MapX中的地理坐標系,所以坐標轉換是經常而且必要的步驟。Map1.CreateCustomTool (CUSTOM_MEASURE_TOOL,miToolTypeLine,miCrossCursor,miArrowCursor,
miArrowCursor,unusedParam)//自定義客戶工具
Private Sub Form_MouseMove (Button As Integer,Shift As Integer, X As Single, Y As Single)
……
If Map1.CurrentTool=CUSTOM_MEATURE_TOOL Then
Map1.ConvertCoord x1, y1, Coordx1,Coordy1, miScreenToMap
distance=Map1.Distance(XDown,YDown,Coordx1,Coordy1) // 對兩點距離進行計算
End If
End Sub
?空間分析
系統支持空間對象的緩沖區分析及多種專題圖分析(范圍值專題圖、獨立值專題圖、點密度專題圖、等級符號專題圖、直方圖專題圖、餅圖專題圖)。可根據數據庫中不同字段生成相應專題圖,通過選擇不同的專題圖種類,得到各種直觀的專題圖信息。
Dataset.Themes.Add (專題圖類型,字段名,專題圖名稱)
Legend對象用于修改專題地圖的圖例;Themeproperties用于修改專題圖的顯示屬性.還可利用專題圖來動態顯示帶電區、停電區和恢復路徑,基于某一屬性可表達出不同的區域及線對象。
3.4 地圖導出的實現
MapX以矢量化的形式,將地圖對象存儲在地圖文件,只有在安裝了MapX或Mapinfo相應產品的客戶機上才能夠顯示地圖,而利用MapX提供的導出功能,將地圖對象轉換成BMP等標準的光柵圖形格式,就可供其他應用程序使用了。
Map1.ExportMap(Location,Format,[W],[H]) Location:導出后的光柵圖像文件名
Format:導出時的格式
[W]:導出時的橫向放大倍數 [H]:導出時的縱向放大倍數
Map1.ExportMap("c:\pincture\pic1.jpg",miFormatJPEG,2,2),則將當前地圖導出到c:\picture\pic1.jpg文件中,并將地圖縱,橫同時放大為原來的兩倍
4 結束語
在實際的開發過程中可以根據具體的需要來選擇開發方式。筆者利用MapX和VB,SQL實現的電力GIS系統,不僅開發周期短,而且系統運行穩定,具有很好的可擴充性。相信隨著GIS技術的發展以及市場需求不斷增加,組件式GIS技術會得到更廣泛的應用。