杜慶峰+彭治平
摘 要 提出了在SVG圖形文件上直接進(jìn)行地理元素分層的思路,對(duì)SVG格式地圖分層進(jìn)行了初步設(shè)計(jì),提出了分層算法。經(jīng)驗(yàn)證,算法是有效的。
關(guān)鍵詞 SVG;GIS;地圖分層
中圖分類(lèi)號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-7597(2014)09-0050-02
Abctract: I propose an idea to classifygeologicalelements into layers on SVG/XML format maps, preliminarilydesign the way to classify, the algorithm. The application verification shows that the algorithm is effective.
Key words: SVG; GIS; Geologicalelement layer
我們認(rèn)為地圖是由許多圖形元素疊加組成的,每一類(lèi)的圖形元素都各具特點(diǎn)。將一些具有一定特征的圖形元素劃分在一起,就構(gòu)成了“層”的概念。常見(jiàn)的地圖圖層有:河流層、道路層、綠地層、河流層、建筑層、行政區(qū)規(guī)劃層等。圖層控制的意義就在于,通過(guò)控制地圖上元素可見(jiàn)性,在不同的縮放效果下,僅顯示所需的地理元素,使地圖顯得詳略得當(dāng)。例如在一般WebGIS的地圖中,不同的放大比例下,所顯示的行政區(qū)劃級(jí)別會(huì)有所不同。在不同的縮放比例下,顯示不同的視圖,對(duì)不同的地理元素進(jìn)行篩選顯示,可以使用戶(hù)能有更好的體驗(yàn)。
在GIS中,SVG作為一種圖像的表現(xiàn)手段越來(lái)越多被使用,但還并不普及;基于SVG信息存儲(chǔ)和共享交互則更是有待更多研究。圖像分層和地理元素查詢(xún)等功能上,國(guó)內(nèi)有大量研究成果。但國(guó)內(nèi)大多數(shù)研究和解決辦法仍是基于柵格等模型,SVG本身幾乎只被用于圖像表現(xiàn)。事實(shí)上SVG因其具有的優(yōu)勢(shì),將其使用在GIS中更低的層級(jí)上是值得研究和考慮的。
本文結(jié)合國(guó)家地理元素分層標(biāo)準(zhǔn)以及SVG本身的特點(diǎn),在SVG本身這一更低的層級(jí)上對(duì)地圖分層,并驗(yàn)證了分層效果。
1
在SVG的樹(shù)狀結(jié)構(gòu)中,
style-attribute=”style-attribute”
transform=”transformation commands”>
<!-- groups content here -->
將
2 圖層分類(lèi)規(guī)則及算法
依據(jù)《基礎(chǔ)地理信息要素分類(lèi)與代碼》中定義,地理元素可以分為定位基礎(chǔ)、水系、居民地及設(shè)施、交通、管線(xiàn)、境界與政區(qū)、地貌和植被等八大類(lèi),每個(gè)大類(lèi)下各包含多個(gè)小類(lèi)。例如定位基礎(chǔ)大類(lèi)包含測(cè)量控制點(diǎn)和數(shù)學(xué)基礎(chǔ)兩小類(lèi);水系大類(lèi)包含河流、溝渠、湖泊、水庫(kù)、海洋要素、其他水系要素、水利及附屬設(shè)施八小類(lèi)等。
由于名稱(chēng)長(zhǎng)短不一,為了方便查找和匹配,使用二進(jìn)制代碼來(lái)代替復(fù)雜的英文字符名稱(chēng)就方便的多。根據(jù)圖層的層級(jí)和個(gè)數(shù),我們采用八位二進(jìn)制代碼來(lái)標(biāo)識(shí)圖層,前四位(0000XXXX)標(biāo)識(shí)一級(jí)圖層,后四位(XXXX0000)標(biāo)識(shí)二級(jí)圖層。依據(jù)如此編碼,地圖中最多可包含十六種圖層大類(lèi),每個(gè)圖層大類(lèi)下最多可包含十六種圖層小類(lèi),也就是說(shuō)整個(gè)地圖最多可有二百五十六種圖層小類(lèi),完全可以滿(mǎn)足圖層分類(lèi)的擴(kuò)展需求。就以第二個(gè)大類(lèi)水系及其以下的七個(gè)二級(jí)圖層為例,前四位編碼為0001,七個(gè)二級(jí)圖層的后四位編碼為0000至0110。具體表現(xiàn)如下:
……
……
…
SVG的本質(zhì)是XML,SVG和XML一樣是一種典型的層次樹(shù)狀結(jié)構(gòu),這種結(jié)構(gòu)的文檔,定位其某一個(gè)部分是比較容易的,因此控制也較容易。在SVG中,通過(guò)設(shè)置元素的Visibility屬性可以實(shí)現(xiàn)對(duì)于元素的顯示或隱藏。Visibility屬性有兩個(gè)值可供選擇:默認(rèn)值visible代表顯示,而hidden代表隱藏。在SVG中,元素遵守CSS2的樣式繼承規(guī)則。因此,一般情況下,通過(guò)設(shè)置指定圖層根節(jié)點(diǎn)
我們可以對(duì)這種特殊情況進(jìn)行特殊處理,除了設(shè)置圖層根節(jié)點(diǎn)
Visibility=”visible”
對(duì)于這種情況,需要在關(guān)閉圖層的時(shí)候,使Visibility屬性失效。而在打開(kāi)圖層的時(shí)候,使visibility屬性值變回”visible”。
Visibility=”hidden”
對(duì)于這種情況,正常情況下是不顯示該元素的,故無(wú)論包含該元素的圖層是隱藏還是顯示狀態(tài),該元素均不顯示。
整個(gè)地圖分層的偽代碼如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 ProcedureLayer(layer name)
INPUTlayer name: String
Begin
var TargetLayer = find_node_by_name(layer name)
ifTargetLayer.Visibility=”visible”then
TargetLayer. Visibility=”hidden”
traverse TargetLayer in level-order sequence
let M be the current unit
IfM.hasAttribute(“Visibility”) and M.Visibility = “visible” then
M.removeAttribute(“Visibility”)
highlight_node(M)
endif
end-traverse
endif
else
TargetLayer. Visibility=“visible”
unhighlight_nodes_under_layer(TargetLayer)
endif
End
3 分層算法的驗(yàn)證測(cè)試
地圖分層算法其基本思想是:利用SVG中的組元素
通過(guò)以上分析,我們準(zhǔn)備了兩組數(shù)據(jù),分別為Rects組、Circles組和Texts組,每組中包含三個(gè)對(duì)應(yīng)的SVG元素。我們?cè)贑ircles組和Texts組中,預(yù)先設(shè)定了元素的Visibility
圖1 分層驗(yàn)證測(cè)試文件的顯示
屬性。通過(guò)Rects組可以對(duì)通常情況進(jìn)行測(cè)試,通過(guò)Circles組可以對(duì)特殊情況進(jìn)行測(cè)試。通過(guò)Texts組對(duì)這兩種情況進(jìn)行綜合測(cè)試。
通過(guò)以上分析,我們準(zhǔn)備也測(cè)試數(shù)據(jù),包含水系(包含河流)、交通(包含城市道路和鄉(xiāng)村交道路)、植被與土質(zhì)(包含城市綠地)三大圖層。且對(duì)城市道路中的第一條道路沒(méi)有預(yù)設(shè)“visibility”值,而第四條道路的visibility=”hidden” ,除此之外的所有圖形元素都預(yù)設(shè)visibility=”visible” 。
首先,需要將測(cè)試的SVG文件導(dǎo)入到Web瀏覽器中進(jìn)行顯示。該測(cè)試文件在瀏覽器中顯示如圖1所示。圖中共有三個(gè)圖層,包括水系層、植被和土質(zhì)層以及交通層。由于城市道路層的第四個(gè)元素
然后,通過(guò)點(diǎn)擊水系復(fù)選框來(lái)隱藏水系層,測(cè)試結(jié)果如圖2所示。與圖1比較后,可以看出,水系層消失了。
圖2 隱藏水系層的結(jié)果
接著,通過(guò)點(diǎn)擊復(fù)選框水系來(lái)顯示水系層,點(diǎn)擊植被與土質(zhì)來(lái)隱藏植被和土質(zhì)層,測(cè)試結(jié)果如圖3所示。從圖中可以看出,原先的河流又出現(xiàn)了,而植被和土質(zhì)層的綠地則均被隱藏了。
圖3 隱藏植被和土質(zhì)層的結(jié)果
4 結(jié)論
通過(guò)以上測(cè)試結(jié)果可以看出,本文提出的分層顯示算法是可行的。對(duì)于普通情況,只要修改組元素
參考文獻(xiàn)
[1]Sun Teng-Da, Wang Jin-Feng,2007,A Traffic Cellular Automata Model Based on Road Network Grids and Its Spatial & Temporal Resolution's Influences on Simulation, Simulation Modeling Practice and Theory,DOI: 10.1016/j.simpat.
[2]Steven J.Vaughan-Nichols.Will Vector Graphics Finally Make It on the Web7.IEEEComputer,2001,34(12):22-24.
[3]http://www.w3school.com.cn/svg/.
[4]唐學(xué)波.基于SVG的時(shí)空GIS文件系統(tǒng)增量更新存儲(chǔ)機(jī)制研究[D].上海:同濟(jì)大學(xué),2009.
[5]Liang JZ. Using SVG Technique to Organize and Display Data of Embedded GIS, 2009 5TH INTERNATIONAL CONFERENCE ON WIRELESS COMMUNICATIONS, NETWORKING AND MOBILE COMPUTING, VOLS: 1-8, p: 5375-5377,2009.
[6]鄔倫,劉瑜,張晶,等.地理信息系統(tǒng)—原理、方法和應(yīng)用[M].科學(xué)出版社,2008.
Visibility=”visible”
對(duì)于這種情況,需要在關(guān)閉圖層的時(shí)候,使Visibility屬性失效。而在打開(kāi)圖層的時(shí)候,使visibility屬性值變回”visible”。
Visibility=”hidden”
對(duì)于這種情況,正常情況下是不顯示該元素的,故無(wú)論包含該元素的圖層是隱藏還是顯示狀態(tài),該元素均不顯示。
整個(gè)地圖分層的偽代碼如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 ProcedureLayer(layer name)
INPUTlayer name: String
Begin
var TargetLayer = find_node_by_name(layer name)
ifTargetLayer.Visibility=”visible”then
TargetLayer. Visibility=”hidden”
traverse TargetLayer in level-order sequence
let M be the current unit
IfM.hasAttribute(“Visibility”) and M.Visibility = “visible” then
M.removeAttribute(“Visibility”)
highlight_node(M)
endif
end-traverse
endif
else
TargetLayer. Visibility=“visible”
unhighlight_nodes_under_layer(TargetLayer)
endif
End
3 分層算法的驗(yàn)證測(cè)試
地圖分層算法其基本思想是:利用SVG中的組元素
通過(guò)以上分析,我們準(zhǔn)備了兩組數(shù)據(jù),分別為Rects組、Circles組和Texts組,每組中包含三個(gè)對(duì)應(yīng)的SVG元素。我們?cè)贑ircles組和Texts組中,預(yù)先設(shè)定了元素的Visibility
圖1 分層驗(yàn)證測(cè)試文件的顯示
屬性。通過(guò)Rects組可以對(duì)通常情況進(jìn)行測(cè)試,通過(guò)Circles組可以對(duì)特殊情況進(jìn)行測(cè)試。通過(guò)Texts組對(duì)這兩種情況進(jìn)行綜合測(cè)試。
通過(guò)以上分析,我們準(zhǔn)備也測(cè)試數(shù)據(jù),包含水系(包含河流)、交通(包含城市道路和鄉(xiāng)村交道路)、植被與土質(zhì)(包含城市綠地)三大圖層。且對(duì)城市道路中的第一條道路沒(méi)有預(yù)設(shè)“visibility”值,而第四條道路的visibility=”hidden” ,除此之外的所有圖形元素都預(yù)設(shè)visibility=”visible” 。
首先,需要將測(cè)試的SVG文件導(dǎo)入到Web瀏覽器中進(jìn)行顯示。該測(cè)試文件在瀏覽器中顯示如圖1所示。圖中共有三個(gè)圖層,包括水系層、植被和土質(zhì)層以及交通層。由于城市道路層的第四個(gè)元素
然后,通過(guò)點(diǎn)擊水系復(fù)選框來(lái)隱藏水系層,測(cè)試結(jié)果如圖2所示。與圖1比較后,可以看出,水系層消失了。
圖2 隱藏水系層的結(jié)果
接著,通過(guò)點(diǎn)擊復(fù)選框水系來(lái)顯示水系層,點(diǎn)擊植被與土質(zhì)來(lái)隱藏植被和土質(zhì)層,測(cè)試結(jié)果如圖3所示。從圖中可以看出,原先的河流又出現(xiàn)了,而植被和土質(zhì)層的綠地則均被隱藏了。
圖3 隱藏植被和土質(zhì)層的結(jié)果
4 結(jié)論
通過(guò)以上測(cè)試結(jié)果可以看出,本文提出的分層顯示算法是可行的。對(duì)于普通情況,只要修改組元素
參考文獻(xiàn)
[1]Sun Teng-Da, Wang Jin-Feng,2007,A Traffic Cellular Automata Model Based on Road Network Grids and Its Spatial & Temporal Resolution's Influences on Simulation, Simulation Modeling Practice and Theory,DOI: 10.1016/j.simpat.
[2]Steven J.Vaughan-Nichols.Will Vector Graphics Finally Make It on the Web7.IEEEComputer,2001,34(12):22-24.
[3]http://www.w3school.com.cn/svg/.
[4]唐學(xué)波.基于SVG的時(shí)空GIS文件系統(tǒng)增量更新存儲(chǔ)機(jī)制研究[D].上海:同濟(jì)大學(xué),2009.
[5]Liang JZ. Using SVG Technique to Organize and Display Data of Embedded GIS, 2009 5TH INTERNATIONAL CONFERENCE ON WIRELESS COMMUNICATIONS, NETWORKING AND MOBILE COMPUTING, VOLS: 1-8, p: 5375-5377,2009.
[6]鄔倫,劉瑜,張晶,等.地理信息系統(tǒng)—原理、方法和應(yīng)用[M].科學(xué)出版社,2008.
Visibility=”visible”
對(duì)于這種情況,需要在關(guān)閉圖層的時(shí)候,使Visibility屬性失效。而在打開(kāi)圖層的時(shí)候,使visibility屬性值變回”visible”。
Visibility=”hidden”
對(duì)于這種情況,正常情況下是不顯示該元素的,故無(wú)論包含該元素的圖層是隱藏還是顯示狀態(tài),該元素均不顯示。
整個(gè)地圖分層的偽代碼如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 ProcedureLayer(layer name)
INPUTlayer name: String
Begin
var TargetLayer = find_node_by_name(layer name)
ifTargetLayer.Visibility=”visible”then
TargetLayer. Visibility=”hidden”
traverse TargetLayer in level-order sequence
let M be the current unit
IfM.hasAttribute(“Visibility”) and M.Visibility = “visible” then
M.removeAttribute(“Visibility”)
highlight_node(M)
endif
end-traverse
endif
else
TargetLayer. Visibility=“visible”
unhighlight_nodes_under_layer(TargetLayer)
endif
End
3 分層算法的驗(yàn)證測(cè)試
地圖分層算法其基本思想是:利用SVG中的組元素
通過(guò)以上分析,我們準(zhǔn)備了兩組數(shù)據(jù),分別為Rects組、Circles組和Texts組,每組中包含三個(gè)對(duì)應(yīng)的SVG元素。我們?cè)贑ircles組和Texts組中,預(yù)先設(shè)定了元素的Visibility
圖1 分層驗(yàn)證測(cè)試文件的顯示
屬性。通過(guò)Rects組可以對(duì)通常情況進(jìn)行測(cè)試,通過(guò)Circles組可以對(duì)特殊情況進(jìn)行測(cè)試。通過(guò)Texts組對(duì)這兩種情況進(jìn)行綜合測(cè)試。
通過(guò)以上分析,我們準(zhǔn)備也測(cè)試數(shù)據(jù),包含水系(包含河流)、交通(包含城市道路和鄉(xiāng)村交道路)、植被與土質(zhì)(包含城市綠地)三大圖層。且對(duì)城市道路中的第一條道路沒(méi)有預(yù)設(shè)“visibility”值,而第四條道路的visibility=”hidden” ,除此之外的所有圖形元素都預(yù)設(shè)visibility=”visible” 。
首先,需要將測(cè)試的SVG文件導(dǎo)入到Web瀏覽器中進(jìn)行顯示。該測(cè)試文件在瀏覽器中顯示如圖1所示。圖中共有三個(gè)圖層,包括水系層、植被和土質(zhì)層以及交通層。由于城市道路層的第四個(gè)元素
然后,通過(guò)點(diǎn)擊水系復(fù)選框來(lái)隱藏水系層,測(cè)試結(jié)果如圖2所示。與圖1比較后,可以看出,水系層消失了。
圖2 隱藏水系層的結(jié)果
接著,通過(guò)點(diǎn)擊復(fù)選框水系來(lái)顯示水系層,點(diǎn)擊植被與土質(zhì)來(lái)隱藏植被和土質(zhì)層,測(cè)試結(jié)果如圖3所示。從圖中可以看出,原先的河流又出現(xiàn)了,而植被和土質(zhì)層的綠地則均被隱藏了。
圖3 隱藏植被和土質(zhì)層的結(jié)果
4 結(jié)論
通過(guò)以上測(cè)試結(jié)果可以看出,本文提出的分層顯示算法是可行的。對(duì)于普通情況,只要修改組元素
參考文獻(xiàn)
[1]Sun Teng-Da, Wang Jin-Feng,2007,A Traffic Cellular Automata Model Based on Road Network Grids and Its Spatial & Temporal Resolution's Influences on Simulation, Simulation Modeling Practice and Theory,DOI: 10.1016/j.simpat.
[2]Steven J.Vaughan-Nichols.Will Vector Graphics Finally Make It on the Web7.IEEEComputer,2001,34(12):22-24.
[3]http://www.w3school.com.cn/svg/.
[4]唐學(xué)波.基于SVG的時(shí)空GIS文件系統(tǒng)增量更新存儲(chǔ)機(jī)制研究[D].上海:同濟(jì)大學(xué),2009.
[5]Liang JZ. Using SVG Technique to Organize and Display Data of Embedded GIS, 2009 5TH INTERNATIONAL CONFERENCE ON WIRELESS COMMUNICATIONS, NETWORKING AND MOBILE COMPUTING, VOLS: 1-8, p: 5375-5377,2009.
[6]鄔倫,劉瑜,張晶,等.地理信息系統(tǒng)—原理、方法和應(yīng)用[M].科學(xué)出版社,2008.