一个基于SVG的空间分析技术的研究

2011-09-17 10:31范磬亚鞠海燕
微型电脑应用 2011年1期
关键词:空间数据图层矢量

范磬亚,鞠海燕

0 引言

WebGIS是在 Internet或 Intranet网络环境下的一种获取、存储、传输、分析和显示地理信息的计算机信息系统。目前在 WebGIS应用中,地图数据的显示一般采用两种方式:栅格地图或者矢量地图。显示栅格地图,用户不需要安装插件,但不能对图像进行进一步的操作和交互。而矢量图形的显示是计算机软件通过一定算法,将矢量对象的描述信息在显示终端上重绘的结果,但是速度和可重用性等方面仍然存在很多障碍。SVG是互联网联盟(W3C)的正式推荐标准,是一种基于XML的描述2D可容纳矢量图形、点阵图像和文本图像的语言。SVG的出现可以说对Web GIS空间数据发布提供了一个开放的解决方案。目前,如何在SVG格式的矢量地图中实现复杂空间分析是一个有待研究的问题。空间数据管理产品提供了丰富的空间分析函数,可以借助它来实现SVG图形的空间分析。但是空间数据管理产品只支持其定义的空间数据的格式,因此问题的关键是如何实现SVG和空间数据管理产品定义的空间数据类型的相互转换。

1 Oracle Spatial

目前空间数据管理产品主要有2种:一种是ESRI推出的ArcSDE,另一种是Oracle公司推出的空间数据管理组件Oracle Spatial,本文的研究选择了Oracle Spatial。在Oracle Spatial的对象——关系模型中,一个空间实体的空间信息是存在用户定义的数据表中的一个字段,类型为SDO_GEOMETRY。Oracle Spatial这样定义SDO_GEOMETRY这个字段:

SDO_GYTPE:说明该空间实体的类型。是一个4个数字的整数,其格式为 dltt,其中 d表示几何对象的维数;l表示三维线性参考系统中的线性参考值,tt为几何对象的类型。

SDO_SRID:一个预留属性,Oracle Spatial计划将它作为空间引用的外键。

SDO_POINT:由X、Y、Z 3个NUMBER型的属性构成,如果 SDO_ELEM_INFO和 SDO_ORDINATES都是NULL的话,该对象便是非空的,X、Y两个值用来表示点实体的坐标。否则,SDO_POINT这个属性将被忽略。

SDO_ELEM_INFO:定义为一个可变长的数组。每 3个数作为一个元素单位,用于解释坐标是如何存储在SDO_ORDINATES数组中的。本文把组成一个元素的3个数称为3元组。一个3元组包含以下3部分的内容:

a)SDO_ STARTING_OFFSET表明每个几何元素的第一个坐标在SDO_ ORD INATES数组中的存储位置。它的值从1开始,逐渐增加。

b)SDO_ETYPE 用于表示几何对象中每个组成元素的几何类型。

c)SDO_INTERPRETATION具有两层含义,具体的作用由SDO_ETYPE是否为复杂元素决定。

具体见表1

表1 SDO_ELEM_INFO的值及含义

1003或2003 2由弧线段组成的多边形,起点与终点必须相同。一个弧线段由起点、弧上任意一点以及终点组成。相邻两段弧的接点不需要重复存储。1003或2003 3 矩形,由左下角和右上角两点确定1003或2003 4 圆,由圆周上的不同三点确定4 n>1由直线段和弧线段连成的复合线,n表示组成复合线的相邻子元素的个数,子元素的SDO_ETYPE必须为2,一个子元素的最后一点是下一个子元素的第一个点,并且该点不能重复。1005或2005 n>1由直线段和弧线段连成的复合多边形,n表示组成复合多边形的相邻子元素的个数,子元素的SDO_ETYPE必须为2,一个子元素的最后一点是下一个子元素的第一个点,并且该点不能重复。多边形的起点和终点必须相同。

SDO_ORDINATES:定义为一个可变长的数组,数组元素类型为NUMBER。用来存储组成空间实体边界的点的坐标值。

