陳俊明
(1.福建省基礎(chǔ)地理信息中心,福建 福州 350003)
Spatialite在移動端離線數(shù)據(jù)解決方案中的應(yīng)用研究
陳俊明1
(1.福建省基礎(chǔ)地理信息中心,福建 福州 350003)
簡要分析了移動終端數(shù)據(jù)調(diào)用的主要方式,尤其是離線數(shù)據(jù)的調(diào)用格式,重點(diǎn)介紹了Spatialite空間數(shù)據(jù)庫原理,探討了其應(yīng)用于離線空間數(shù)據(jù)查詢分析的可行性,最后根據(jù)實際業(yè)務(wù)需求,實現(xiàn)了基于Spatialite空間數(shù)據(jù)庫的離線數(shù)據(jù)查詢分析與管理。
Spatialite;移動GIS;離線數(shù)據(jù)
目前,移動客戶端加載空間數(shù)據(jù)有在線和離線2種調(diào)用方式。在線的數(shù)據(jù)調(diào)用方式實質(zhì)是訪問已發(fā)布的各種地圖服務(wù),不僅可以實現(xiàn)基本的地圖瀏覽操作與屬性查詢功能,還能滿足用戶對空間分析與幾何運(yùn)算的功能需求,但也存在一定的局限性:第一,用戶并不一定始終處于有網(wǎng)絡(luò)的環(huán)境中;第二,復(fù)雜的空間分析與幾何運(yùn)算需要頻繁地與服務(wù)器進(jìn)行交互,數(shù)據(jù)吞吐量大,對網(wǎng)絡(luò)帶寬要求高。因此,在無法保證網(wǎng)絡(luò)環(huán)境與網(wǎng)絡(luò)帶寬的情況下,離線數(shù)據(jù)調(diào)用方式在實際應(yīng)用中的需求是較為普遍的。
離線地圖數(shù)據(jù)存儲格式主要有4種:json文本、Shapefile、Spatialite以及地圖緩存(*.bundle/*.tpk)[1],均可較好地支持對離線數(shù)據(jù)的加載與瀏覽。但是,json文本需要預(yù)先加載在線服務(wù)下載獲取;Shapefile數(shù)據(jù)獲取方便,但其本身并不提供對離線數(shù)據(jù)的查詢分析接口,且文件類型太多,不利于數(shù)據(jù)的統(tǒng)一管理;地圖緩存(*.Bundle/*.tpk)則因數(shù)據(jù)量太大,拷貝或攜帶都相對不方便,同樣不支持對數(shù)據(jù)的查詢與分析。作為開源的輕量級空間數(shù)據(jù)庫,Spatialite支持SQL語句對幾何類型字段的操作,因此,本研究結(jié)合實際項目需求,在了解和掌握Spatialite空間數(shù)據(jù)庫原理的基礎(chǔ)上,探索研究在移動客戶端實現(xiàn)離線數(shù)據(jù)查詢分析的技術(shù)可行性。
2.1 Spatialite數(shù)據(jù)庫簡介
Spatialite空間數(shù)據(jù)庫是一個簡單、實用的輕量級空間數(shù)據(jù)庫,支持跨平臺空間數(shù)據(jù)操作[2]。按照OGC標(biāo)準(zhǔn)存取空間數(shù)據(jù),支持以ESRI Shapefile、dbf、txt/ csv文本以及*.xls表格等作為數(shù)據(jù)源,不僅支持對一般屬性表的查詢操作,而且提供了豐富的SQL擴(kuò)展函數(shù),用以支持SQL語句操作幾何類型字段,包括各種空間查詢與分析操作。李玲等將Spatialite空間數(shù)據(jù)庫嵌入GPS/PDA的GIS外業(yè)土地調(diào)查系統(tǒng)中,實現(xiàn)了空間數(shù)據(jù)與屬性數(shù)據(jù)的集中管理[3]。同時,作為一個開源類庫,它也提供了豐富的跨平臺二次開發(fā)接口,用戶可在此基礎(chǔ)上進(jìn)行深層次的GIS應(yīng)用開發(fā)。其主要依賴于GNU iconv、Geos、PROJ.4以及FreeXL等開源類庫,其中,Geos與PROJ.4提供了操作幾何對象以及坐標(biāo)重投影的函數(shù)接口。唐群等利用開源數(shù)據(jù)庫Spatialite的空間分析功能和AutoCAD的二次開發(fā)語言O(shè)bjectARX.Net對dwg格式的宗地數(shù)據(jù)進(jìn)行處理,并實現(xiàn)入庫管理[4]。
2.2 Spatialite空間數(shù)據(jù)庫管理
為了高效地管理、查詢與分析矢量空間數(shù)據(jù),Spatialite采用了元數(shù)據(jù)與空間索引機(jī)制。Spatialite空間數(shù)據(jù)庫以*.sqlite/*.db格式的單文件形式存在,易于攜帶或拷貝,適用于不同的操作系統(tǒng)或平臺環(huán)境。入庫后的矢量數(shù)據(jù)表現(xiàn)為一般的屬性表,通過Geometry字段來統(tǒng)一管理空間數(shù)據(jù),而數(shù)據(jù)的基本描述信息則存儲于Spatialite空間元數(shù)據(jù)表中(geometry_columns表、spatial_ref_sys表[3]),包括空間數(shù)據(jù)的表名、空間字段名、空間實體的幾何類型、坐標(biāo)維數(shù)以及坐標(biāo)參考信息等。
Spatialite空間數(shù)據(jù)庫提供了豐富的SQL擴(kuò)展函數(shù),以支持SQL語句操作幾何類型字段,實現(xiàn)對離線空間數(shù)據(jù)的查詢與分析操作,包括Buffer、Intersect、Union等。為了加快數(shù)據(jù)庫的訪問速度,Spatialite通過R-tree索引機(jī)制來提高空間查詢與空間分析的速度[3]。R-tree是一種空間索引數(shù)據(jù)結(jié)構(gòu),是B-tree向多維空間發(fā)展的另一種形式,它將空間對象按范圍劃分,每個節(jié)點(diǎn)都對應(yīng)一個區(qū)域和一個磁盤頁,葉節(jié)點(diǎn)的磁盤頁中存儲其區(qū)域范圍內(nèi)所有空間對象的外接矩形[5]。Spatialite矢量數(shù)據(jù)的R-tree索引實質(zhì)上就是該圖層內(nèi)所有幾何對象的分層MBR索引,建立R-tree索引時,每個節(jié)點(diǎn)包含一個矩形區(qū)域的索引碼,該矩形區(qū)域由對應(yīng)節(jié)點(diǎn)所有子節(jié)點(diǎn)的最小外接矩形(MBR)嵌套組成[3]。Spatialite提供了2種方式:①采用SQL語句建立索引;②采用擴(kuò)展SQL函數(shù)Create SpatialIndex創(chuàng)建索引。為了保證空間索引與數(shù)據(jù)庫的一致性,在完成對空間數(shù)據(jù)庫Insert/Update/Delete等操作后,需要及時同步更新R-tree索引。
本研究在了解掌握Spatialite空間數(shù)據(jù)庫原理的基礎(chǔ)上,根據(jù)實際應(yīng)用中調(diào)用離線數(shù)據(jù)的具體業(yè)務(wù)需求,尤其是離線數(shù)據(jù)的查詢與分析,基于Spatialite空間數(shù)據(jù)庫,統(tǒng)一管理移動客戶端的離線矢量數(shù)據(jù),以XCode4.6.1為開發(fā)平臺,采用Objective-c開發(fā)語言重構(gòu)Spatialite API,并搭建業(yè)務(wù)邏輯層框架,實現(xiàn)對離線數(shù)據(jù)瀏覽、查詢分析等,具體技術(shù)流程如圖1。
3.1 Spatialite空間數(shù)據(jù)庫建庫管理
圖 1 技術(shù)流程圖
Spatialite空間數(shù)據(jù)庫支持*.shp、*.xls、*.txt、*.dbf、*.csv等格式的表格文件作為數(shù)據(jù)源,創(chuàng)建或?qū)牒蟮臄?shù)據(jù)以table形式存在。Spatialite提供2種方式用以操作數(shù)據(jù)庫,包括可視化界面操作(Spatialite GUI)與命令行方式。
1)Spatialite GUI是一款具有可視化界面的Spatialite數(shù)據(jù)庫管理工具,主要是通過SQLite DBMS引擎,能夠支持幾何字段操作的擴(kuò)展SQL函數(shù)、虛擬shape、虛擬文本、虛擬網(wǎng)絡(luò)以及R-tree和Mbrcache來組織和管理空間數(shù)據(jù)[6]。通過Spatialite GUI可以創(chuàng)建一個后綴名為sqlite或db的Spatialite數(shù)據(jù)庫文件,并通過“Load Shapefile”或“Virual Shapefile”導(dǎo)入shape矢量數(shù)據(jù)。操作過程中需要注意編碼類型的選擇,錯誤的編碼類型易導(dǎo)致中文字段亂碼,同時還要保證SRID對應(yīng)的空間參考系統(tǒng)與矢量圖層一致,其空間數(shù)據(jù)存儲在Geometry字段中,最后需要對入庫后的空間數(shù)據(jù)建立R-tree索引。
2)命令行的操作流程主要包括3個步驟:①利用spatialite_init(0)初始化數(shù)據(jù)庫;②sqlite3_open()函數(shù)可以打開或創(chuàng)建數(shù)據(jù)庫,對于指定的數(shù)據(jù)庫路徑,若存在,則直接打開,否則創(chuàng)建并打開數(shù)據(jù)庫;③利用sqlite3_exec()執(zhí)行SQL語句,完成對表的各種操作[7]。
Spatialite空間數(shù)據(jù)庫不僅支持對非空間數(shù)據(jù)表的創(chuàng)建、查詢、刪除、更新等操作,同時,還提供了豐富的SQL擴(kuò)展函數(shù),用以支持對空間數(shù)據(jù)表的空間查詢與空間分析。幾何對象的空間查詢主要有2種方式:①查詢2個幾何對象的真實空間位置關(guān)系;②查詢2個幾何對象的最小外接矩形的空間位置關(guān)系,即近似空間位置關(guān)系。
由于第2種方式的查詢結(jié)果無法代表幾何對象之間的真實空間關(guān)系,因此,本研究采用第1種方式??蓸?gòu)造SQL語句:“select * from table name where intersects(geom1 Geometry,geom2 Geometry)”,完成對空間數(shù)據(jù)的空間查詢與分析,其中intersects為擴(kuò)展的SQL函數(shù),可利用sqlite3_prepare()執(zhí)行上述語句,并將查詢到的結(jié)果保存到sqlite3_stmt對象中。最后,利用sqlite3_step(stmt)命令可依次取出結(jié)果集中的每條記錄,以供進(jìn)一步的顯示分析操作。
3.2 Spatialite API重構(gòu)與應(yīng)用開發(fā)
本研究以XCode4.6.1為開發(fā)平臺,采用Objective-c開發(fā)語言,集成GNU iconv、Geos、PROJ.4以及FreeXL等開源類庫,對Spatialite API進(jìn)行重構(gòu)、重編譯,并在此基礎(chǔ)上,根據(jù)實際業(yè)務(wù)功能需求,進(jìn)行二次API設(shè)計與封裝,包括查詢分析、圖層管理與配置(包括字段)以及系統(tǒng)管理等API接口與數(shù)據(jù)對象(圖2)。最后利用二次封裝的API接口,設(shè)計并實現(xiàn)了綜合查詢、POI查詢、圖層管理(包括書簽、字段以及Shapefile的管理與配置)、地圖標(biāo)繪以及系統(tǒng)管理等,并重點(diǎn)解決了離線矢量數(shù)據(jù)的查詢與分析,實現(xiàn)了在IPAD端對離線矢量數(shù)據(jù)的點(diǎn)擊查詢(Identify)與緩沖區(qū)分析以及結(jié)果展示,如圖3、圖4。
圖2 業(yè)務(wù)邏輯框架接口
圖3 綜合查詢
本文簡要介紹了當(dāng)前移動客戶端調(diào)用空間數(shù)據(jù)的2種主要方式,并在了解掌握Spatialite空間數(shù)據(jù)庫原理的基礎(chǔ)上,提出了基于Spatialite解決移動客戶端無法對離線地圖數(shù)據(jù)進(jìn)行查詢分析操作的局限性。主要介紹了Spatialite GUI與命令行2種方式統(tǒng)一管理離線矢量數(shù)據(jù),并基于原生的Spatialite API,進(jìn)行重構(gòu)、重編譯,生成靜態(tài)庫,根據(jù)實際項目中的功能需求,基于該靜態(tài)庫進(jìn)行二次API接口設(shè)計與封裝,搭建數(shù)據(jù)業(yè)務(wù)邏輯層框架,實現(xiàn)了地圖瀏覽、書簽管理、地圖標(biāo)繪、快速定位、地圖管理、綜合查詢以及空間查詢等功能,解決了在移動客戶端無法對離線矢量數(shù)據(jù)進(jìn)行空間查詢與空間分析操作的局限性。下一步的研究重點(diǎn)是進(jìn)一步優(yōu)化離線矢量數(shù)據(jù)的繪制與查詢分析效率。
圖4 空間查詢分析
[1] 百度文庫.ArcGIS移動客戶端離線底圖的幾種解決方案[EB/ OL].http:// wenku.baidu.com /view/b265102eed630b1c59 eeb594.html,2014-05-16
[2] Wikipedia. SpatiaLite [EB/OL].http://en.wikipedia.org/wiki/ SpatiaLite,2014-05-18
[3] 李玲,王慶,王慧青.基于Spatialite輕量級空間數(shù)據(jù)庫的GIS數(shù)據(jù)管理[J].地理信息世界, 2010,8(4):71-75
[4] 唐群,韋源生,勞景寮.利用Spatialite數(shù)據(jù)庫處理宗地數(shù)據(jù)及GIS入庫實現(xiàn)[J].桂林理工大學(xué)學(xué)報,2013,33(1):90-94
[5] 百度文庫.R-tree [EB/OL].http://baike.baidu.com/view/5086047.htm?fr=aladdin, 2014-05-18
[6] OSGeo-Live.SpatiaLite快速入門 [EB/OL].http://live.osgeo.org/zh/quickstart/spatialite_ quickstart.html,2014-05-20
[7] GDAL.SQLite/Spatialite RDBMS [EB/OL].http://www.gdal.org/drv_sqlite.html,2014-05-20
P208
B
1672-4623(2015)02-0068-03
10.3969/j.issn.1672-4623.2015.02.025
陳俊明,碩士,研究方向為空間數(shù)據(jù)庫管理。
2014-09-18。
項目來源:福建省科技廳產(chǎn)學(xué)研資助項目(2012Y4001);福建省測繪地理信息局局校合作資助項目(2013S17);福建省測繪地理信息局2013~2014年科技基金資助項目。