范磬亞,鞠海燕
WebGIS是在 Internet或 Intranet網(wǎng)絡(luò)環(huán)境下的一種獲取、存儲、傳輸、分析和顯示地理信息的計算機(jī)信息系統(tǒng)。目前在 WebGIS應(yīng)用中,地圖數(shù)據(jù)的顯示一般采用兩種方式:柵格地圖或者矢量地圖。顯示柵格地圖,用戶不需要安裝插件,但不能對圖像進(jìn)行進(jìn)一步的操作和交互。而矢量圖形的顯示是計算機(jī)軟件通過一定算法,將矢量對象的描述信息在顯示終端上重繪的結(jié)果,但是速度和可重用性等方面仍然存在很多障礙。SVG是互聯(lián)網(wǎng)聯(lián)盟(W3C)的正式推薦標(biāo)準(zhǔn),是一種基于XML的描述2D可容納矢量圖形、點陣圖像和文本圖像的語言。SVG的出現(xiàn)可以說對Web GIS空間數(shù)據(jù)發(fā)布提供了一個開放的解決方案。目前,如何在SVG格式的矢量地圖中實現(xiàn)復(fù)雜空間分析是一個有待研究的問題。空間數(shù)據(jù)管理產(chǎn)品提供了豐富的空間分析函數(shù),可以借助它來實現(xiàn)SVG圖形的空間分析。但是空間數(shù)據(jù)管理產(chǎn)品只支持其定義的空間數(shù)據(jù)的格式,因此問題的關(guān)鍵是如何實現(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的對象——關(guān)系模型中,一個空間實體的空間信息是存在用戶定義的數(shù)據(jù)表中的一個字段,類型為SDO_GEOMETRY。Oracle Spatial這樣定義SDO_GEOMETRY這個字段:

SDO_GYTPE:說明該空間實體的類型。是一個4個數(shù)字的整數(shù),其格式為 dltt,其中 d表示幾何對象的維數(shù);l表示三維線性參考系統(tǒng)中的線性參考值,tt為幾何對象的類型。
SDO_SRID:一個預(yù)留屬性,Oracle Spatial計劃將它作為空間引用的外鍵。
SDO_POINT:由X、Y、Z 3個NUMBER型的屬性構(gòu)成,如果 SDO_ELEM_INFO和 SDO_ORDINATES都是NULL的話,該對象便是非空的,X、Y兩個值用來表示點實體的坐標(biāo)。否則,SDO_POINT這個屬性將被忽略。
SDO_ELEM_INFO:定義為一個可變長的數(shù)組。每 3個數(shù)作為一個元素單位,用于解釋坐標(biāo)是如何存儲在SDO_ORDINATES數(shù)組中的。本文把組成一個元素的3個數(shù)稱為3元組。一個3元組包含以下3部分的內(nèi)容:
a)SDO_ STARTING_OFFSET表明每個幾何元素的第一個坐標(biāo)在SDO_ ORD INATES數(shù)組中的存儲位置。它的值從1開始,逐漸增加。
b)SDO_ETYPE 用于表示幾何對象中每個組成元素的幾何類型。
c)SDO_INTERPRETATION具有兩層含義,具體的作用由SDO_ETYPE是否為復(fù)雜元素決定。
具體見表1

表1 SDO_ELEM_INFO的值及含義

