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