孟 露
(1.東北林業(yè)大學(xué),黑龍江 哈爾濱 150040)
基于ArcSDE的哈爾濱市GIS空間數(shù)據(jù)管理系統(tǒng)
孟 露1
(1.東北林業(yè)大學(xué),黑龍江 哈爾濱 150040)
介紹了基于ArcSDE的哈爾濱市GIS空間數(shù)據(jù)管理系統(tǒng)的總體結(jié)構(gòu)、功能設(shè)計(jì)、功能模塊流程、功能的實(shí)現(xiàn)以及運(yùn)行情況,為GIS空間數(shù)據(jù)管理系統(tǒng)的開發(fā)提供一個(gè)應(yīng)用實(shí)例。
ArcSDE;GIS空間數(shù)據(jù);功能設(shè)計(jì);程序流程;總體結(jié)構(gòu)
系統(tǒng)結(jié)構(gòu)總體上是以客戶端/服務(wù)器體系架構(gòu)為基礎(chǔ),在邏輯上分為3層,分別為界面層、基礎(chǔ)功能層和數(shù)據(jù)引擎層。3層之間的功能相對獨(dú)立,系統(tǒng)可以方便地進(jìn)行擴(kuò)展。
基礎(chǔ)功能層主要由數(shù)據(jù)查詢、屬性編輯、圖形編輯、專題地圖制作等組件構(gòu)成。對這些組件進(jìn)行封裝,然后通過定義接口或消息驅(qū)動(dòng)等方式供用戶使用。
界面層主要由界面控制、地圖顯示和柵格顯示等構(gòu)成[1]。界面層根據(jù)系統(tǒng)要求,按照技術(shù)設(shè)計(jì)封裝系統(tǒng)的各項(xiàng)功能,使系統(tǒng)基礎(chǔ)功能層與界面層相互分離,這樣在系統(tǒng)界面發(fā)生改變和調(diào)整時(shí),系統(tǒng)的各項(xiàng)功能保持不變。
數(shù)據(jù)引擎層是為前臺應(yīng)用程序與后臺數(shù)據(jù)庫進(jìn)行交互而設(shè)計(jì),包括與數(shù)據(jù)庫進(jìn)行連接,對數(shù)據(jù)庫進(jìn)行查詢、檢索、更新、添加、存儲、空間分析等操作。數(shù)據(jù)庫通過數(shù)據(jù)引擎層接受來自前臺應(yīng)用程序的請求,經(jīng)過后臺數(shù)據(jù)庫的處理,將處理結(jié)果發(fā)送給前臺應(yīng)用程序。
系統(tǒng)采用基于COM/DCOM組件的GIS開發(fā)模式,利用ArcEngine 9.2進(jìn)行開發(fā),以ArcSDE API為空間數(shù)據(jù)庫引擎與后臺Oracle數(shù)據(jù)庫的Geodatabase空間數(shù)據(jù)進(jìn)行交互,采用C#高級開發(fā)語言,開發(fā)環(huán)境為Visual Studio 2005。系統(tǒng)界面如圖1所示。
基于ArcSDE的哈爾濱市GIS空間數(shù)據(jù)管理系統(tǒng)的整體功能結(jié)構(gòu)如圖2所示。
圖1 系統(tǒng)界面
圖2 系統(tǒng)功能結(jié)構(gòu)圖
按照3層系統(tǒng)結(jié)構(gòu)的總體設(shè)計(jì)要求,功能模塊設(shè)計(jì)也分為3層,分別為基礎(chǔ)功能模塊、空間數(shù)據(jù)入庫模塊和控件功能模塊。基礎(chǔ)功能模塊包括空間數(shù)據(jù)編輯子模塊、空間數(shù)據(jù)查詢與分析子模塊,該模塊主要完成空間數(shù)據(jù)編輯、查詢與分析等GIS基礎(chǔ)功能,空間數(shù)據(jù)入庫模塊主要完成空間數(shù)據(jù)引擎的功能,控件功能模塊作為界面層主要完成界面層的功能。
3.1 基礎(chǔ)功能模塊
3.1.1 空間數(shù)據(jù)編輯子模塊
對空間數(shù)據(jù)的編輯流程如圖3所示。在空間數(shù)據(jù)編輯模塊中,編輯的主要對象是圖形數(shù)據(jù)和屬性數(shù)據(jù),圖形數(shù)據(jù)可分為地名、鐵路、街道、房屋等圖層,分別存儲在不同的工作空間中,屬性數(shù)據(jù)以二維表的形式存儲。要獲得這些圖形數(shù)據(jù),必須先獲取這些圖形數(shù)據(jù)所在的工作區(qū)間,因此,該模塊設(shè)計(jì)了打開、連接和設(shè)置工作空間的功能,完成工作空間設(shè)置后,就可以激活空間數(shù)據(jù)編輯功能,使用編輯工具對圖形數(shù)據(jù)進(jìn)行添加、編輯和刪除等操作。其主要的編輯操作包括添加和刪除圖形要素、編輯圖形和其相應(yīng)的屬性數(shù)據(jù)以及編輯要素類型等,最后將編輯完成的空間數(shù)據(jù)存儲到空間數(shù)據(jù)庫中。
圖3 空間數(shù)據(jù)編輯子模塊流程圖
3.1.2 空間數(shù)據(jù)查詢與分析子模塊
空間數(shù)據(jù)查詢與分析功能的程序流程如圖4所示??臻g數(shù)據(jù)查詢與分析是系統(tǒng)的重要功能,包括查詢分析、疊加分析、緩沖區(qū)分析、鄰域分析等[3]??臻g數(shù)據(jù)分為矢量數(shù)據(jù)和柵格數(shù)據(jù)兩類,都是以分層結(jié)構(gòu)組織。該模塊設(shè)計(jì)了圖層選擇功能,可通過該功能選擇要查詢與分析的數(shù)據(jù)圖層。該模塊還設(shè)計(jì)與開發(fā)了幾何圖形工具集,利用這些工具選擇要查詢與分析的空間范圍后,就可以對這個(gè)空間范圍內(nèi)的空間對象進(jìn)行包含查詢、交叉查詢、鄰接查詢等操作。還設(shè)計(jì)了緩沖區(qū)功能,可對矢量數(shù)據(jù)與柵格數(shù)據(jù)的點(diǎn)、線、面建立緩沖區(qū)。
3.2 空間數(shù)據(jù)入庫模塊
空間數(shù)據(jù)入庫功能的程序流程如圖5所示。系統(tǒng)使用ArcSDE作為空間數(shù)據(jù)庫引擎, Oracle10g作為后臺數(shù)據(jù)庫。首先通過設(shè)置ArcSDE的配置參數(shù)連接前臺應(yīng)用程序與后臺數(shù)據(jù)庫,參數(shù)配置過程可以反復(fù)進(jìn)行直至連接成功[2]。
圖4 空間數(shù)據(jù)查詢與分析流程圖
圖5 空間數(shù)據(jù)入庫流程圖
需要存儲到Oracle數(shù)據(jù)庫的空間數(shù)據(jù)包括矢量數(shù)據(jù)和柵格數(shù)據(jù)(影像)。該模塊可選擇不同類型的空間數(shù)據(jù)并對這些空間數(shù)據(jù)進(jìn)行檢查與修復(fù)。如果要入庫的空間數(shù)據(jù)為矢量數(shù)據(jù),該模塊需檢查該數(shù)據(jù)的完整性、拓?fù)潢P(guān)系正確性等;如果要入庫的空間數(shù)據(jù)為柵格文件,該模塊也能檢查該數(shù)據(jù)的完整性。檢查后,如果數(shù)據(jù)符合入庫的要求,就會(huì)把這些數(shù)據(jù)存儲到Oracle數(shù)據(jù)庫中,并提示用戶為數(shù)據(jù)文件重新命名,如果不符合,則重新選擇空間數(shù)據(jù)。
3.3 控件功能模塊
系統(tǒng)中各控件的運(yùn)行流程如圖6所示。GIS空間數(shù)據(jù)管理系統(tǒng)中會(huì)有很多不同功能的控件來構(gòu)成整個(gè)系統(tǒng)的控件集合,各控件之間按照應(yīng)用需求有不同的邏輯聯(lián)系[4]。該模塊根據(jù)這種邏輯聯(lián)系,設(shè)計(jì)與建立了不同功能的控件聯(lián)系。設(shè)計(jì)中采用了對象池的概念,先在對象池中查找要執(zhí)行的控件對象,并對當(dāng)前要執(zhí)行的控件對象是否是該控件對象的接口作出判斷,若當(dāng)前控件對象不存在或者當(dāng)前控件對象不是該控件對象的接口,系統(tǒng)就不執(zhí)行當(dāng)前控件對象的接口,否則就會(huì)對保留前一個(gè)控件對象的必要性作出判斷,如果保留前一個(gè)控件對象是沒有必要的,系統(tǒng)就會(huì)將當(dāng)前要執(zhí)行控件對象的信息窗口彈出來,如果必須保留前一個(gè)控件對象,系統(tǒng)會(huì)恢復(fù)前一個(gè)控件對象的操作結(jié)果;無論是否恢復(fù)對前一個(gè)控件對象的操作結(jié)果,系統(tǒng)都會(huì)判斷當(dāng)前控件對象是否為ITool控件對象的接口,假如當(dāng)前控件對象不是ITool控件對象,系統(tǒng)就執(zhí)行Onclick操作,假如當(dāng)前控件對象是ITool控件對象,系統(tǒng)會(huì)調(diào)用當(dāng)前要執(zhí)行的控件對象工具,并將當(dāng)前控件對象工具綁定到控件上[5],同時(shí)清除前一個(gè)控件對象,并更新系統(tǒng)工具按鈕和菜單狀態(tài)。
圖6 系統(tǒng)控件流程圖
4.1 Shape圖層的創(chuàng)建
首先要在工作空間中創(chuàng)建一個(gè)數(shù)據(jù)集,這個(gè)數(shù)據(jù)集包含table、feature、rasterdataset對象。數(shù)據(jù)集對象分為兩類,一類是table二維表,另一類是geodataset地理數(shù)據(jù)集。地理數(shù)據(jù)集geodataset是由要素?cái)?shù)據(jù)集featuredataset、要素類featureclass、柵格數(shù)據(jù)集rasterdataset和TIN組成[6]。這里要?jiǎng)?chuàng)建的Shape圖層主要就是要素類,程序中給出了點(diǎn)、線、面要素圖層的建立過程,其運(yùn)行結(jié)果如圖7所示。
圖7 創(chuàng)建Shape數(shù)據(jù)
在下列程序中先選擇要素類型即點(diǎn)、線、面,然后利用FieldItem對象創(chuàng)建多個(gè)字段,最后利用CreateFeatureClass對象創(chuàng)建要素類FeatureClass。程序結(jié)束后,在指定的文件夾中就會(huì)生成三個(gè)文件,分別是*. dbf 、*.shp、和*. shx文件。
switch(this.cmbType.SelectedItem.ToString())
{
case "點(diǎn)圖層":
pGeometryType=esriGeometryType.esriGeometryPoint;
break;
case "線圖層":
pGeometryType=esriGeometryType.esriGeometryPolyline;
break;
case "圖層面":
pGeometryType=esriGeometryType.esriGeometryPolygon;
break;
}
ArrayList ArrayFieldInfo=new ArrayList();
for(int i=0;i<this.lstFieldsView.Items.Count;i++)
{
ListViewItem pListViewItem=new ListViewItem();
pListViewItem=lstFieldsView.Items[i];
FieldItem pFieldItem=new FieldItem();
pFieldItem=pListViewItem.Tag as FieldItem;
ArrayFieldInfo.Add(pFieldItem);
}
public static void CreateShapeFile(ArrayList pArrayList, string strGeoFieldName,string strFilePathName,stringstrFileName,esriGeometryType pGeometryType)
4.2 空間數(shù)據(jù)查詢
空間數(shù)據(jù)查詢有空間查詢和屬性查詢兩種,空間查詢是在地圖上查詢一定空間范圍的地理要素,屬性查詢是通過設(shè)定一定的查詢條件,查找滿足條件的地理要素。空間數(shù)據(jù)查詢的實(shí)現(xiàn)方法是在程序中通過IFeatureSelection對象的SelectionSet屬性獲取選擇集,利用IFeatureSelection對象的SelectFeatures方法,使用IQueryFilter過濾器將符合條件的地理要素放入圖層的選擇集中[7]。在圖8中通過選擇點(diǎn)、線、面圖層,設(shè)置字段和字段的唯一值,并通過SQL運(yùn)算符來構(gòu)造SQL查詢語句進(jìn)行空間查詢和屬性查詢。
圖8 空間查詢和屬性查詢
4.3 加載SDE數(shù)據(jù)
加載SDE數(shù)據(jù)主要是使用IWorkspace對象提供的數(shù)據(jù)庫訪問接口,通過設(shè)置數(shù)據(jù)庫連接參數(shù),如數(shù)據(jù)庫名稱、實(shí)例名、用戶名、密碼等來實(shí)現(xiàn)。程序運(yùn)行結(jié)果如圖9所示。
圖9 SDE數(shù)據(jù)加載
public IWorkspace openSDEWorkspace(string S, string I, string U,
string P, string D, string V)
{
try
{
IWorkspace gk = null;
IPropertySet PPS = new PropertySetClass();
IWorkspaceFactory PSF = new SdeWorkspaceFactoryClass();
PPS.SetProperty("server", S);
PPS.SetProperty("instance", I);
PPS.SetProperty("database", D);
PPS.SetProperty("user", U);
10.3969/j.issn.1672-4623.2016.10.018
P208
B
1672-4623(2016)10-0063-04
2016-06-12。
項(xiàng)目來源:黑龍省普通高校重點(diǎn)實(shí)驗(yàn)室項(xiàng)目精化局部似大地水準(zhǔn)面方法研究資助項(xiàng)目(KJKF-14-08)。