1003或2003 2由弧線段組成的多邊形,起點與終點必須相同。一個弧線段由起點、弧上任意一點以及終點組成。相鄰兩段弧的接點不需要重復(fù)存儲。1003或2003 3 矩形,由左下角和右上角兩點確定1003或2003 4 圓,由圓周上的不同三點確定4 n>1由直線段和弧線段連成的復(fù)合線,n表示組成復(fù)合線的相鄰子元素的個數(shù),子元素的SDO_ETYPE必須為2,一個子元素的最后一點是下一個子元素的第一個點,并且該點不能重復(fù)。1005或2005 n>1由直線段和弧線段連成的復(fù)合多邊形,n表示組成復(fù)合多邊形的相鄰子元素的個數(shù),子元素的SDO_ETYPE必須為2,一個子元素的最后一點是下一個子元素的第一個點,并且該點不能重復(fù)。多邊形的起點和終點必須相同。
SDO_ORDINATES:定義為一個可變長的數(shù)組,數(shù)組元素類型為NUMBER。用來存儲組成空間實體邊界的點的坐標(biāo)值。
SVG是由國際WWW委員會(W3C)組織為適應(yīng)Internet Web應(yīng)用的飛速發(fā)展需要而制定的一套基于XML語言的可縮放矢量圖形語言描述規(guī)范,用來描述二維矢量圖形和矢量/點陣混合圖形的置標(biāo)語言,其全稱是可擴(kuò)展矢量圖形規(guī)范(Scalable Vector Graphics)。SVG 與目前因特網(wǎng)上常用的JPEG、GIF等網(wǎng)絡(luò)上廣泛使用的圖形格式相比較具有許多優(yōu)點:(1)任意縮放性、文件尺寸小。(2)能加快下載瀏覽速度。(3)能實現(xiàn)方便的圖形定位與檢索。(4)具有豐富的表現(xiàn)效果。(5)具有良好的可重用性。(6)具有跨平臺功能。
由于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)可以是一個形狀的外框,也可以是用來剪裁的路徑線條,總之就是“一根線”。這根線可以被描邊,可以用來表達(dá)空間,如果封閉的話又可以被填充。路徑是用點的集合來描述的,路徑所使用的描繪方式有moveto、lineto、curveto、arc和closepath等。一個復(fù)合路徑中還可以含有子路徑,形式相當(dāng)靈活。
Path元素的幾何坐標(biāo)信息定義在d=”……”屬性里,由命令和數(shù)據(jù)參數(shù)組成,命令包括M、L、H、V、A、C、S、Q、T、Z,并區(qū)分大小寫,小寫表示的是相對坐標(biāo)。
對于空間信息地物的分類,在 GIS界有很多的研究。通常,人們將地物按其幾何形態(tài)分為5類,即:點狀實體、線狀實體、面狀實體、注記體,以及柵格體。
目前,對于空間數(shù)據(jù)的組織主要有兩種方法:分層組織法和分要素組織法。其中,分層組織法來源于制圖學(xué)中的專題分層和CAD中的實體分層。考慮到SVG數(shù)據(jù)格式的特點,地理空間數(shù)據(jù)的組織則采用簡單的同類要素分層組織模式,這樣既考慮到數(shù)據(jù)管理的便捷和易操作,又可使每個圖層只包含一類幾何特征要素的地物。在SVG文檔中,每個圖層通過一分組元素g來表示,該元素的ID屬性表示圖層的標(biāo)識符,對于圖層的顯示樣式,不同類型的圖層有不同的定義規(guī)則。
SVG本身就定義了一些與圖形相關(guān)的元素,如矩形
1)點圖層
對于點圖層,包含Point,MultiPoint幾何類型,各種點狀地物是通過SVG中的Circle元素進(jìn)行表達(dá),而x,y坐標(biāo)則分別以變量的形式賦給Circle元素的cx和cy屬性,并為Circle元素的半徑r屬性賦與一個較小的值。下面就是點圖層的實例:
其中UserlD是用戶自定義的ID等等,這些信息可從提供源數(shù)據(jù)的軟件獲得。
2)線圖層
在SVG中,對于傳統(tǒng)的線狀實體是以path定義,并對其賦予相應(yīng)的屬性函數(shù),以下是線圖層的例子。
同時利用分組
3)面圖層
在SVG文檔中,面狀實體可通過多邊形構(gòu)成,用path元素來表達(dá)。以下是一個面圖層的例子。
以下是一個多邊形圖層的實例,在SVG文檔中完整的文本描述如下:


