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

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

表1 SDO_ELEM_INFO的值及含義

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


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

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

圖2 SVG Path數據解析處理模塊
Oracle Spatial提供的空間分析功能很多,在這里通過研究距離測量的具體實現過程,找出其他空間分析功能的執行的過程。在界面輸入要測量的兩點具體坐標值。用戶點擊“距離測量”按鈕,由客戶端封裝成距離測量的XML格式的命令,再向服務器端發出請求。數據庫的業務邏輯層將距離測量命令解析,調用從SVG到SDO_GEOMETRY 模塊,得出兩點的SDO_GEOMETRY形式的編碼并執行空間分析函數SDO_GEOM.SDO_ DISTANCE,調用從SDO_GEOMETRY轉換到SVG模塊將結果轉成SVG形式編碼,再將結果封裝到命令里,并將結果返回到客戶端,在客戶端顯示出距離值。如圖3。

圖3 應用舉例
目前,基于SVG的WebGIS是一個全新的研究領域,但是鑒于空間分析功能在GIS的重要性和Oracle Spatial的豐富的空間分析管理功能,本文就此實現了SVG和Oracle Spatial兩者的轉換,詳細闡述了其轉換過程。但是基于SVG/Oracle Spatial 應用模型還有許多工作值得繼續研究,比如使用異步方式傳輸模式解決大數據量下載的問題,多用戶數據更新等。相信不久將來,SVG將在WebGIS領域中得到越來越廣泛的應用。
[1]劉嘯,畢永年.基于XML的SVG應用指南[M].北京:北京科海集體公司出品,2001.
[2]袁滿,于春生,聶晶.基于 ArcSDE/SVG 的分布式 WebGIS模型[J].計算機應用研究,2009,26(3):939~941.
[3]袁家政,須德,鮑泓.基于XML矢量圖形SVG應用的軟件體系結構研究[J].中國圖象圖形學報,2007,12(4):718~725.
[4]趙軍,翟裕忠.一個基于SVG的GIS及其空間分析技術[J].計算機工程與應用,2004,(1):109~111.
[5]謝亦才,玄立超.基于SVG的網絡GIS圖形編輯系統設計與實現[J].計算機技術與發展,2009,19(4):213~216.