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