袁詠儀 張旭 盧涵宇
摘 要:隨著空間信息技術(shù)的應(yīng)用越來越廣泛,解決用戶應(yīng)用系統(tǒng)與空間數(shù)據(jù)庫間的數(shù)據(jù)傳輸成為充分利用空間數(shù)據(jù)庫的關(guān)鍵問題,而空間數(shù)據(jù)庫引擎能解決上述問題。本文以Mapinfo公司的SpatialWare空間數(shù)據(jù)引擎為例,使用SpatialWare在SQL Server 2000上構(gòu)建了空間數(shù)據(jù)庫,通過編程實(shí)現(xiàn)地理空間數(shù)據(jù)的透明訪問、共享和互操作等功能,從而建立真正意義上的分布式空間地理數(shù)據(jù)庫。
關(guān)鍵詞:SpatialWare;空間數(shù)據(jù)庫;空間數(shù)據(jù)引擎;空間索引;空間查詢
空間數(shù)據(jù)庫,是以描述空間位置和點(diǎn)、線、面、體特征拓?fù)浣Y(jié)構(gòu)的位置數(shù)據(jù)及描述這些特征的屬性數(shù)據(jù)為對象的數(shù)據(jù)庫,它采用關(guān)系數(shù)據(jù)庫來組織管理空間地理數(shù)據(jù)和屬性數(shù)據(jù),提供對這些數(shù)據(jù)的有效存儲查詢和分析??臻g數(shù)據(jù)庫引擎(Spatial Database Engine,SDE)通過空間數(shù)據(jù)庫引擎實(shí)現(xiàn)客戶/服務(wù)器的分布計算模式,實(shí)現(xiàn)地理空間數(shù)據(jù)的透明訪問、共享和互操作,從而建立真正意義上的分布式空間地理數(shù)據(jù)庫。
1 空間數(shù)據(jù)庫引擎的概念
空間數(shù)據(jù)庫引擎是指提供存儲、查詢、檢索空間地理數(shù)據(jù),以及對空間地理數(shù)據(jù)進(jìn)行空間關(guān)系運(yùn)算和空間分析的程序功能集合。
1.1 基于SpatialWare的數(shù)據(jù)庫引擎具備的基本功能
(1)多用戶權(quán)限和并發(fā)訪問??臻g數(shù)據(jù)庫引擎對不同用戶必須提供不同的權(quán)限,同時提供對用戶的多線程執(zhí)行,支持多用戶對數(shù)據(jù)庫的并發(fā)訪問。
(2)多空間數(shù)據(jù)庫管理。為了滿足人們對分布信息的需求共享,往往需要同時操作若干個空間數(shù)據(jù)庫。這就需要為用戶建立多空間數(shù)據(jù)庫管理,實(shí)現(xiàn)用戶對空間數(shù)據(jù)庫的透明、安全訪問。
(3)空間數(shù)據(jù)索引功能??臻g數(shù)據(jù)庫索引技術(shù)通過篩選,排除大量與特定空間操作無關(guān)的地理對象,從而縮小了空間數(shù)據(jù)的操作范圍,用來提高系統(tǒng)對數(shù)據(jù)獲取的效率。
(4)空間關(guān)系運(yùn)算和空間分析功能。在GIS系統(tǒng)體系結(jié)構(gòu)中,都需要空間數(shù)據(jù)庫引擎對空間數(shù)據(jù)加以處理,提供對空間地理數(shù)據(jù)必要的空間關(guān)系運(yùn)算和空間分析功能。
(5)GSQL語句的解釋執(zhí)行。對用戶提交的GSQL語句進(jìn)行語義分析,根據(jù)GSQL語句的語義,對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行必要的操作,構(gòu)造執(zhí)行結(jié)果。
1.2 基于SpatialWare的空間數(shù)據(jù)模型、結(jié)構(gòu)和存儲方式
SpatialWare空間數(shù)據(jù)模型可分為幾何元素、空間要素、空間實(shí)體、圖層4層結(jié)構(gòu);它的基本數(shù)據(jù)結(jié)構(gòu)有:圖層基本結(jié)構(gòu)、空間實(shí)體基本結(jié)構(gòu)、空間要素基本結(jié)構(gòu)、幾何要素基本結(jié)構(gòu);它的空間數(shù)據(jù)存儲主要包含3個部分:空間數(shù)據(jù)類型,空間數(shù)據(jù)索引,空間運(yùn)算函數(shù)。
2 空間數(shù)據(jù)索引機(jī)制和管理方式
2.1 空間數(shù)據(jù)的索引機(jī)制
空間索引是對存儲在介質(zhì)上的數(shù)據(jù)位置信息的描述,用來提高系統(tǒng)對數(shù)據(jù)獲取的效率。SpatialWare采用的R樹空間索引提供效率。就R樹而言,認(rèn)為有N個實(shí)體被N個外接矩形(Rectangles,R)所包圍,R樹空間索引就是按包含實(shí)體的矩形來確定的,樹的層次表達(dá)了分辨率信息,每個實(shí)體與R樹的結(jié)點(diǎn)相聯(lián)系。
2.2 基于SpatialWare的空間數(shù)據(jù)管理方式
SpatialWare可以建立在兩層或三層結(jié)構(gòu)上。兩層結(jié)構(gòu)指的是系統(tǒng)分為兩部分,包括客戶端和服務(wù)器。在兩層的情況下,SpatialWare服務(wù)器通過SpatialWare中間驅(qū)動與MapInfo客戶溝通,它既作為數(shù)據(jù)服務(wù)器也作為空間處理服務(wù)器。三層架構(gòu)包括客戶,中間服務(wù)器/客戶層及服務(wù)器。最高一層處理用戶接口和數(shù)據(jù)流的問題,中間服務(wù)器/客戶層專門處理申請,底層則進(jìn)行數(shù)據(jù)管理。在三層的情況下,可以把空間數(shù)據(jù)處理和數(shù)據(jù)服務(wù)器放在一臺計算機(jī)上,中間使用SpatialWare接口(ODBC or C-API)和用戶互動。
3 構(gòu)建基于SpatialWare的空間數(shù)據(jù)庫
在使用空間數(shù)據(jù)表前,必須向表中加入空間字段,同時還應(yīng)該建立一個R樹索引。如果表是通過Mapinfo EasyLoader或者是Mapinfo Professional方法生成的,那么空間化數(shù)據(jù)庫所必需的字段和索引已經(jīng)被自動創(chuàng)建了,不必要手動創(chuàng)建。
3.1 空間數(shù)據(jù)庫的創(chuàng)建
經(jīng)過空間化的表中必須包含st_spatial類型的字段,這個字段用于保存空間幾何數(shù)據(jù),在默認(rèn)的情況下該字段名是SW_GEOMETRY,也可以是其他合法的名字。創(chuàng)建空間數(shù)據(jù)庫的方法是在一個普通關(guān)系數(shù)據(jù)庫中加入空間數(shù)據(jù)庫所需要的空間數(shù)據(jù)類型,空間數(shù)據(jù)處理函數(shù)和空間索引機(jī)制等內(nèi)容。以SpatialWare為例創(chuàng)建空間數(shù)據(jù)庫必須先建立一個普通數(shù)據(jù)庫,然后利用exec sp_spatialize_db對數(shù)據(jù)庫進(jìn)行空間化操作。
3.2 空間數(shù)據(jù)表的創(chuàng)建
創(chuàng)建空間數(shù)據(jù)表主要有3種方式:采用EasyLoader上傳空間數(shù)據(jù);采用T-SQL命令創(chuàng)建空間數(shù)據(jù)表或者空間化數(shù)據(jù)庫中的現(xiàn)有表;使用Mapinfo Professional把打開的地圖數(shù)據(jù)保存到數(shù)據(jù)庫中。一張空間數(shù)據(jù)表還必須包含一個非空、唯一的integer類型的關(guān)鍵字段。這個字段用來維護(hù)空間字段和R樹索引(spatialzed columns and R-tree indexing)。
本文采用T-SQL命令創(chuàng)建空間數(shù)據(jù)表,具體實(shí)現(xiàn)方法如下:
create table spatialtable(
sw_member integer not null IDENTITY Primary Key,
sw_geometry st_spatial)
新建表名:spatialtable 關(guān)鍵字段:sw_member,非空、唯一的integer類型
geometry字段:sw_geometry
3.3 空間索引的創(chuàng)建
使用T-SQL 命令為SpatialWare創(chuàng)建空間索引
exec sp_sw_create_rtree '','