2 SVG

SVG是由国际WWW委员会(W3C)组织为适应Internet Web应用的飞速发展需要而制定的一套基于XML语言的可缩放矢量图形语言描述规范,用来描述二维矢量图形和矢量/点阵混合图形的置标语言,其全称是可扩展矢量图形规范(Scalable Vector Graphics)。SVG 与目前因特网上常用的JPEG、GIF等网络上广泛使用的图形格式相比较具有许多优点:(1)任意缩放性、文件尺寸小。(2)能加快下载浏览速度。(3)能实现方便的图形定位与检索。(4)具有丰富的表现效果。(5)具有良好的可重用性。(6)具有跨平台功能。

由于W3C组织制定SVG规范是面向通用图形图像的网上发布,而空间数据则具有特殊的和复杂的数据结构,则需要了解基于矢量格式的空间数据如何在SVG文档中进行组织或表达。这包含两方面的内容:一是空间数据所表示的地物是如何进行分类;二是表示各种地物的图形数据是如何在文档中进行组织和表达。

2.1 SVG Path的图形表达分析

SVG的路径(Path)可以是一个形状的外框,也可以是用来剪裁的路径线条,总之就是“一根线”。这根线可以被描边,可以用来表达空间,如果封闭的话又可以被填充。路径是用点的集合来描述的,路径所使用的描绘方式有moveto、lineto、curveto、arc和closepath等。一个复合路径中还可以含有子路径,形式相当灵活。

Path元素的几何坐标信息定义在d=”……”属性里,由命令和数据参数组成,命令包括M、L、H、V、A、C、S、Q、T、Z,并区分大小写,小写表示的是相对坐标。

2.2 基于SVG空间数据组织方法设计

对于空间信息地物的分类,在 GIS界有很多的研究。通常,人们将地物按其几何形态分为5类,即:点状实体、线状实体、面状实体、注记体,以及栅格体。

目前,对于空间数据的组织主要有两种方法:分层组织法和分要素组织法。其中,分层组织法来源于制图学中的专题分层和CAD中的实体分层。考虑到SVG数据格式的特点,地理空间数据的组织则采用简单的同类要素分层组织模式,这样既考虑到数据管理的便捷和易操作,又可使每个图层只包含一类几何特征要素的地物。在SVG文档中,每个图层通过一分组元素g来表示,该元素的ID属性表示图层的标识符,对于图层的显示样式,不同类型的图层有不同的定义规则。

SVG本身就定义了一些与图形相关的元素,如矩形,圆,椭圆,线段,多条线,多边型。这些元素只能表达一些简单的图形对象,对于复杂的空间数据类型如线和面不是很适合,这里可以考虑用SVG的Path来设计表达。各图层的设计如下:

1)点图层

对于点图层,包含Point,MultiPoint几何类型,各种点状地物是通过SVG中的Circle元素进行表达,而x,y坐标则分别以变量的形式赋给Circle元素的cx和cy属性,并为Circle元素的半径r属性赋与一个较小的值。下面就是点图层的实例:

其中UserlD是用户自定义的ID等等,这些信息可从提供源数据的软件获得。

2)线图层

在SVG中,对于传统的线状实体是以path定义,并对其赋予相应的属性函数,以下是线图层的例子。

同时利用分组标志确定线层,对整个线图层用stoke,stroke_width等定义线段的属性。

3)面图层

在SVG文档中,面状实体可通过多边形构成,用path元素来表达。以下是一个面图层的例子。

其显示样式的定义与线图层一样多在分组标志中定义。

以下是一个多边形图层的实例,在SVG文档中完整的文本描述如下:

4)标记层

对于地图中的标记,也直接通过表示。

3 转换的设计与实现

3.1 SDO_GEOMETRY转换成SVG

