摘 要提出了在SVG图形文件上直接进行地理元素分层的思路,对SVG格式地图分层进行了初步设计,提出了分层算法.经验证,算法是有效的.
关 键 词SVG;GIS;地图分层
中图分类号:TP3文献标识码:A文章编号:1671-7597(2014)09-0050-02
Abctract:IproposeanideatoclassifygeologicalelementsintolayersonSVG/XMLformatmaps,preliminarilydesignthewaytoclassify,thealgorithm.Theapplicationverificationshowsthatthealgorithmiseffective.
Keywords:SVG;GIS;Geologicalelementlayer
我们认为地图是由许多图形元素叠加组成的,每一类的图形元素都各具特点.将一些具有一定特征的图形元素划分在一起,就构成了“层”的概念.常见的地图图层有:河流层、道路层、绿地层、河流层、建筑层、行政区规划层等.图层控制的意义就在于,通过控制地图上元素可见性,在不同的缩放效果下,仅显示所需的地理元素,使地图显得详略得当.例如在一般WebGIS的地图中,不同的放大比例下,所显示的行政区划级别会有所不同.在不同的缩放比例下,显示不同的视图,对不同的地理元素进行筛选显示,可以使用户能有更好的体验.
在GIS中,SVG作为一种图像的表现手段越来越多被使用,但还并不普及;基于SVG信息存储和共享交互则更是有待更多研究.图像分层和地理元素查询等功能上,国内有大量研究成果.但国内大多数研究和解决办法仍是基于栅格等模型,SVG本身几乎只被用于图像表现.事实上SVG因其具有的优势,将其使用在GIS中更低的层级上是值得研究和考虑的.
本文结合国家地理元素分层标准以及SVG本身的特点,在SVG本身这一更低的层级上对地图分层,并验证了分层效果.
1
在SVG的树状结构中,
style-attribute等于”style-attribute”
tranorm等于”tranormationmands”>
<!--group’scontenthere-->
将
2图层分类规则及算法
依据《基础地理信息要素分类与代码》中定义,地理元素可以分为定位基础、水系、居民地及设施、交通、管线、境界与政区、地貌和植被等八大类,每个大类下各包含多个小类.例如定位基础大类包含测量控制点和数学基础两小类;水系大类包含河流、沟渠、湖泊、水库、海洋要素、其他水系要素、水利及附属设施八小类等.
由于名称长短不一,为了方便查找和匹配,使用二进制代码来代替复杂的英文字符名称就方便的多.根据图层的层级和个数,我们采用八位二进制代码来标识图层,前四位(0000XXXX)标识一级图层,后四位(XXXX0000)标识二级图层.依据如此编码,地图中最多可包含十六种图层大类,每个图层大类下最多可包含十六种图层小类,也就是说整个地图最多可有二百五十六种图层小类,完全可以满足图层分类的扩展需求.就以第二个大类水系及其以下的七个二级图层为例,前四位编码为0001,七个二级图层的后四位编码为0000至0110.具体表现如下:
等
等
等
SVG的本质是XML,SVG和XML一样是一种典型的层次树状结构,这种结构的文档,定位其某一个部分是比较容易的,因此控制也较容易.在SVG中,通过设置元素的Visibility属性可以实现对于元素的显示或隐藏.Visibility属性有两个值可供选择:默认值visible代表显示,而hidden代表隐藏.在SVG中,元素遵守CSS2的样式继承规则.因此,一般情况下,通过设置指定图层根节点
我们可以对这种特殊情况进行特殊处理,除了设置图层根节点
对于这种情况,需要在关闭图层的时候,使Visibility属性失效.而在打开图层的时候,使visibility属性值变回”visible”.
Visibility等于”hidden”
对于这种情况,正常情况下是不显示该元素的,故无论包含该元素的图层是隐藏还是显示状态,该元素均不显示.
整个地图分层的伪代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19ProcedureLayer(layername)
INPUTlayername:String
Begin
varTargetLayer等于find_node_by_name(layername)
ifTargetLayer.Visibility等于”visible”then
TargetLayer.Visibility等于”hidden”
trerseTargetLayerinlevel-ordersequence
letMbethecurrentunit
IfM.hasAttribute(“Visibility”)andM.Visibility等于“visible”then
M.removeAttribute(“Visibility”)
highlight_node(M)
endif
end-trerse
endif
else
TargetLayer.Visibility等于“visible”
unhighlight_nodes_under_layer(TargetLayer)
endif
End
3分层算法的验证测试
地图分层算法其基本思想是:利用SVG中的组元素
通过以上分析,我们准备了两组数据,分别为Rects组、Circles组和Texts组,每组中包含三个对应的SVG元素.我们在Circles组和Texts组中,预先设定了元素的Visibility
图1分层验证测试文件的显示
属性.通过Rects组可以对通常情况进行测试,通过Circles组可以对特殊情况进行测试.通过Texts组对这两种情况进行综合测试.
通过以上分析,我们准备也测试数据,包含水系(包含河流)、交通(包含城市道路和乡村交道路)、植被与土质(包含城市绿地)三大图层.且对城市道路中的第一条道路没有预设“visibility”值,而第四条道路的visibility等于”hidden”,除此之外的所有图形元素都预设visibility等于”visible”.
首先,需要将测试的SVG文件导入到Web浏览器中进行显示.该测试文件在浏览器中显示如图1所示.图有三个图层,包括水系层、植被和土质层以及交通层.由于城市道路层的第四个元素的Visibility属性为hidden,所以在这里没有显示该元素.图形上方的复选框用于操作图层的开关.
然后,通过点击水系复选框来隐藏水系层,测试结果如图2所示.与图1比较后,可以看出,水系层消失了.
图2隐藏水系层的结果
接着,通过点击复选框水系来显示水系层,点击植被与土质来隐藏植被和土质层,测试结果如图3所示.从图中可以看出,原先的河流又出现了,而植被和土质层的绿地则均被隐藏了.
图3隐藏植被和土质层的结果
4结论
通过以上测试结果可以看出,本文提出的分层显示算法是可行的.对于普通情况,只要修改组元素
有关论文范文主题研究: | 关于城市道路的论文范文集 | 大学生适用: | 研究生论文、硕士论文 |
---|---|---|---|
相关参考文献下载数量: | 54 | 写作解决问题: | 怎么写 |
毕业论文开题报告: | 标准论文格式、论文题目 | 职称论文适用: | 核心期刊、高级职称 |
所属大学生专业类别: | 怎么写 | 论文题目推荐度: | 经典题目 |
[2]StevenJ.Vaughan-Nichols.WillVectorGraphicsFinallyMakeItontheWeb7.IEEEComputer,2001,34(12):22-24.
[3]http://.w3school../svg/.
[4]唐学波.基于SVG的时空GIS文件系统增量更新存储机制研究[D].上海:同济大学,2009.
[5]LiangJZ.UsingSVGTechniquetoOrganizeandDisplayDataofEmbeddedGIS,20095THINTERNATIONALCONFERENCEONWIRELESSCOMMUNICATIONS,NETWORKINGANDMOBILECOMPUTING,VOLS:1-8,p:5375-5377,2009.
[6]邬伦,刘瑜,张晶,等.地理信息系统―原理、方法和应用[M].科学出版社,2008.