開(kāi)源空間數(shù)據(jù)引擎MsSQLSpatial項(xiàng)目
這個(gè)項(xiàng)目遵從于OGC Simple Features Specification for SQL Revision 1.1,基于兩個(gè)著名的.NET平臺(tái)下的開(kāi)源GIS項(xiàng)目NetTopologySuite(NetTopologySuite是JTS Topology Suite的C#/.net版本,簡(jiǎn)稱NTS)和SharpMap(一個(gè)基于.net 2.0的Map渲染類庫(kù))來(lái)構(gòu)建,所以劃分為NTS、SharpMap和SqlClr三大模塊,SqlClr這部分為CLR集成實(shí)現(xiàn)代碼。主要實(shí)現(xiàn)了基于SQLServer 2005 CLR集成的空間數(shù)據(jù)庫(kù)相關(guān)封裝。當(dāng)前提供了一個(gè)命令行工具來(lái)支持shape文件和PostGIS的數(shù)據(jù)導(dǎo)入。
開(kāi)發(fā)語(yǔ)言:C Sharp 2.0。
目前版本:Release 0.1.RC2。
許可協(xié)議:GNU LESSER GENERAL PUBLIC LICENSE Version 2.1。
MsSQLSpatial官方給的說(shuō)法是一個(gè)MS SQLServer2005空間擴(kuò)展(Spatial Extensions),確切地說(shuō)它應(yīng)該是一個(gè)專屬于SQLServer2005的空間數(shù)據(jù)引擎。所謂的空間數(shù)據(jù)引擎,其實(shí)就是基于關(guān)系型數(shù)據(jù)庫(kù)的空間數(shù)據(jù)庫(kù)技術(shù)的軟件實(shí)現(xiàn),實(shí)質(zhì)上是個(gè)封裝了空間領(lǐng)域知識(shí)的中間件,GIS等應(yīng)用層通過(guò)這個(gè)中間層與關(guān)系型數(shù)據(jù)庫(kù)交互。
典型的莫過(guò)于GIS開(kāi)發(fā)者都比較熟悉的ESRI ArcSDE,Supermap SDX+等等。那么,這個(gè)MsSQLSpatial與以前的空間數(shù)據(jù)引擎差別在哪里?下文我們將討論這個(gè)問(wèn)題。(實(shí)際上Oracle 10g也支持CLR集成,但在此不進(jìn)行相關(guān)比較。)
基于CLR集成的空間數(shù)據(jù)引擎
顯而易見(jiàn),每一次數(shù)據(jù)庫(kù)技術(shù)與數(shù)據(jù)訪問(wèn)技術(shù)的進(jìn)步發(fā)展都會(huì)帶動(dòng)空間數(shù)據(jù)存儲(chǔ)管理解決方案的進(jìn)步與發(fā)展,就好像關(guān)系型數(shù)據(jù)庫(kù)上BLOB數(shù)據(jù)類型的支持才使得空間數(shù)據(jù)庫(kù)實(shí)現(xiàn)了空間特征數(shù)據(jù)與屬性數(shù)據(jù)一體化存儲(chǔ)管理。
關(guān)于MS SQLServer 2005有哪些新特性,在這里筆者就不再贅述,相信微軟已做了大量宣傳。
且不管廣告如何,作為一個(gè)與整個(gè).NET平臺(tái)緊密集成的全新一代的數(shù)據(jù)庫(kù)產(chǎn)品,我們更關(guān)心它的新特性會(huì)給GIS最重要的組成部分之一“空間數(shù)據(jù)庫(kù)技術(shù)”帶來(lái)什么樣的解決方案。這個(gè)關(guān)鍵,就是它的“CLR集成”。
通過(guò)宿主Microsoft.net Framework 2.0公共語(yǔ)言運(yùn)行時(shí) (CLR),可以在SQLServer 2005上利用.net Framework類庫(kù)和任何如C#、VB、.net、C++/CLI等CLR語(yǔ)言來(lái)開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用,擴(kuò)展用戶自己的類型系統(tǒng)和聚合函數(shù)。許多之前在SQLServer 2000上用T-SQL或擴(kuò)展存儲(chǔ)過(guò)程等編程模型難以實(shí)現(xiàn)的或無(wú)法實(shí)現(xiàn)的任務(wù)現(xiàn)在可以用托管代碼來(lái)完成,譬如幾何計(jì)算這樣具有復(fù)雜邏輯的計(jì)算密集型任務(wù)。
在空間數(shù)據(jù)庫(kù)的設(shè)計(jì)問(wèn)題上,沒(méi)有CLR集成技術(shù)的RDBMS例如SQLServer2000,在涉及查詢腳本的空間表達(dá)時(shí)就出現(xiàn)了問(wèn)題,T-SQL語(yǔ)句難以做到空間關(guān)系和屬性特征聯(lián)合查詢。
因此,空間索引和以二進(jìn)制方式存儲(chǔ)的空間特征數(shù)據(jù)都必須通過(guò)數(shù)據(jù)訪問(wèn)接口獲取出來(lái)映射到空間數(shù)據(jù)引擎這個(gè)中間層還原成空間對(duì)象才能完成空間關(guān)系的判斷。還有點(diǎn)不妙的就是每次涉及空間分析的操作都會(huì)從空間數(shù)據(jù)庫(kù)服務(wù)器中取出一部分冗余的結(jié)果集,如果在I/O密集的情況下則更糟。
SQLServer 2005上,非常顯著的一個(gè)特點(diǎn)是,這類基于CLR集成的開(kāi)發(fā)的.NET應(yīng)用程序集是直接部署在數(shù)據(jù)庫(kù)服務(wù)器上,SQLServer2005在進(jìn)程內(nèi)宿主.net CLR,外部GIS應(yīng)用層可直接與空間數(shù)據(jù)庫(kù)交互時(shí)使用T-SQL語(yǔ)句操作。
我們來(lái)看開(kāi)源空間數(shù)據(jù)引擎MsSQLSpatial的解決方案, MsSQLSpatial用CLR表值函數(shù)封裝了一組簡(jiǎn)單而有效的空間索引實(shí)現(xiàn),在這些CLR表值函數(shù)中實(shí)習(xí)了OGC簡(jiǎn)單特征規(guī)范定義的用于描述各種對(duì)象的空間關(guān)系的空間關(guān)系謂詞,由NTS類庫(kù)提供底層的空間對(duì)象和空間關(guān)系算子,在數(shù)據(jù)庫(kù)進(jìn)程內(nèi)部直接完成空間查詢操作。
SQL Server 2005數(shù)據(jù)庫(kù)CLR集成技術(shù)代碼和數(shù)據(jù)的緊密結(jié)合使我們能夠充分利用服務(wù)器的處理能力。而且因?yàn)樗鼫p少了數(shù)據(jù)層和中間層之間的流量,CLR 函數(shù)也可以利用到SQLServer 2005查詢處理器的并行和優(yōu)化功能。但如果在空間數(shù)據(jù)引擎中完全封裝,這無(wú)異于把密集計(jì)算的任務(wù)完全放在空間數(shù)據(jù)庫(kù)服務(wù)器上,在空間數(shù)據(jù)庫(kù)的I/O量與計(jì)算資源之間如何取舍,這是值得斟酌之處。
開(kāi)源空間數(shù)據(jù)引擎MsSQLSpatial體系架構(gòu)
MsSQLSpatial展望
MsSQLSpatial是開(kāi)源GIS網(wǎng)站Freegis.org于2006年8月份加入的一個(gè)新開(kāi)源項(xiàng)目,更新比較頻繁。正由于其剛剛開(kāi)始,可能作者忙于調(diào)整架構(gòu)和實(shí)現(xiàn)相關(guān)應(yīng)用,所以相關(guān)文檔和介紹相當(dāng)?shù)纳伲瑢?duì)其長(zhǎng)遠(yuǎn)的發(fā)展規(guī)劃和定位還不得而知。
這個(gè)新生的開(kāi)源項(xiàng)目目前還比較簡(jiǎn)單,沒(méi)有提供構(gòu)建高級(jí)空間索引的能力,進(jìn)行空間查詢時(shí)其僅是對(duì)最小外包矩形(MBR)比較后獲得粗略子集后就通過(guò)一個(gè)委托調(diào)用NTS中空間對(duì)象的操作算子進(jìn)行精確的匹配計(jì)算以獲得目標(biāo)結(jié)果集。
MsSQLSpatial目前也沒(méi)有柵格數(shù)據(jù)相關(guān)部分,要達(dá)到海量矢量/柵格管理,拓?fù)潢P(guān)系支持、長(zhǎng)事務(wù)、日志、多用戶并發(fā)、權(quán)限控制等商業(yè)層次要求的空間數(shù)據(jù)引擎還有很長(zhǎng)的距離。不過(guò)在這個(gè)技術(shù)體系框架之下,這個(gè)的緊密捆綁目前最好的商業(yè)關(guān)系型數(shù)據(jù)庫(kù)之一與采用先進(jìn)的數(shù)據(jù)庫(kù)編程模型的開(kāi)源空間數(shù)據(jù)庫(kù)項(xiàng)目,還是很具發(fā)展?jié)摿Φ模覀兤诖浜罄^版本能夠帶來(lái)更多的東西。
以上就是關(guān)于開(kāi)源空間數(shù)據(jù)引擎MsSQLSpatial的簡(jiǎn)單介紹。