从SDO_GEOMETRY转换为SVG模块分为点、线、面的转换。从SDO_GEOMETRY转换为SVG Path起关键作用的是SDO_GEOMETRY数据类型中的SDO_ELEM_INFO和SDO_ORDINATES,前者决定了我们要转换的空间几何类型中每个组成元素的几何类型以及每个几何元素的第一个坐标在SDO_ORDINATES中的存储位置,后者存放的是相关的坐标信息。对于读取到的三元组分别用SVG Path绘制相应的几何类型。转换流程图如下图1所示:

图1 SVG Path转换成SDO_GEOMETRY

3.2 SVG转换成SDO_GEOMETRY

SVG对于点图层直接用 Circle元素进行表达,其转换直接将 Circle元素坐标信息写到 SDO_ORDINATES数组中,相对复杂的是 SVG 从 SVG Path转换为SDO_GEOMETRY,本文为此设计了3个子模块:SVG Path的指令及空间数据读取模块、SVG Path数据解析处理模块、空间数据类型对应转换模块,其相互关系是由SVG Path数据解析处理模块调用其他两个模块。

从SVG Path中读取到的数据有可能是空间坐标数据,也有可能是Path里的M、A、L、Z参数,针对不同的数据相应的解析处理过程也不一样。同时要注意的是每个 Path里实际上可以由多对“M”和“Z”来表示多个环。SVG Path数据解析处理模块的“画直线处理部分”和“画圆弧线处理部分”只是解析出直线和圆弧线的SDO_GEOMETRY形式的表达,而要对环线、复合线、复合环线的完全地解析就要在“初始化处理”和“转换结束处理”部分调用空间数据类型对应转换模块做进一步实现。SVG Path数据解析处理模块的流程如图2:

图2 SVG Path数据解析处理模块

4 应用举例

Oracle Spatial提供的空间分析功能很多,在这里通过研究距离测量的具体实现过程,找出其他空间分析功能的执行的过程。在界面输入要测量的两点具体坐标值。用户点击“距离测量”按钮,由客户端封装成距离测量的XML格式的命令,再向服务器端发出请求。数据库的业务逻辑层将距离测量命令解析,调用从SVG到SDO_GEOMETRY 模块,得出两点的SDO_GEOMETRY形式的编码并执行空间分析函数SDO_GEOM.SDO_ DISTANCE,调用从SDO_GEOMETRY转换到SVG模块将结果转成SVG形式编码,再将结果封装到命令里,并将结果返回到客户端,在客户端显示出距离值。如图3。

图3 应用举例

5 总结

目前,基于SVG的WebGIS是一个全新的研究领域,但是鉴于空间分析功能在GIS的重要性和Oracle Spatial的丰富的空间分析管理功能,本文就此实现了SVG和Oracle Spatial两者的转换,详细阐述了其转换过程。但是基于SVG/Oracle Spatial 应用模型还有许多工作值得继续研究,比如使用异步方式传输模式解决大数据量下载的问题,多用户数据更新等。相信不久将来,SVG将在WebGIS领域中得到越来越广泛的应用。

[1]刘啸,毕永年.基于XML的SVG应用指南[M].北京:北京科海集体公司出品,2001.

[2]袁满,于春生,聂晶.基于 ArcSDE/SVG 的分布式 WebGIS模型[J].计算机应用研究,2009,26(3):939~941.

[3]袁家政,须德,鲍泓.基于XML矢量图形SVG应用的软件体系结构研究[J].中国图象图形学报,2007,12(4):718~725.

[4]赵军,翟裕忠.一个基于SVG的GIS及其空间分析技术[J].计算机工程与应用,2004,(1):109~111.

[5]谢亦才,玄立超.基于SVG的网络GIS图形编辑系统设计与实现[J].计算机技术与发展,2009,19(4):213~216.

猜你喜欢
空间数据图层矢量
一种适用于高轨空间的GNSS矢量跟踪方案设计
矢量三角形法的应用
GIS空间数据与地图制图融合技术
解密照片合成利器图层混合模式
基于矢量最优估计的稳健测向方法
三角形法则在动态平衡问题中的应用
跟我学添加真实的光照效果
国外建筑CAD图层标准发展现状与研究
用Photoshop图层技术制作精美邮票
网格化存储的几项关键技术分析