杜慶峰+彭治平
摘 要 提出了在SVG圖形文件上直接進行地理元素分層的思路,對SVG格式地圖分層進行了初步設(shè)計,提出了分層算法。經(jīng)驗證,算法是有效的。
關(guān)鍵詞 SVG;GIS;地圖分層
中圖分類號:TP3 文獻標識碼:A 文章編號: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
我們認為地圖是由許多圖形元素疊加組成的,每一類的圖形元素都各具特點。將一些具有一定特征的圖形元素劃分在一起,就構(gòu)成了“層”的概念。常見的地圖圖層有:河流層、道路層、綠地層、河流層、建筑層、行政區(qū)規(guī)劃層等。圖層控制的意義就在于,通過控制地圖上元素可見性,在不同的縮放效果下,僅顯示所需的地理元素,使地圖顯得詳略得當。例如在一般WebGIS的地圖中,不同的放大比例下,所顯示的行政區(qū)劃級別會有所不同。在不同的縮放比例下,顯示不同的視圖,對不同的地理元素進行篩選顯示,可以使用戶能有更好的體驗。
在GIS中,SVG作為一種圖像的表現(xiàn)手段越來越多被使用,但還并不普及;基于SVG信息存儲和共享交互則更是有待更多研究。圖像分層和地理元素查詢等功能上,國內(nèi)有大量研究成果。但國內(nèi)大多數(shù)研究和解決辦法仍是基于柵格等模型,SVG本身幾乎只被用于圖像表現(xiàn)。事實上SVG因其具有的優(yōu)勢,將其使用在GIS中更低的層級上是值得研究和考慮的。
本文結(jié)合國家地理元素分層標準以及SVG本身的特點,在SVG本身這一更低的層級上對地圖分層,并驗證了分層效果。
1
在SVG的樹狀結(jié)構(gòu)中,
style-attribute=”style-attribute”
transform=”transformation commands”>
<!-- groups content here -->
將
2 圖層分類規(guī)則及算法
依據(jù)《基礎(chǔ)地理信息要素分類與代碼》中定義,地理元素可以分為定位基礎(chǔ)、水系、居民地及設(shè)施、交通、管線、境界與政區(qū)、地貌和植被等八大類,每個大類下各包含多個小類。例如定位基礎(chǔ)大類包含測量控制點和數(shù)學(xué)基礎(chǔ)兩小類;水系大類包含河流、溝渠、湖泊、水庫、海洋要素、其他水系要素、水利及附屬設(shè)施八小類等。
由于名稱長短不一,為了方便查找和匹配,使用二進制代碼來代替復(fù)雜的英文字符名稱就方便的多。根據(jù)圖層的層級和個數(shù),我們采用八位二進制代碼來標識圖層,前四位(0000XXXX)標識一級圖層,后四位(XXXX0000)標識二級圖層。依據(jù)如此編碼,地圖中最多可包含十六種圖層大類,每個圖層大類下最多可包含十六種圖層小類,也就是說整個地圖最多可有二百五十六種圖層小類,完全可以滿足圖層分類的擴展需求。就以第二個大類水系及其以下的七個二級圖層為例,前四位編碼為0001,七個二級圖層的后四位編碼為0000至0110。具體表現(xiàn)如下:
……
……
…
SVG的本質(zhì)是XML,SVG和XML一樣是一種典型的層次樹狀結(jié)構(gòu),這種結(jié)構(gòu)的文檔,定位其某一個部分是比較容易的,因此控制也較容易。在SVG中,通過設(shè)置元素的Visibility屬性可以實現(xiàn)對于元素的顯示或隱藏。Visibility屬性有兩個值可供選擇:默認值visible代表顯示,而hidden代表隱藏。在SVG中,元素遵守CSS2的樣式繼承規(guī)則。因此,一般情況下,通過設(shè)置指定圖層根節(jié)點
我們可以對這種特殊情況進行特殊處理,除了設(shè)置圖層根節(jié)點
Visibility=”visible”
對于這種情況,需要在關(guān)閉圖層的時候,使Visibility屬性失效。而在打開圖層的時候,使visibility屬性值變回”visible”。
Visibility=”hidden”
對于這種情況,正常情況下是不顯示該元素的,故無論包含該元素的圖層是隱藏還是顯示狀態(tài),該元素均不顯示。
整個地圖分層的偽代碼如下所示:
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 分層算法的驗證測試
地圖分層算法其基本思想是:利用SVG中的組元素
通過以上分析,我們準備了兩組數(shù)據(jù),分別為Rects組、Circles組和Texts組,每組中包含三個對應(yīng)的SVG元素。我們在Circles組和Texts組中,預(yù)先設(shè)定了元素的Visibility
圖1 分層驗證測試文件的顯示
屬性。通過Rects組可以對通常情況進行測試,通過Circles組可以對特殊情況進行測試。通過Texts組對這兩種情況進行綜合測試。
通過以上分析,我們準備也測試數(shù)據(jù),包含水系(包含河流)、交通(包含城市道路和鄉(xiāng)村交道路)、植被與土質(zhì)(包含城市綠地)三大圖層。且對城市道路中的第一條道路沒有預(yù)設(shè)“visibility”值,而第四條道路的visibility=”hidden” ,除此之外的所有圖形元素都預(yù)設(shè)visibility=”visible” 。
首先,需要將測試的SVG文件導(dǎo)入到Web瀏覽器中進行顯示。該測試文件在瀏覽器中顯示如圖1所示。圖中共有三個圖層,包括水系層、植被和土質(zhì)層以及交通層。由于城市道路層的第四個元素
然后,通過點擊水系復(fù)選框來隱藏水系層,測試結(jié)果如圖2所示。與圖1比較后,可以看出,水系層消失了。
圖2 隱藏水系層的結(jié)果
接著,通過點擊復(fù)選框水系來顯示水系層,點擊植被與土質(zhì)來隱藏植被和土質(zhì)層,測試結(jié)果如圖3所示。從圖中可以看出,原先的河流又出現(xiàn)了,而植被和土質(zhì)層的綠地則均被隱藏了。
圖3 隱藏植被和土質(zhì)層的結(jié)果
4 結(jié)論
通過以上測試結(jié)果可以看出,本文提出的分層顯示算法是可行的。對于普通情況,只要修改組元素
參考文獻
[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的時空GIS文件系統(tǒng)增量更新存儲機制研究[D].上海:同濟大學(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”
對于這種情況,需要在關(guān)閉圖層的時候,使Visibility屬性失效。而在打開圖層的時候,使visibility屬性值變回”visible”。
Visibility=”hidden”
對于這種情況,正常情況下是不顯示該元素的,故無論包含該元素的圖層是隱藏還是顯示狀態(tài),該元素均不顯示。
整個地圖分層的偽代碼如下所示:
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 分層算法的驗證測試
地圖分層算法其基本思想是:利用SVG中的組元素
通過以上分析,我們準備了兩組數(shù)據(jù),分別為Rects組、Circles組和Texts組,每組中包含三個對應(yīng)的SVG元素。我們在Circles組和Texts組中,預(yù)先設(shè)定了元素的Visibility
圖1 分層驗證測試文件的顯示
屬性。通過Rects組可以對通常情況進行測試,通過Circles組可以對特殊情況進行測試。通過Texts組對這兩種情況進行綜合測試。
通過以上分析,我們準備也測試數(shù)據(jù),包含水系(包含河流)、交通(包含城市道路和鄉(xiāng)村交道路)、植被與土質(zhì)(包含城市綠地)三大圖層。且對城市道路中的第一條道路沒有預(yù)設(shè)“visibility”值,而第四條道路的visibility=”hidden” ,除此之外的所有圖形元素都預(yù)設(shè)visibility=”visible” 。
首先,需要將測試的SVG文件導(dǎo)入到Web瀏覽器中進行顯示。該測試文件在瀏覽器中顯示如圖1所示。圖中共有三個圖層,包括水系層、植被和土質(zhì)層以及交通層。由于城市道路層的第四個元素
然后,通過點擊水系復(fù)選框來隱藏水系層,測試結(jié)果如圖2所示。與圖1比較后,可以看出,水系層消失了。
圖2 隱藏水系層的結(jié)果
接著,通過點擊復(fù)選框水系來顯示水系層,點擊植被與土質(zhì)來隱藏植被和土質(zhì)層,測試結(jié)果如圖3所示。從圖中可以看出,原先的河流又出現(xiàn)了,而植被和土質(zhì)層的綠地則均被隱藏了。
圖3 隱藏植被和土質(zhì)層的結(jié)果
4 結(jié)論
通過以上測試結(jié)果可以看出,本文提出的分層顯示算法是可行的。對于普通情況,只要修改組元素
參考文獻
[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的時空GIS文件系統(tǒng)增量更新存儲機制研究[D].上海:同濟大學(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”
對于這種情況,需要在關(guān)閉圖層的時候,使Visibility屬性失效。而在打開圖層的時候,使visibility屬性值變回”visible”。
Visibility=”hidden”
對于這種情況,正常情況下是不顯示該元素的,故無論包含該元素的圖層是隱藏還是顯示狀態(tài),該元素均不顯示。
整個地圖分層的偽代碼如下所示:
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 分層算法的驗證測試
地圖分層算法其基本思想是:利用SVG中的組元素
通過以上分析,我們準備了兩組數(shù)據(jù),分別為Rects組、Circles組和Texts組,每組中包含三個對應(yīng)的SVG元素。我們在Circles組和Texts組中,預(yù)先設(shè)定了元素的Visibility
圖1 分層驗證測試文件的顯示
屬性。通過Rects組可以對通常情況進行測試,通過Circles組可以對特殊情況進行測試。通過Texts組對這兩種情況進行綜合測試。
通過以上分析,我們準備也測試數(shù)據(jù),包含水系(包含河流)、交通(包含城市道路和鄉(xiāng)村交道路)、植被與土質(zhì)(包含城市綠地)三大圖層。且對城市道路中的第一條道路沒有預(yù)設(shè)“visibility”值,而第四條道路的visibility=”hidden” ,除此之外的所有圖形元素都預(yù)設(shè)visibility=”visible” 。
首先,需要將測試的SVG文件導(dǎo)入到Web瀏覽器中進行顯示。該測試文件在瀏覽器中顯示如圖1所示。圖中共有三個圖層,包括水系層、植被和土質(zhì)層以及交通層。由于城市道路層的第四個元素
然后,通過點擊水系復(fù)選框來隱藏水系層,測試結(jié)果如圖2所示。與圖1比較后,可以看出,水系層消失了。
圖2 隱藏水系層的結(jié)果
接著,通過點擊復(fù)選框水系來顯示水系層,點擊植被與土質(zhì)來隱藏植被和土質(zhì)層,測試結(jié)果如圖3所示。從圖中可以看出,原先的河流又出現(xiàn)了,而植被和土質(zhì)層的綠地則均被隱藏了。
圖3 隱藏植被和土質(zhì)層的結(jié)果
4 結(jié)論
通過以上測試結(jié)果可以看出,本文提出的分層顯示算法是可行的。對于普通情況,只要修改組元素
參考文獻
[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的時空GIS文件系統(tǒng)增量更新存儲機制研究[D].上海:同濟大學(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.