同濟(jì)大學(xué)軟件學(xué)院 潘 巖
矢量格式地圖的分塊研究
同濟(jì)大學(xué)軟件學(xué)院 潘 巖
針對(duì)矢量格式大規(guī)模的地圖文件加載效率極低的問題,結(jié)合矢量格式地圖圖形定義以及不規(guī)則圖形的特點(diǎn),提出了一種分塊模型。以SVG格式文件作為例,通過對(duì)不規(guī)則圖形中Path元素?cái)?shù)據(jù)的解析,定義了不規(guī)則圖形的劃分規(guī)則,動(dòng)態(tài)實(shí)現(xiàn)對(duì)不規(guī)則圖形的分塊,依據(jù)定義好的規(guī)則來對(duì)不同的圖形完成分塊計(jì)算。通過實(shí)例驗(yàn)證,該分塊模型是有效的,極大提高了大規(guī)模SVG地圖載入效率問題。
矢量;地圖;分塊
SVG(Scalable Vector Graphics,可縮放的矢量圖形)格式是W3C制定的一種新的用于描述二維矢量圖形格式,規(guī)范了網(wǎng)絡(luò)矢量圖形的標(biāo)準(zhǔn),基于XML,嚴(yán)格遵從XML語法,是一種和圖像分辨率無關(guān)的矢量圖形格式,是一個(gè)開放的標(biāo)準(zhǔn)。
基于SVG格式的GIS系統(tǒng)相對(duì)于傳統(tǒng)的GIS系統(tǒng)具有巨大的優(yōu)勢,它擺脫了傳統(tǒng)GIS系統(tǒng)中的數(shù)據(jù)庫支持,在地圖更新時(shí),只需要通過XML文件來定義和擴(kuò)展地理元素,不用復(fù)雜的數(shù)據(jù)庫操作,并且它只要一張SVG文件就可以適用于不同比例尺的表達(dá),傳統(tǒng)的GIS系統(tǒng)都是通過光柵圖展示地圖的,地圖的分塊也是對(duì)光柵圖進(jìn)行分割處理,不同比例尺的都需要對(duì)應(yīng)的一套光柵圖,浪費(fèi)存儲(chǔ)空間并且加載緩慢。
目前SVG應(yīng)用于地理信息系統(tǒng)還未大規(guī)模適用于市場,很多工作還處于研究狀態(tài)中,國內(nèi)外關(guān)于SVG格式地圖的分塊功能還沒任何研究,它包含了對(duì)SVG文件的解析以及對(duì)各類圖形元素的劃分,它不同于傳統(tǒng)的光柵圖,只要對(duì)像素點(diǎn)進(jìn)行操作,SVG地圖文件需要將所有的圖形元素的屬性都分析并且按照規(guī)定的規(guī)則切割或重新組合。
定義1:path元素
M10 10L90 90C80 80 70 70 60 60
其中M為起點(diǎn)標(biāo)識(shí),(10,10)為起點(diǎn)坐標(biāo),L和C都是控制標(biāo)識(shí),(90,90)是L的后續(xù)控制序列,(80,80),(70,70), (60,60)是C的后續(xù)控制序列。定義2:SVG格式地圖塊
定義3:劃分規(guī)則
不規(guī)則圖形分塊算法以SVG格式地圖文件Q(N,L,W,S)為對(duì)象,其存儲(chǔ)方式為XML格式,首先根據(jù)前期工作中VTD解析模型,獲取地圖的相關(guān)屬性,按照步驟一計(jì)算出塊劃分,定義一個(gè)塊用數(shù)據(jù)結(jié)構(gòu)G(n,l,w)表示,用一個(gè)二維數(shù)組存儲(chǔ)所有的網(wǎng)格。
在劃分模型的實(shí)現(xiàn)中,本文針首先對(duì)地圖文件Q的path元素進(jìn)行解析,每一個(gè)path元素中d屬性定義了其起點(diǎn)信息和后續(xù)控制點(diǎn)信息,通過VTD算法遍歷地圖文件Q中所有path元素,對(duì)于每個(gè)path通過正則表達(dá)式(d=['"]?(。*?)['"])獲取其d屬性,按照本文的定義1獲取所有的坐標(biāo)標(biāo)識(shí)以及對(duì)應(yīng)的后續(xù)坐標(biāo)序列集合C(X,Y),存儲(chǔ)在一維數(shù)組中;然后定義隊(duì)列p作為臨時(shí)變量,用于存儲(chǔ)在發(fā)生劃分之前的曲線控制標(biāo)識(shí)以及坐標(biāo)集。遍歷控制標(biāo)識(shí)以及后繼坐標(biāo)數(shù)組,將當(dāng)前控制標(biāo)識(shí)放入p中,對(duì)對(duì)應(yīng)的每個(gè)后續(xù)坐標(biāo)計(jì)算所屬網(wǎng)格G,如果與前一個(gè)坐標(biāo)所屬相同網(wǎng)格,那么將坐標(biāo)放入p中;否則發(fā)生劃分,將坐標(biāo)放入p中,根據(jù)定義1,不同控制標(biāo)識(shí)后續(xù)坐標(biāo)序列數(shù)量滿足N倍,N由控制標(biāo)識(shí)決定,所以發(fā)生劃分之后,需要先根據(jù)坐標(biāo)標(biāo)識(shí)判斷隊(duì)列p中當(dāng)前控制標(biāo)識(shí)后續(xù)坐標(biāo)數(shù)量是否滿足N倍,若不滿足則繼續(xù)遍歷坐標(biāo)直至滿足N倍,并且將坐標(biāo)放入p中,當(dāng)前的隊(duì)列p中應(yīng)該有多組控制標(biāo)識(shí)以及對(duì)應(yīng)的坐標(biāo)序列,然后按照SVG格式中Path元素格式對(duì)當(dāng)前的隊(duì)列生成一個(gè)path元素放入前一個(gè)網(wǎng)格中,保留原來path中的屬性,并清空p,將當(dāng)前坐標(biāo)作為起點(diǎn)放入p中,繼續(xù)下一個(gè)迭代。
遍歷完所有path之后,每個(gè)塊中都生成了很多新path片段,然后對(duì)每個(gè)塊中的新path片段集合生成一個(gè)SVG格式地圖文件的頭部和尾部,寫入到塊文件中。
遍歷完所有的塊之后,對(duì)所有的封閉圖形添加顏色屬性,再按照SVG格式寫入到塊文件中。
[1]Scalable Vector Graphics(SVG)1.2 Specification。http://www。 w3.org/TR/2004/WD-SVG12-2004-10-27/2004-10-27.
[2]Du Qingfeng,Xuefei。Specific timestamp image recovery algorithm research based on SVG incremental storage[C]:Proceedings of IEEE InternationalConference on Computer Science and Service System。Nanjing:[s。n。]。2010:4045-4048.
[3]Du Qingfeng,Guo Zhichao,Tang Xuebo。DiffS:Matching Algorithm to Different Version Maps Based on SVG[J]。Geomatics and Information Science of Wuhan University,2012,37(8):984-987.
[4]Du Qingfeng,Guo Zhichao,Tang Xuebo。DiffSvg-matching algorithm of different timestamp maps based on SVG[C]:IEEE International Conference on Computer Science and Service System,Nanjing:[s。n。]。2012:1-5.
[5]Du Qingfeng,Zhao Yanan。I-Diffs:Improved Matching Algorithm to Different Time Stamp Maps[J]。Journal of Tongji University(Natural Science),2013,41(10):1589-1585.