利用DOM、SAX交互解析基于SVG的WebGIS地图编码 |
2013-01-28 12:04 作者:邓晓斌 黄志芳 刘小丽 来源:硅谷网-《硅谷》杂志 HV: 编辑: 【搜索试试】
|
|
据《硅谷》杂志2012年第22期刊文称,采用SVG表达网络地图,使用DOM和SAX技术实现网络地图的交互,为WebGIS提供新的开发思路。
关键词:DOM;SAX;SVG;WebGIS
0引言
WebGIS是Internet与GIS的结合产物,也是GIS研究的一个重要方向。然而,在Web上发布信息量巨大的地理空间信息(主要是以图形图像的方式)必将导致Internet网络传输速度降低,而短小灵活的矢量图形是缓解这个困境的有效手段。SVG就是一种基于XML的矢量图形格式,由于它能良好的将矢量图形展现在Web上,因而SVG可以成为GIS很好的网络载体。SVG可以直接使用XML的技术,其中DOM和SAX都是XML的重要技术,利用它们可以很好的解析SVG文档[1]。本文从SVG、DOM、SAX基本原理出发,用SVG语言创建地图文档,利用SAX可以快速的访问、查询文档中的标记或属性,而利用DOM对象添加、删除文档树的标记或属性,有机结合了SAX和DOM各自的优势,从而实现了WebGIS地图的各种操作功能。
1SVG的Web地图表示功能
SVG(ScalableVectorGraphics)[2]是一种基于XML的用来描述二维矢量图形和矢量/点阵混合图形的置标语言,是一种全新的矢量图形规范,SVG规范定义了SVG的特征、语法和显示效果,包括模块化的XML命名空间(namespace)和SVG文档对象模型(DOM)。SVG的绘图可以通过动态和交互式方式进行,在实际操作中,则是以嵌入方式或脚本方式来实现的。SVG不仅提供超链接功能,还定义了丰富的事件。由于SVG支持脚本语言(script),可以通过Script编程,访问SVGDOM或SAX的元素和属性,即可响应特定的事件,从而提高了SVG的动态和交互性能。SVG实现了图形、图像和文字的有机统一。SVG除了支持HTML中常用的标记,如文本、图像、链接、交互性、CSS的使用、脚本(Script)外,还提供了大量针对图形、图像、动画的特定标记。这就为实现GIS提供了可能。图1是用SVG生成的世界人口增长分布地图,使用标记<embed>嵌入到网页中。
图1
2DOM与SAX的简介
文档对象模型DOM是用于读取和操作XML文件的标准。DOM为XML文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,用户编写的代码就可以使用DOM接口来操作这个树结构。用户可以遍历树以了解原始文档包含了什么,可以删除树的几个部分,还可以重新排列树和添加新的分支,等等[3]。
DOM的缺点有:
1)DOM构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。
2)DOM创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。如果只需关注原始文档的少量部分,那么创建那些永远不被使用的对象是极其浪费的。
3)DOM解析器必须在代码取得控制权之前读取整个文档。对于非常大的文档,这会引起显著的延迟。
SAX(SimpleAPIsforXML)在概念上与DOM完全不同。首先,不同于DOM的文档驱动,它是事件驱动的,也就是说,它并不需要读入整个文档,而文档的读入过程也就是SAX的解析过程。所谓事件驱动,是指一种基于回调(callback)机制的程序运行方法。当需要处理大的文件的时候,SAX对内存的需求很小,因为它并不会因为XML文档尺寸的增加而增加对内存的需求。SAX允许在任何时候终止解析,这样的一个好处是如果实际上只需要对文档的一部分信息进行处理的时候,可以在得到该部分信息以后,就终止对文档的解析。
利用SAX可以快速的访问、查询文档中的某个点,并能对该点产生一个事件。SAX的特点正好弥补了DOM的缺陷[4]。
当然,SAX也有自身的缺点,比如它不适合用来添加、删除文档中的内容,但DOM可以很好的弥补SAX的缺点。
由于用SVG表示地图的文件比较大,所以用SAX来快速访问、查询文档中的内容,用DOM来添加、删除文档中的内容,很好地实现WebGIS的地图操作功能。
3网络地图的操作实现
3.1SAX访问和查询SVG文档的内容
用SAX读取SVG文档中的内容按以下步骤:①创建一个事件处理程序;②创建SAX解析器;③向解析器分配事件处理程序;④解析文档,同时向事件处理程序发送每个事件。
SAX处理器一般情况下将产生三种事件:Start-element()、Characters()、End-element()。
functionStart-element()
{if(查询条件)
{response.write(“<svg>”);
response.write(“<path>”);
}
}
functionCharacters()
{if(查询条件)
{response.write(“”);
}
}
functionEnd-element()
{if(查询条件)
{response.write(“”);
);
}
}
图2就是用SAX读取SVG图形(图1)中显灰色部分的文档内容。
图2图3
3.2DOM添加或删除SVG文档的内容
在DOM中用removeChild(node)可以删除SVG文档中的节点。而添加SVG文档中的节点有以下步骤:①建立一个新节点svgElementtuli=doc.CreateElement("g");②建立一个属性,并将此属性放置在接点“tuli”下:svgAttributenewID=doc.CreateAttribute("");newID.InnerText="";tuli.SetAttributeNode(newID);③建立一个节点,并将此作为“tuli”的子节点:svgElementnewNodeName=doc.CreateElement("");newNodeName.InnerText="";tuli.AppendChild(newNodeName);④用Save保存节点。图3是通过添加节点生成了图例。
4结语
本文提出了将XML中重要技术DOM和SAX运用到SVG图形交互解析中,充分利用了它们各自的优势,较好地完成了WebGIS地图的操作功能。在实现的过程中,要时常交换使用DOM和SAX技术,这也是一项复杂的任务,如何更好地将它们整合到一起,将是今后研究的方向。
作者简介:
邓晓斌(1983-),男,江西贵溪人,硕士,讲师,研究方向:网络地理信息。
|
|
|
|
【对“利用DOM、SAX交互解析基于SVG的WebGIS地图编码”发布评论】 |
版权及免责声明:
① 本网站部分投稿来源于“网友”,涉及投资、理财、消费等内容,请亲们反复甄别,切勿轻信。本网站部分由赞助商提供的内容属于【广告】性质,仅供阅读,不构成具体实施建议,请谨慎对待。据此操作,风险自担。
② 内容来源注明“硅谷网”及其相关称谓的文字、图片和音视频,版权均属本网站所有,任何媒体、网站或个人需经本网站许可方可复制或转载,并在使用时必须注明来源【硅谷网】或对应来源,违者本网站将依法追究责任。
③ 注明来源为各大报纸、杂志、网站及其他媒体的文章,文章原作者享有著作权,本网站转载其他媒体稿件是为传播更多的信息,并不代表赞同其观点和对其真实性负责,本网站不承担此类稿件侵权行为的连带责任。
④ 本网站不对非自身发布内容的真实性、合法性、准确性作担保。若硅谷网因为自身和转载内容,涉及到侵权、违法等问题,请有关单位或个人速与本网站取得联系(联系电话:01057255600),我们将第一时间核实处理。
|
|