4)標(biāo)記層
對于地圖中的標(biāo)記,也直接通過
從SDO_GEOMETRY轉(zhuǎn)換為SVG模塊分為點、線、面的轉(zhuǎn)換。從SDO_GEOMETRY轉(zhuǎn)換為SVG Path起關(guān)鍵作用的是SDO_GEOMETRY數(shù)據(jù)類型中的SDO_ELEM_INFO和SDO_ORDINATES,前者決定了我們要轉(zhuǎn)換的空間幾何類型中每個組成元素的幾何類型以及每個幾何元素的第一個坐標(biāo)在SDO_ORDINATES中的存儲位置,后者存放的是相關(guān)的坐標(biāo)信息。對于讀取到的三元組分別用SVG Path繪制相應(yīng)的幾何類型。轉(zhuǎn)換流程圖如下圖1所示:

圖1 SVG Path轉(zhuǎn)換成SDO_GEOMETRY
SVG對于點圖層直接用 Circle元素進(jìn)行表達(dá),其轉(zhuǎn)換直接將 Circle元素坐標(biāo)信息寫到 SDO_ORDINATES數(shù)組中,相對復(fù)雜的是 SVG 從 SVG Path轉(zhuǎn)換為SDO_GEOMETRY,本文為此設(shè)計了3個子模塊:SVG Path的指令及空間數(shù)據(jù)讀取模塊、SVG Path數(shù)據(jù)解析處理模塊、空間數(shù)據(jù)類型對應(yīng)轉(zhuǎn)換模塊,其相互關(guān)系是由SVG Path數(shù)據(jù)解析處理模塊調(diào)用其他兩個模塊。
從SVG Path中讀取到的數(shù)據(jù)有可能是空間坐標(biāo)數(shù)據(jù),也有可能是Path里的M、A、L、Z參數(shù),針對不同的數(shù)據(jù)相應(yīng)的解析處理過程也不一樣。同時要注意的是每個 Path里實際上可以由多對“M”和“Z”來表示多個環(huán)。SVG Path數(shù)據(jù)解析處理模塊的“畫直線處理部分”和“畫圓弧線處理部分”只是解析出直線和圓弧線的SDO_GEOMETRY形式的表達(dá),而要對環(huán)線、復(fù)合線、復(fù)合環(huán)線的完全地解析就要在“初始化處理”和“轉(zhuǎn)換結(jié)束處理”部分調(diào)用空間數(shù)據(jù)類型對應(yīng)轉(zhuǎn)換模塊做進(jìn)一步實現(xiàn)。SVG Path數(shù)據(jù)解析處理模塊的流程如圖2:

圖2 SVG Path數(shù)據(jù)解析處理模塊
Oracle Spatial提供的空間分析功能很多,在這里通過研究距離測量的具體實現(xiàn)過程,找出其他空間分析功能的執(zhí)行的過程。在界面輸入要測量的兩點具體坐標(biāo)值。用戶點擊“距離測量”按鈕,由客戶端封裝成距離測量的XML格式的命令,再向服務(wù)器端發(fā)出請求。數(shù)據(jù)庫的業(yè)務(wù)邏輯層將距離測量命令解析,調(diào)用從SVG到SDO_GEOMETRY 模塊,得出兩點的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是一個全新的研究領(lǐng)域,但是鑒于空間分析功能在GIS的重要性和Oracle Spatial的豐富的空間分析管理功能,本文就此實現(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ī)應(yīng)用研究,2009,26(3):939~941.
[3]袁家政,須德,鮑泓.基于XML矢量圖形SVG應(yīng)用的軟件體系結(jié)構(gòu)研究[J].中國圖象圖形學(xué)報,2007,12(4):718~725.
[4]趙軍,翟裕忠.一個基于SVG的GIS及其空間分析技術(shù)[J].計算機(jī)工程與應(yīng)用,2004,(1):109~111.
[5]謝亦才,玄立超.基于SVG的網(wǎng)絡(luò)GIS圖形編輯系統(tǒng)設(shè)計與實現(xiàn)[J].計算機(jī)技術(shù)與發(fā)展,2009,19(4):213~216.