摘要:隨著地理信息技術(shù)應(yīng)用的深入,尤其是大型企業(yè)的空間信息數(shù)據(jù)越來越多,對(duì)空間數(shù)據(jù)的管理要求就越來越多,也越來越高。優(yōu)化最終用戶的使用體驗(yàn)、提高數(shù)據(jù)的存取速度,變得越來越重要了。為了實(shí)現(xiàn)這些目標(biāo),本文著重介紹如何創(chuàng)建多版本視圖,以及如何實(shí)現(xiàn)ADO.Net數(shù)據(jù)源對(duì)空間數(shù)據(jù)庫的多表對(duì)多表的數(shù)據(jù)保存。
關(guān)鍵詞:多版本視圖;空間數(shù)據(jù)存??;ADO.Net
中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 20-0000-02
1 引言
隨著地理信息系統(tǒng)的快速發(fā)展,GIS產(chǎn)品也在很多領(lǐng)域廣泛應(yīng)用。眾所周知,地理信息與海量數(shù)據(jù)幾乎是同義詞,所以對(duì)空間數(shù)據(jù)的管理就顯得尤為重要了。基于ArcEngine的二次開發(fā)過程中,使用其提供的方法進(jìn)行數(shù)據(jù)存取時(shí)間開銷大,當(dāng)數(shù)據(jù)量大,業(yè)務(wù)復(fù)雜時(shí)更為明顯。故利用視圖和ADO.Net技術(shù)的優(yōu)勢(shì),來加速數(shù)據(jù)讀取并改善用戶體驗(yàn),是個(gè)好選擇。本文主要討論如何綜合使用視圖、ADO.Net和ArcEngine三種現(xiàn)有技術(shù)實(shí)現(xiàn)上述目標(biāo)。
2 聯(lián)合存取空間數(shù)據(jù)技術(shù)概述
2.1目的
綜合使用三個(gè)技術(shù)進(jìn)行空間數(shù)據(jù)的管理,可以解決單獨(dú)使用ArcEngine技術(shù)存在的效率問題和復(fù)雜性問題,從而提高空間數(shù)據(jù)的讀取速度,改進(jìn)保存數(shù)據(jù)的方式。
2.2存取策略
SDE對(duì)空間數(shù)據(jù)庫進(jìn)行版本注冊(cè)后,各個(gè)要素集同時(shí)存在有基表,A表和D表等多個(gè)數(shù)據(jù)表,故不能用SQL直接查詢,而是要?jiǎng)?chuàng)建多版本視圖來實(shí)現(xiàn)。利用視圖技術(shù),優(yōu)化數(shù)據(jù)庫響應(yīng);利用ADO.Net技術(shù)進(jìn)行數(shù)據(jù)展示和離線編輯;將離線數(shù)據(jù)一次性保存到空間庫時(shí),底層使用ArcEngine的方法實(shí)現(xiàn),中層使用ADO.NET的強(qiáng)類型DataSet,分類處理新建、修改以及刪除的數(shù)據(jù),上層使用若干類實(shí)現(xiàn)ADO.NET多表對(duì)空間庫多表的關(guān)系描述和控制。
3 讀取數(shù)據(jù)的實(shí)現(xiàn)
3.1多版本視圖
多版本化視圖將數(shù)據(jù)庫視圖、存儲(chǔ)過序、觸發(fā)器和函數(shù)整合在一起,用以通過SQL語言訪問地理數(shù)據(jù)庫表中指定版本的數(shù)據(jù)。
下面介紹針對(duì)SQL Server Express創(chuàng)建多版本視圖的方法。
(1)從SDE_TABLE_REGISTRY表中獲取每個(gè)空間數(shù)據(jù)庫中表或要素類的REGISTRATION_ID
(2)從SYS.syscolumns表中查找對(duì)象表包含的列
(3)創(chuàng)建單個(gè)視圖
SELECT Fields, 0 SDE_STATE_ID FROM TableName AS b WHERE (NOT EXISTS
(SELECT SDE_STATE_ID, SDE_DELETES_ROW_ID, DELETED_AT FROM DRegID AS d WHERE (b.OBJECTID = SDE_DELETES_ROW_ID) AND (SDE_STATE_ID = 0))) UNION ALL SELECT Fields,SDE_STATE_ID FROM aRegID AS a WHERE (NOT EXISTS(SELECT SDE_STATE_ID, SDE_DELETES_ROW_ID, DELETED_AT FROM DregID AS d WHERE (a.OBJECTID = SDE_DELETES_ROW_ID) AND (a.SDE_STATE_ID=SDE_STATE_ID)))
上面SQL語句中,TableName為表或要素類的名稱,F(xiàn)ields為第二步的結(jié)果,RegID為第一步中的結(jié)果,替換后可創(chuàng)建針對(duì)單個(gè)要素類的多版本視圖。
(4)創(chuàng)建全部視圖
對(duì)所有需要?jiǎng)?chuàng)建多版本視圖的表或要素類執(zhí)行上一步操作。
3.2 讀取視圖數(shù)據(jù)
通過ADO.NET的強(qiáng)類型DataSet實(shí)現(xiàn)對(duì)多版本視圖的讀取和界面設(shè)計(jì),為日后用戶提供良好的操作體驗(yàn)。
4 保存數(shù)據(jù)的實(shí)現(xiàn)
4.1用于數(shù)據(jù)保存的類
(1)GeoTabType
此類定義了空間數(shù)據(jù)庫中目標(biāo)表的類型。分為表(ITable)和要素類(FeatureClass)。
(2)GeoTabDescribe
該類用于描述空間數(shù)據(jù)庫中某目標(biāo)表。包括表名、類型(GeoTabType)和包含的字段。
(3)GeoTabDescribeList
該類是GeoTabDescribe的集合。該類描述了其內(nèi)包含了哪些表或要素類。
(4)ADOToGeoDescribe
該類描述了一對(duì)多保存數(shù)據(jù)時(shí),表的對(duì)應(yīng)關(guān)系。 “一”為一個(gè)ADO.Net的DataTable;“多”指的是多個(gè)空間數(shù)據(jù)庫表或要素類,類型為第三步的類。
(5)ADOToGeoDescribeList
該類是描述了多對(duì)多保存數(shù)據(jù)時(shí)的對(duì)應(yīng)關(guān)系。它是第四步中類的集合。通過多次的一對(duì)多描述,來實(shí)現(xiàn)多對(duì)多的描述。
(6)SDEHelper
該類是對(duì)ArcEngine保存方法的封裝。主要提供新添、修改和刪除的方法。這些方法都無事務(wù)操作。
(7)UpdateToGeoDB
根據(jù)ADO.Net數(shù)據(jù)表與要素類的對(duì)應(yīng)關(guān)系,將數(shù)據(jù)保存到空間數(shù)據(jù)庫中。
4.2保存數(shù)據(jù)的主要方法
(1)分別獲取新添、修改和刪除的數(shù)據(jù)
通過DataTable. GetChanges方法,從數(shù)據(jù)源中獲取DataRowState為Added、Modified和Deleted的數(shù)據(jù),組成三個(gè)表。
(2)分別保存上一步的數(shù)據(jù)
調(diào)用SDEHelper類的方法,將上一步得到的數(shù)據(jù)保存到空間數(shù)據(jù)庫中。使用DataRowVersion. Original從DataTable中獲取修改或刪除前的原始版本數(shù)據(jù)。
(3)實(shí)現(xiàn)一對(duì)多保存
將一個(gè)ADO.Net數(shù)據(jù)源中的數(shù)據(jù),保存到多個(gè)空間庫的表或要素類中。方法是對(duì)各表或要素類執(zhí)行一對(duì)一的保存。所有這些保存都無事務(wù)操作。
(4)實(shí)現(xiàn)多對(duì)多保存
通過循環(huán)調(diào)用一對(duì)多保存,實(shí)現(xiàn)多對(duì)多保存,并增加事務(wù)操作。實(shí)現(xiàn)多對(duì)多保存后,可以滿足一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多保存的各種需求。
5 結(jié)論
當(dāng)使用SDE引擎管理中心數(shù)據(jù)庫,各個(gè)子節(jié)點(diǎn)使用SQL Server Express的Personal ArcSDE,使用One Way子到父方式同步復(fù)制,子節(jié)點(diǎn)使用SQL Express編輯數(shù)據(jù)時(shí),采用多版本視圖查看數(shù)據(jù)是很不錯(cuò)的選擇;采用強(qiáng)類型DataSet對(duì)數(shù)據(jù)進(jìn)行展示、編輯,結(jié)合ArcEngine方法保存數(shù)據(jù),充分考慮了系統(tǒng)響應(yīng)、穩(wěn)定性、數(shù)據(jù)安全和用戶體驗(yàn)等因素。將視圖、ADO.Net和ArcEngine三個(gè)技術(shù)聯(lián)合起來存取空間數(shù)據(jù)是一個(gè)相對(duì)綜合、高效的方案。
參考文獻(xiàn):
[1]韓鵬,王泉,王鵬,漆煒,烏萌.地理信息系統(tǒng)開發(fā):ArcEngine方法[M].武漢.武漢大學(xué)出版社,2008.
[2]李崴.Visual Basic .NET編程寶典[M].北京:電子工業(yè)出版社,2005,9.