范磬亞,鞠海燕
WebGIS是在 Internet或 Intranet網(wǎng)絡(luò)環(huán)境下的一種獲取、存儲(chǔ)、傳輸、分析和顯示地理信息的計(jì)算機(jī)信息系統(tǒng)。目前在 WebGIS應(yīng)用中,地圖數(shù)據(jù)的顯示一般采用兩種方式:柵格地圖或者矢量地圖。顯示柵格地圖,用戶不需要安裝插件,但不能對(duì)圖像進(jìn)行進(jìn)一步的操作和交互。而矢量圖形的顯示是計(jì)算機(jī)軟件通過一定算法,將矢量對(duì)象的描述信息在顯示終端上重繪的結(jié)果,但是速度和可重用性等方面仍然存在很多障礙。SVG是互聯(lián)網(wǎng)聯(lián)盟(W3C)的正式推薦標(biāo)準(zhǔn),是一種基于XML的描述2D可容納矢量圖形、點(diǎn)陣圖像和文本圖像的語言。SVG的出現(xiàn)可以說對(duì)Web GIS空間數(shù)據(jù)發(fā)布提供了一個(gè)開放的解決方案。目前,如何在SVG格式的矢量地圖中實(shí)現(xiàn)復(fù)雜空間分析是一個(gè)有待研究的問題??臻g數(shù)據(jù)管理產(chǎn)品提供了豐富的空間分析函數(shù),可以借助它來實(shí)現(xiàn)SVG圖形的空間分析。但是空間數(shù)據(jù)管理產(chǎn)品只支持其定義的空間數(shù)據(jù)的格式,因此問題的關(guān)鍵是如何實(shí)現(xiàn)SVG和空間數(shù)據(jù)管理產(chǎn)品定義的空間數(shù)據(jù)類型的相互轉(zhuǎn)換。
目前空間數(shù)據(jù)管理產(chǎn)品主要有2種:一種是ESRI推出的ArcSDE,另一種是Oracle公司推出的空間數(shù)據(jù)管理組件Oracle Spatial,本文的研究選擇了Oracle Spatial。在Oracle Spatial的對(duì)象——關(guān)系模型中,一個(gè)空間實(shí)體的空間信息是存在用戶定義的數(shù)據(jù)表中的一個(gè)字段,類型為SDO_GEOMETRY。Oracle Spatial這樣定義SDO_GEOMETRY這個(gè)字段:
SDO_GYTPE:說明該空間實(shí)體的類型。是一個(gè)4個(gè)數(shù)字的整數(shù),其格式為 dltt,其中 d表示幾何對(duì)象的維數(shù);l表示三維線性參考系統(tǒng)中的線性參考值,tt為幾何對(duì)象的類型。
SDO_SRID:一個(gè)預(yù)留屬性,Oracle Spatial計(jì)劃將它作為空間引用的外鍵。
SDO_POINT:由X、Y、Z 3個(gè)NUMBER型的屬性構(gòu)成,如果 SDO_ELEM_INFO和 SDO_ORDINATES都是NULL的話,該對(duì)象便是非空的,X、Y兩個(gè)值用來表示點(diǎn)實(shí)體的坐標(biāo)。否則,SDO_POINT這個(gè)屬性將被忽略。
SDO_ELEM_INFO:定義為一個(gè)可變長(zhǎng)的數(shù)組。每 3個(gè)數(shù)作為一個(gè)元素單位,用于解釋坐標(biāo)是如何存儲(chǔ)在SDO_ORDINATES數(shù)組中的。本文把組成一個(gè)元素的3個(gè)數(shù)稱為3元組。一個(gè)3元組包含以下3部分的內(nèi)容:
a)SDO_ STARTING_OFFSET表明每個(gè)幾何元素的第一個(gè)坐標(biāo)在SDO_ ORD INATES數(shù)組中的存儲(chǔ)位置。它的值從1開始,逐漸增加。
b)SDO_ETYPE 用于表示幾何對(duì)象中每個(gè)組成元素的幾何類型。
c)SDO_INTERPRETATION具有兩層含義,具體的作用由SDO_ETYPE是否為復(fù)雜元素決定。
具體見表1
表1 SDO_ELEM_INFO的值及含義
1003或2003 2由弧線段組成的多邊形,起點(diǎn)與終點(diǎn)必須相同。一個(gè)弧線段由起點(diǎn)、弧上任意一點(diǎn)以及終點(diǎn)組成。相鄰兩段弧的接點(diǎn)不需要重復(fù)存儲(chǔ)。1003或2003 3 矩形,由左下角和右上角兩點(diǎn)確定1003或2003 4 圓,由圓周上的不同三點(diǎn)確定4 n>1由直線段和弧線段連成的復(fù)合線,n表示組成復(fù)合線的相鄰子元素的個(gè)數(shù),子元素的SDO_ETYPE必須為2,一個(gè)子元素的最后一點(diǎn)是下一個(gè)子元素的第一個(gè)點(diǎn),并且該點(diǎn)不能重復(fù)。1005或2005 n>1由直線段和弧線段連成的復(fù)合多邊形,n表示組成復(fù)合多邊形的相鄰子元素的個(gè)數(shù),子元素的SDO_ETYPE必須為2,一個(gè)子元素的最后一點(diǎn)是下一個(gè)子元素的第一個(gè)點(diǎn),并且該點(diǎn)不能重復(fù)。多邊形的起點(diǎn)和終點(diǎn)必須相同。
SDO_ORDINATES:定義為一個(gè)可變長(zhǎng)的數(shù)組,數(shù)組元素類型為NUMBER。用來存儲(chǔ)組成空間實(shí)體邊界的點(diǎn)的坐標(biāo)值。
SVG是由國(guó)際WWW委員會(huì)(W3C)組織為適應(yīng)Internet Web應(yīng)用的飛速發(fā)展需要而制定的一套基于XML語言的可縮放矢量圖形語言描述規(guī)范,用來描述二維矢量圖形和矢量/點(diǎn)陣混合圖形的置標(biāo)語言,其全稱是可擴(kuò)展矢量圖形規(guī)范(Scalable Vector Graphics)。SVG 與目前因特網(wǎng)上常用的JPEG、GIF等網(wǎng)絡(luò)上廣泛使用的圖形格式相比較具有許多優(yōu)點(diǎn):(1)任意縮放性、文件尺寸小。(2)能加快下載瀏覽速度。(3)能實(shí)現(xiàn)方便的圖形定位與檢索。(4)具有豐富的表現(xiàn)效果。(5)具有良好的可重用性。(6)具有跨平臺(tái)功能。
由于W3C組織制定SVG規(guī)范是面向通用圖形圖像的網(wǎng)上發(fā)布,而空間數(shù)據(jù)則具有特殊的和復(fù)雜的數(shù)據(jù)結(jié)構(gòu),則需要了解基于矢量格式的空間數(shù)據(jù)如何在SVG文檔中進(jìn)行組織或表達(dá)。這包含兩方面的內(nèi)容:一是空間數(shù)據(jù)所表示的地物是如何進(jìn)行分類;二是表示各種地物的圖形數(shù)據(jù)是如何在文檔中進(jìn)行組織和表達(dá)。
SVG的路徑(Path)可以是一個(gè)形狀的外框,也可以是用來剪裁的路徑線條,總之就是“一根線”。這根線可以被描邊,可以用來表達(dá)空間,如果封閉的話又可以被填充。路徑是用點(diǎn)的集合來描述的,路徑所使用的描繪方式有moveto、lineto、curveto、arc和closepath等。一個(gè)復(fù)合路徑中還可以含有子路徑,形式相當(dāng)靈活。
Path元素的幾何坐標(biāo)信息定義在d=”……”屬性里,由命令和數(shù)據(jù)參數(shù)組成,命令包括M、L、H、V、A、C、S、Q、T、Z,并區(qū)分大小寫,小寫表示的是相對(duì)坐標(biāo)。
對(duì)于空間信息地物的分類,在 GIS界有很多的研究。通常,人們將地物按其幾何形態(tài)分為5類,即:點(diǎn)狀實(shí)體、線狀實(shí)體、面狀實(shí)體、注記體,以及柵格體。
目前,對(duì)于空間數(shù)據(jù)的組織主要有兩種方法:分層組織法和分要素組織法。其中,分層組織法來源于制圖學(xué)中的專題分層和CAD中的實(shí)體分層??紤]到SVG數(shù)據(jù)格式的特點(diǎn),地理空間數(shù)據(jù)的組織則采用簡(jiǎn)單的同類要素分層組織模式,這樣既考慮到數(shù)據(jù)管理的便捷和易操作,又可使每個(gè)圖層只包含一類幾何特征要素的地物。在SVG文檔中,每個(gè)圖層通過一分組元素g來表示,該元素的ID屬性表示圖層的標(biāo)識(shí)符,對(duì)于圖層的顯示樣式,不同類型的圖層有不同的定義規(guī)則。
SVG本身就定義了一些與圖形相關(guān)的元素,如矩形
1)點(diǎn)圖層
對(duì)于點(diǎn)圖層,包含Point,MultiPoint幾何類型,各種點(diǎn)狀地物是通過SVG中的Circle元素進(jìn)行表達(dá),而x,y坐標(biāo)則分別以變量的形式賦給Circle元素的cx和cy屬性,并為Circle元素的半徑r屬性賦與一個(gè)較小的值。下面就是點(diǎn)圖層的實(shí)例:
其中UserlD是用戶自定義的ID等等,這些信息可從提供源數(shù)據(jù)的軟件獲得。
2)線圖層
在SVG中,對(duì)于傳統(tǒng)的線狀實(shí)體是以path定義,并對(duì)其賦予相應(yīng)的屬性函數(shù),以下是線圖層的例子。
同時(shí)利用分組
3)面圖層
在SVG文檔中,面狀實(shí)體可通過多邊形構(gòu)成,用path元素來表達(dá)。以下是一個(gè)面圖層的例子。
以下是一個(gè)多邊形圖層的實(shí)例,在SVG文檔中完整的文本描述如下:
4)標(biāo)記層
對(duì)于地圖中的標(biāo)記,也直接通過
從SDO_GEOMETRY轉(zhuǎn)換為SVG模塊分為點(diǎn)、線、面的轉(zhuǎn)換。從SDO_GEOMETRY轉(zhuǎn)換為SVG Path起關(guān)鍵作用的是SDO_GEOMETRY數(shù)據(jù)類型中的SDO_ELEM_INFO和SDO_ORDINATES,前者決定了我們要轉(zhuǎn)換的空間幾何類型中每個(gè)組成元素的幾何類型以及每個(gè)幾何元素的第一個(gè)坐標(biāo)在SDO_ORDINATES中的存儲(chǔ)位置,后者存放的是相關(guān)的坐標(biāo)信息。對(duì)于讀取到的三元組分別用SVG Path繪制相應(yīng)的幾何類型。轉(zhuǎn)換流程圖如下圖1所示:
圖1 SVG Path轉(zhuǎn)換成SDO_GEOMETRY
SVG對(duì)于點(diǎn)圖層直接用 Circle元素進(jìn)行表達(dá),其轉(zhuǎn)換直接將 Circle元素坐標(biāo)信息寫到 SDO_ORDINATES數(shù)組中,相對(duì)復(fù)雜的是 SVG 從 SVG Path轉(zhuǎn)換為SDO_GEOMETRY,本文為此設(shè)計(jì)了3個(gè)子模塊:SVG Path的指令及空間數(shù)據(jù)讀取模塊、SVG Path數(shù)據(jù)解析處理模塊、空間數(shù)據(jù)類型對(duì)應(yīng)轉(zhuǎn)換模塊,其相互關(guān)系是由SVG Path數(shù)據(jù)解析處理模塊調(diào)用其他兩個(gè)模塊。
從SVG Path中讀取到的數(shù)據(jù)有可能是空間坐標(biāo)數(shù)據(jù),也有可能是Path里的M、A、L、Z參數(shù),針對(duì)不同的數(shù)據(jù)相應(yīng)的解析處理過程也不一樣。同時(shí)要注意的是每個(gè) Path里實(shí)際上可以由多對(duì)“M”和“Z”來表示多個(gè)環(huán)。SVG Path數(shù)據(jù)解析處理模塊的“畫直線處理部分”和“畫圓弧線處理部分”只是解析出直線和圓弧線的SDO_GEOMETRY形式的表達(dá),而要對(duì)環(huán)線、復(fù)合線、復(fù)合環(huán)線的完全地解析就要在“初始化處理”和“轉(zhuǎn)換結(jié)束處理”部分調(diào)用空間數(shù)據(jù)類型對(duì)應(yīng)轉(zhuǎn)換模塊做進(jìn)一步實(shí)現(xiàn)。SVG Path數(shù)據(jù)解析處理模塊的流程如圖2:
圖2 SVG Path數(shù)據(jù)解析處理模塊
Oracle Spatial提供的空間分析功能很多,在這里通過研究距離測(cè)量的具體實(shí)現(xiàn)過程,找出其他空間分析功能的執(zhí)行的過程。在界面輸入要測(cè)量的兩點(diǎn)具體坐標(biāo)值。用戶點(diǎn)擊“距離測(cè)量”按鈕,由客戶端封裝成距離測(cè)量的XML格式的命令,再向服務(wù)器端發(fā)出請(qǐng)求。數(shù)據(jù)庫(kù)的業(yè)務(wù)邏輯層將距離測(cè)量命令解析,調(diào)用從SVG到SDO_GEOMETRY 模塊,得出兩點(diǎn)的SDO_GEOMETRY形式的編碼并執(zhí)行空間分析函數(shù)SDO_GEOM.SDO_ DISTANCE,調(diào)用從SDO_GEOMETRY轉(zhuǎn)換到SVG模塊將結(jié)果轉(zhuǎn)成SVG形式編碼,再將結(jié)果封裝到命令里,并將結(jié)果返回到客戶端,在客戶端顯示出距離值。如圖3。
圖3 應(yīng)用舉例
目前,基于SVG的WebGIS是一個(gè)全新的研究領(lǐng)域,但是鑒于空間分析功能在GIS的重要性和Oracle Spatial的豐富的空間分析管理功能,本文就此實(shí)現(xiàn)了SVG和Oracle Spatial兩者的轉(zhuǎn)換,詳細(xì)闡述了其轉(zhuǎn)換過程。但是基于SVG/Oracle Spatial 應(yīng)用模型還有許多工作值得繼續(xù)研究,比如使用異步方式傳輸模式解決大數(shù)據(jù)量下載的問題,多用戶數(shù)據(jù)更新等。相信不久將來,SVG將在WebGIS領(lǐng)域中得到越來越廣泛的應(yīng)用。
[1]劉嘯,畢永年.基于XML的SVG應(yīng)用指南[M].北京:北京科海集體公司出品,2001.
[2]袁滿,于春生,聶晶.基于 ArcSDE/SVG 的分布式 WebGIS模型[J].計(jì)算機(jī)應(yīng)用研究,2009,26(3):939~941.
[3]袁家政,須德,鮑泓.基于XML矢量圖形SVG應(yīng)用的軟件體系結(jié)構(gòu)研究[J].中國(guó)圖象圖形學(xué)報(bào),2007,12(4):718~725.
[4]趙軍,翟裕忠.一個(gè)基于SVG的GIS及其空間分析技術(shù)[J].計(jì)算機(jī)工程與應(yīng)用,2004,(1):109~111.
[5]謝亦才,玄立超.基于SVG的網(wǎng)絡(luò)GIS圖形編輯系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2009,19(4):213~216.