關昆,馬駿,楊曉峰,肖康
(天津市測繪院,天津 300381)
SQLite是一種基于文件的輕型數據庫產品,主要用于嵌入式應用領域。Spatialite是輕量級數據庫SQLite具有空間數據支持擴展的產品,可以按照OGC標準存取空間數據。它在目前很多移動端地理信息工程項目中取得了廣泛的應用,成為近年來GIS領域的研究熱點之一,在可移植性、輕量級、數據處理速度等方面具有強大的優勢,在普通WebGIS以及桌面應用中也具有廣泛的市場前景。
除此之外,Spatialite能夠跟很多程序語言相結合,比如C#、PHP、Java等,并具有ODBC開發接口。基于上述使用優勢,本文開發了基于Spatialite的數據庫管理與應用系統,通過對數據庫API的調用,實現了矢量數據的入庫、輸出、編輯、管理等功能,滿足輕量級GIS應用中對空間數據庫的需求。
Spatialite是一種基于文件的嵌入式數據庫,它的存儲方式只是一個文件,無需配置和安裝,在運行速度和遷移性方面有著巨大的使用優勢。它占用的資源非常低,被廣泛應用在平板電腦、手機客戶端等輕量級GIS應用中。
對于空間坐標信息的存儲,Spatialite采用專門的表示地理坐標信息的空間字段實現,它包括采用平面直角坐標系的Geometry數據類型和采用地理坐標系的Geography數據類型。前者以平面坐標XY表示,后者以經緯度表示。
根據空間實體的不同,Spatialite支持若干空間數據類型:點(Point)、線(LineString)、面(Polygon)、點集合(MultiPoint)、線集合(MultiLineString)、面集合(Multi-Polygon)等,這幾種不同類型的空間實體記錄構成了復雜的空間信息數據。每一條空間記錄根據空間引用標識(SRID)來對應其基于特定橢圓體的空間引用系統。
Spatialite采用元數據機制來更加高效地檢索和管理地理空間數據。它的元數據表存儲了空間數據的數據表名、空間字段名、空間實體的幾何類型,坐標維數以及坐標參考信息等。Spatialite空間元數據由geometry_column和spatial_ref_sys兩組表來實現。
空間索引是支持空間擴展的數據庫系統的關鍵技術,是快速高效查詢、檢索和顯示地理空間數據的重要指標。其中比較常見的空間索引為網格空間索引、四叉樹空間索引和R樹(R-Tree)索引。目前主流的數據庫產品多采用上述三類空間索引。
Spatialite通常采用R-Tree空間索引機制來提高空間檢索和數據分析的速度,用戶可以為不同的空間數據類型建立索引。建立索引時,R-Tree的每個節點包含一個矩形區域的索引碼,該矩形區域由對應節點的所有子節點的最小包含矩形嵌套組成,因此,將要查詢的幾何圖形用最小邊界矩形來表示,便可以確定集合圖形的空間范圍。建立R-Tree索引可采用SQL擴展函數實現:
CreateSpatialIndex(TableName,ColumnName);
Spatialite提供了一系列內置的空間擴展SQL函數來對空間數據進行操作。
(1)數據查詢
Spatialite的Geometry字段默認以二進制的方式存儲,它包含兩種表述空間對象的標準方式:一個是WKT(the Well-Known Text)形式,另一個是 WKB(the Well-Known Binary)形式,該兩種方式是OGC制定的空間數據的組織規范,WKB以二進制形式描述,WKT以文本形式描述,這兩種形式都包括對象的類型信息和形成對象的坐標信息。
在Spatialite數據庫中,可按照WKT格式展示空間數據:
Select AsText(GeometryColumn_Name)from TableName;
返回結果為對象的坐標信息,包括POINT、LINESTRING、POLYGON類型的坐標值。
(2)數據編輯
Spatialite同樣采用符合OGC標準的基本SQL函數來對空間信息進行插入與編輯。
可通過GeomFromWKB將WKB格式的空間數據轉換為可插入Geometry字段的信息;通過GeomFrom-Text將文本格式的空間數據轉換為可插入Geometry字段的信息,插入到數據庫中。如下語句在表 TableName中插入一條點記錄,坐標為(118.2532,39.4783),SRID為4326,即在WGS84坐標系下插入一個點記錄。
Insert into TableName(ID,Geometry)values(1,GeomFrom-Text(‘POINT(118.2532,39.4783,4326)’);
對于空間記錄更新,同樣采用GeomFromText方法,不同的是將SQL語句Insert改為Update。
(3)空間分析
Spatialite提供了常用的空間分析和計算方法,包括計算空間對象之間的距離、緩沖區計算、求兩個對象之間的交點、計算長度、面積等等。方法包括Intersection、Distance、Area、Length 等。可以將空間分析計算方法與標注SQL函數統一使用,可以提高空間數據庫的運算效率。
系統在.Net環境下基于WPF框架實現,WPF是微軟基于.Net的新一代用戶界面框架,它提供了統一的編程模型、語言和框架,實現了分離界面設計人員與開發人員的工作。WPF本質屬于桌面應用程序,可以方便地訪問和開發局域網內的空間數據庫。系統應用Esri WPF API實現基礎底圖的加載以及空間坐標查詢結果的可視化加載,實現在系統中查看Spatialite空間表記錄信息的位置的目的。如圖1所示:

圖1 Spatialite空間數據庫管理系統開發路線
本文通過引用針對SQLite及其空間擴展的.Net Framework支持驅動,整合在統一的平臺下,所引用的動態庫包括:
(1)Spatialite:System.Data.SQLite.dll
(2)libspatialite-4.dll
對于SQLite通用的SQL語句開發功能,利用System.Data.SQLite庫來完成;而對于Spatialite空間擴展SQL函數,需要利用libspatialite庫來完成。
基于.Net的Spatialite空間數據庫應用與管理系統實現了針對空間數據庫的矢量數據入庫、存儲管理、數據瀏覽、編輯、輸出功能,具備常用的地理信息工程所需要的數據庫功能。通過對不同的矢量數據格式的讀取,具備了多種矢量數據來源的數據庫入庫功能。其體系結構如圖2所示:

圖2 數據庫管理應用系統體系結構
系統的矢量數據入庫功能為Shapefile等各類矢量數據文件提供了向空間數據庫的入庫途徑,利用Spatialite空間擴展SQL結合.Net API來完成,通過對不同格式的空間數據文件進行讀取和分析的,調用SQlite SQL語句完成數據的插入、編輯等操作,流程如圖3所示:

圖3 矢量數據入庫流程
矢量數據輸出功能能夠實現空間數據庫中的表導出為所需要的矢量數據文件,應用.Net API,結合SQlite SQL語句查詢所要輸出的記錄,再通過地理數據的創建、寫入方法來完成數據輸出流程。對于SHP格式的文件寫入,通過 SharpMap類庫來實現;對于DWG格式的文件寫入,通過DWGDirect類庫來實現;對于DXF和KML等文本格式的文件寫入,直接通過.Net類System.IO來實現。流程如圖4所示:

圖4 矢量數據輸出流程
平臺對于矢量數據的瀏覽顯示、編輯等操作,需要有基礎地圖的支撐。本文采用REST地圖服務作為矢量數據管理的基礎底圖,基于Esri API的自適應性,REST地圖來源可以有多種,無論是動態地圖還是瓦片式地圖,都可以加載到平臺來使用。本文采用自定義的切片地圖REST服務作為基礎底圖的使用。
對于空間坐標的讀取結果,系統同樣采用Esri WPF API的 Graphic類來實現,通過構建并指定Graphic的Geometry對象,將符號繪制在GraphicsLayer圖層,實現所讀取的點、線、面坐標的顯示。
數據的編輯與管理模塊包括幾個部分:數據讀取(Select)操作、數據更新(Update)操作、數據新增(Insert)操作。應用SQLite通用SQL語句,結合Spatialite空間擴展SQL函數,實現對空間數據的讀取以及增刪改操作。
在WPF環境下基于.Net框架,采用C#語言進行數據庫開發示例如下:
(1)數據更新(Update)操作:

(2)數據新增(Insert)操作:


空間數據管理系統提供給使用Spatialite的GIS工程使用,它提供了將Shp、DWG等矢量數據文件導入數據庫的功能,為GIS項目提供了數據建庫的基礎準備,并且可以進行常用的數據可視化管理、編輯和導出操作,為后臺數據庫的管理提供便利。
Spatialite空間數據庫管理應用系統如圖5所示:

圖5 Spatialite空間數據庫管理系統
本文介紹了Spatialite空間數據庫的特性,闡述了它的空間存儲機制、空間索引以及空間擴展SQL函數方法,并結合SQLite通用SQL開發以及Spatialite空間擴展SQL函數,引用相應的動態庫,開發了輕量級Spatialite空間數據庫的管理應用系統。該系統基于微軟WPF框架設計,是一個脫離第三方插件的獨立應用,能夠在移動端地理信息系統、輕量級地理信息應用項目中發揮簡單實用的功能。隨著地理信息在多個行業載體中得到越來越多的推廣應用,本文為輕量級的應用領域提供了一個良好的解決方案。
[1]孫榮輝.基于Oracle+Spatial的空間數據一體化存儲研究[D].北京:首都師范大學;2006.
[2] 莊云鵬.基于SQLITE的組態軟件研究與設計[D].廈門:廈門大學;2008.
[3] 朱冰.多源空間數據集成技術及應用[J].測繪與空間地理信息,2011(6):138~139.
[4]李玲,王慶,王慧青.基于Spatialite輕量級空間數據庫的GIS數據管理[J].地理信息世界,2010(4):71~75.
[5]胡偉.SQLite在嵌入式系統上的實現研究[J].計算機與數字工程,2009(2):158~163.
[6]蔣許鋒,王少一,王剛.SQL Server Spatial應用開發研究[J].測繪與空間地理信息,2012(4):107~109.
[7]張會霞.基于SQL Server Spatial的空間數據的組織與查詢[J].測繪與空間地理信息,2012(3):9~11.
[8]柳華橋,王光昇.輕量數據庫Spatialite在AutoCAD中的應用[J].城市勘測,2013(5):46~49.