CN101246597A - 大规模矢量地图数据渐进传输和动态重建的方法 - Google Patents
大规模矢量地图数据渐进传输和动态重建的方法 Download PDFInfo
- Publication number
- CN101246597A CN101246597A CNA2007101784393A CN200710178439A CN101246597A CN 101246597 A CN101246597 A CN 101246597A CN A2007101784393 A CNA2007101784393 A CN A2007101784393A CN 200710178439 A CN200710178439 A CN 200710178439A CN 101246597 A CN101246597 A CN 101246597A
- Authority
- CN
- China
- Prior art keywords
- data
- curve
- node
- datablock
- level
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
一种大规模矢量地图数据渐进传输和重建的方法,步骤如下:(一)多尺度矢量地图数据实时动态生成和重建算法:其步骤是(1)顶点删除(2)指定尺度下的矢量地图数据快速生成(3)增量数据的构建(4)顶点调整(5)顶点插入(6)结点分裂算法(7)矢量地图数据重建;(二)系统结构实现:其步骤是(1)客户端:同应用服务器进行交互,获取空间数据、实时动态生成增量数据以及进行数据重建;(2)应用服务器:通过多尺度空间数据引擎检索相应的数据并进行反序列化,实时构建多尺度空间矢量数据模型。本发明提出了适合于大数据量矢量地图渐进传输的多尺度数据模型,实现了大数据量矢量地图数据实时渐进传输和快速可视化的功能。
Description
一、技术领域
本发明提供一种大规模矢量地图数据渐进传输和动态重建的方法,属于空间信息技术领域。
二、背景技术
空间信息技术的飞速发展,使高分辨率、高精度空间数据的快速获取成为可能,但随之引起了一系列问题亟待解决,如:大数据量矢量地图数据实时快速传输和显示等。目前地图综合算法很难满足大规模矢量地图数据的实时快速传输和显示,特别是在多用户并发访问的情况下,现有的实时地图综合算法对服务器会构成极大的压力。迫切需要设计一种多尺度的空间数据模型来保存地图综合结果,当客户访问多尺度数据时,直接从多尺度数据模型中检索相应尺度的数据,并返回给用户。本专利正是在这种背景技术下,解决了大数据量矢量地图数据实时快速传输和显示的技术瓶颈。根据客户端的请求,实时从高精度的原始数据中快速生成适合客户端显示的多分辨率模型,然后渐进传输,直至原始数据被重建为止。
本发明的技术特点是:它从矢量地图数据快速简化的角度出发,提出了一种适合于大数据量矢量地图数据快速多分辨率传输的算法。该算法在以下几个方面取得了很好的效果:(1)提供了一种行之有效的多尺度方法,用于网络环境下矢量地图数据的渐进传输;(2)能够保证数据的完整性:在矢量地图数据简化的过程中,保持了拓扑关系的一致性;(3)具有很好的运行效率,可以在短时间内对原始矢量地图数据进行快速简化;(4)在数据传输的过程中,能够保持任意相邻分辨率空间对象形状的最大相似性,从而取得大数据量地图数据精确的可视化。
三、发明内容
多尺度矢量地图数据表现出与传统地理信息系统(GIS)矢量数据不同的性质,所以要从多尺度矢量地图数据的生成算法、数据模型以及数据网络传输等方面进行实现。本发明的主要内容如下:
(1)提出了多尺度曲线树模型,以及几何图形简化的上下文拓扑关系一致性约束规则,以保证原始数据简化前后一致的拓扑关系,并从多尺度曲线树的生成、纵向索引、轮廓数据生成、增量数据生成以及曲线重建等多个方面进行了发明实现,以此为基础建立了基于特征的多尺度曲线模型。
(2)发明了基于自适应性多尺度表达模型之上的矢量地图数据渐进传输方法,实现了大数据量矢量地图数据的快速传输应用系统。本发明一种大规模矢量地图数据渐进传输和动态重建的方法,其工艺步骤如下:
(一)多尺度矢量地图数据快速生成和重建算法
提出多分辨率曲线树快速构建基于特征的多尺度矢量地图数据模型。多分辨率曲线树是一棵多叉树,它由根结点、层次结点和数据结点三类结点构成,结构如图1所示。其中Level_i表示在第Leveli层分辨率下的矢量地图数据。pSibling指向同一分辨率的下一个曲线段。pChild和lChildCount分别记录了当前结点在下一个分辨率层次的子结点及其个数,用于建立多分辨率曲线树的纵向索引。
(1)当客户机请求位于曲线树第i层分辨率的数据时,指定尺度下的矢量地图数据的快速生成的具体算法如下:
1)曲线树根据客户机请求的分辨率scale来确定曲线树对应的层次nLevel,即为遍历的最大深度,然后对曲线树进行深度优先遍历。
2)访问第一层的第一个数据结点block1,然后转向block1的pChild所指向的下一层次数据结点,来生成位于block1与其兄弟数据结点之间的细节曲线数据(如图1)。
若pChild还有子结点,并且访问的层次尚未达到nLevel层,则转向pChild结点的孩子结点,直到访问到达nLevel层;否则,从pChild开始向右访问lChildCount个数据结点。
3)接下去,访问block1结点的pSibling所指向的与block1位于同一分辨率的下一个数据结点,直到所有符合条件的结点都访问到。
按照曲线树遍历过程中的结点访问顺序,依次将每个结点上的坐标数据追加到曲线点坐标数组curve后面,则curve构成曲线在第i层分辨率下的曲线形态。
(2)增量数据
增量数据表示曲线(面)在分辨率scalei与scalej之间的差值。增量数据即为被化简的直线段所对应的原始曲线(面),增量数据不仅要表达增加的细节数据,还表达增量细节数据在增量数据在化简曲线上的插入位置。增量数据结构定义如下:
struct IncrementData
{
double dScale[2]
GFPoints Points;
GNumbers Offsets;
GNumbers Anchors;
};
dScale是一个由两个元素构成的数组,分别表示增量数据的两个分辨率scalei和scalej,Points记录增量数据点的坐标数据。曲线化简将曲线分解为不同分辨率下的多个曲线段,图1中的Leveli+1和Leveli之间的增量数据就由两个曲线段构成,Offsets记录每个曲线段上坐标点的个数。由于Leveli+1上的两个曲线段之间没有更低分辨率的曲线段,因此这两个曲线段在Leveli+1的增量数据中合并为一个增量曲线段,Anchors数组记录了恢复scalej下的曲线时,每个增量曲线段应该插入到scalei下曲线数组curvei的哪个位置。
增量数据的生成是一个多分辨率曲线树遍历的过程。首先计算scalei和scalej在曲线树中所对应的层次Leveli和Levelj。然后遍历曲线树,只有位于Leveli和Levelj之间的数据结点才记录坐标数据。但是,对于小于Leveli的结点,要累计每个结点上的点个数,此点数即为增量曲线段在scalei下的曲线curvei上的插入位置。
(3)矢量地图数据重建
矢量地图数据重建是其多分辨率分解的逆过程,通过逐步将增量数据与化简数据集成,就可以恢复高分辨矢量地图数据的原始形态。
获得增量数据后,利用增量数据和已有数据来恢复高分辨率下的地图数据。曲线的某些部分被化简为直线,因此只要将这部分被删除的点重新插入到化简后原来位置就可以恢复矢量地图数据。增量数据结构中每条增量曲线对应scalei下的曲线curvei上的一条简化直线段,Anchors数组记录了每条化简直线段在curvei上的位置,因此只要将增量曲线段插入到curvei曲线中去就可以恢复saclej下的矢量地图数据形态,如图2所示。
(4)顶点调整
当矢量地图数据上顶点Pi的权重发生变化时,需要把Pi在曲线树中的位置调整到相应scale层级。顶点调整仅仅是调整Pi在曲线中纵向的层级位置,并不能改变Pi与其前后两相邻顶点Pi-1和Pi+1的逻辑顺序关系Pi-1-Pi-Pi+1,从而使矢量地图数据重建恢复过程中仍然保持原有的几何形态不变。顶点调整算法如下:
1)计算Pi的新权重ωi。如果ωi在曲线树中的层级没有变化,则无须调整Pi在曲线中的位置。否则进入第2)步,重新计算Pi在曲线中的位置。
2)如果Pi与Pi-1或Pi+1位于同一DataBlock,则调用接单分裂算法将该DataBlock按照图3的方式进行分裂,使Pi成为一个独立的DataBlock。
3)若Pi的权重减小,则从Pi-1所在的DataBlock开始,沿着其子结点的路径开始向下寻找适合Pi的层级,并将Pi所在的DataBlock插入到该分支的第一个位置。否则,则将Pi所在的DataBlock创建为该层级新的DataBlock(图4)。
4)若Pi权重增大,则沿着Pi-1所在的DataBlock的父结点路径向上回溯,直到找到相应的层级,并将Pi所在的DataBlock作为该DataBlock的后继结点(图5)。对于图5A,由于Pi-1结点的父结点的层级无法与Pi的层级所匹配,所以相应层次处创建一个不含任何曲线顶点的虚DataBlock结点(图5B网格结点)。并将其作为父结点的子结点,同时将Pi所在的DataBlock作为该结点的直接后继。
若Pi所在的DataBlock拥有兄弟结点,则将其修改为子结点(图6)。
5)调整完毕。
(5)顶点插入
设在曲线i位置上插入顶点P,记为Pi,则Pi的前后相邻顶点为Pi-1和Pi+1。显然,Pi的插入也会影响到Pi-1和Pi+1的权重,所以顶点插入算法还需要调整Pi-1和Pi+1在曲线树中的位置。顶点插入算法如下:
1)重新计算Pi-1(Pi+1)的权重ωi-1(ωi+1)。如果权重的层级没有发生变化,则无须调整Pi-1(Pi+1)在曲线树中的位置;否则,调用顶点调整算法来调整Pi-1(Pi+1)在曲线树中的位置。调整完Pi-1(Pi+1)的位置后,开始顶点Pi的插入算法。
2)若Pi的权重ωi与Pi-1或Pi+1的权重位于同一层级,则直接将Pi插入到Pi-1的前面或Pi+1的后面,插入算法完毕。否则,则进行第3)步。
3)判断Pi-1和Pi+1是否位于同一DataBlock。若是,将该DataBlock从Pi-1和Pi+1之间分裂(图7)。
4)为Pi创建独立的DataBlock,并添加为Pi-1所在DataBlock的后继兄弟结点。
5)调用调整算法,调整Pi在曲线树中的位置(图8)。
6)插入插入完毕。
(6)顶点删除
删除顶点Pi,Pi的前后相邻顶点为Pi-1或Pi+1。顶点删除算法描述如下:
1)若Pi与Pi-1或Pi+1位于同一DataBlock,则调用结点分裂算法分裂该DataBlock,将Pi独立出来形成独立的DataBlock(图3)。
2)从曲线树中删除Pi所在的DataBlock(dbPi)。
3)若dbPi没有兄弟结点,直接将dbPi删除;否则,将dbPi的兄弟结点作为dbPi的先序结点的兄弟结点(图9)。
4)若dbPi有子结点,则在dbPi的前序DataBlock的子结点中寻找相应的层级,并将dbPi的子结点追加到该层级DataBlock链的末尾(图9)。如果没有相应的层级,则创建新的层级。
(7)结点分裂算法
设当前DataBlock要在Pi和Pj处分裂。结点分裂算法如下:
1)如果当前DataBlock没有子结点,在Pi和Pj处直接将当前DataBlock分裂为两个新的DataBlock(图10A),否则执行第2)步。
2)分裂结点
若Pk、P1分别位于不同的DataBlock中,则Pk和P1是相邻的顶点。首先利用结点分裂算法将Pk-P1的DataBlock在Pk、P1处将该DataBlock进行分裂。然后再利用第上一步的算法,将后面的DataBlock作为Pj所在DataBlock的子结点。这一步结点分裂是一个递归的过程。
(二)系统结构实现
基于以上方法,在Windows平台上设计和开发了一个矢量数据渐进传输的系统。系统的体系结构如图11所示。
系统采用浏览器/服务器模式的三层体系结构。分别是客户端,应用服务器和数据库服务器。客户端是组件对象模型,客户端和应用服务器通过套接字进行通信。数据库服务器又可细分为两部分:一部分用于从单一高分辨率的数据中生成多分辨率数据结构,并将其写入多尺度数据库;另一部分主要用于同应用服务器交互负责从数据库中检索多尺度矢量数据。
(1)客户端
客户端作为和用户交互的接口,主要完成两项工作:一项是地图综合和响应用户事件的功能;另一项是同应用服务器进行交互,获取空间数据和增量数据以及进行数据重建的功能。
(2)应用服务器
当客户端向服务器请求数据时,应用服务器通过多尺度空间数据引擎检索相应的数据,并对获取的数据进行反序列化,重建多尺度空间数据的对象模型。多尺度空间数据的对象重建后,应用服务器从多尺度空间数据的对象中检索并生成客户端所请求的相应轮廓数据和增量数据,并将其发送回客户端进行集成重建。
为了减少与数据库的交互,应用服务器缓存最近访问过的数据。当客户端向应用服务器请求数据时,应用服务器首先在缓存中进行检索。如果缓存中没有客户端请求数据,应用服务器再向数据库请求。从数据库获得数据后,应用服务器将数据返回给客户端的同时,以空间对象的形式向缓存中写入数据的副本。为了使缓存不至于无限膨胀,以及维持缓存检索的效率,应用服务器采用合理的缓存调度策略来及时清理缓存中不常用的数据来维护一个精炼高效的缓存。
(3)数据库服务器
数据库服务器主要负责两方面的工作。一方面数据库服务器利用多尺度数据的存储方法和索引方法来管理多尺度数据,为渐进传输系统提供数据支持。另一方面,数据库服务器利用前面的多尺度数据生成算法从高精度的大比例尺矢量数据中提取多比例尺数据,并将其写入多尺度数据库中。
关于验证问题:
本发明对大规模矢量地图数据进行了渐进传输实验。实验环境为:客户端:Pentium III 1千兆,内存512兆。服务器端环境:Pentium IV 2.4千兆,内存512兆。网络速度256字节/秒。数据:1∶10万等高线数据,原始数据量为29.801兆。
表1比较了将原始数据分为三个层次传输与原始数据直接传输所消耗的时间。从中可以看出,本专利的方法能显著加快矢量地图数据的传输和显示速度,相邻层次数据在客户端能够实时显示。图12说明了该矢量数据渐进传输的过程。
表1渐进传输和传统传输时间对比
数据量(Kb) | 简化时间(s) | 传输时间(s) | 显示时间(s) | 压缩率(%) | |
分辨率-1 | 5022 | 9.21 | 15.12 | 89.6 | 0.1 |
分辨率-2 | 6743 | 8.84 | 18.35 | 72.1 | 0.3 |
分辨率-3 | 8875 | 6.27 | 21.21 | 60.5 | 0.5 |
分辨率-4 | 14029 | 4.50 | 27.30 | 48.7 | 0.9 |
原始数据 | 29801 | 无 | 429.41 | 无 | 4.2 |
本发明一种大规模矢量地图数据渐进传输和动态重建的方法,其主要优点及功效是:它提出了一种适合于大数据量矢量地图渐进传输的多尺度数据模型。该技术能自动快速进行原始数据的多尺度表达,实现矢量地图数据连续动态的网络传输和无损重建;支持数据模型的动态编辑。设计的系统在TCP/IP协议的基础上,有效的支持渐进传输过程中客户端和服务器端的传输开始、中止、续传等指令交互,实现了大数据量矢量地图数据实时渐进式传输功能。
四、附图说明
图1多分辨率层次模型结构
图2矢量数据重建
图3数据结点(DataBlock)分裂
图4Pi顶点向下调整
图5(A)、(B)Pi顶点向上调整
图6Pi的兄弟DataBlock位置调整
图7DataBlock结点分裂
图8插入顶点Pi
图9删除Pi点
图10(A)子结点不分裂
图10(B)子结点分裂
图11矢量数据渐进传输系统体系结构
图12(a)、(b)、(c)、(d)矢量数据渐进传输
五、具体实施方式
本发明一种大规模矢量地图数据渐进传输和动态重建的方法,其工艺步骤如下:
(一)多尺度矢量地图数据快速生成和重建算法
提出多分辨率曲线树快速构建基于特征的多尺度矢量地图数据模型。多分辨率曲线树是一棵多叉树,它由根结点、层次结点和数据结点三类结点构成。结构如图1所示。其中Level_i表示在第Leveli层分辨率下的矢量地图数据。pSibling指向同一分辨率下的下一个曲线段。pChild和lChildCount分别记录了当前结点在下一个分辨率层次下的子结点及其个数,用于建立多分辨率曲线树的纵向索引。
(1)当客户机请求位于曲线树第i层分辨率的数据时,指定尺度下的矢量地图数据的快速生成的具体算法如下:
1)曲线树根据客户机请求的分辨率scale来确定曲线树对应的层次nLevel,即为遍历的最大深度,然后对曲线树进行深度优先遍历。
2)首先访问第一层的第一个数据结点block1,然后转向block1的pChild所指向的下一层次数据结点,来生成位于block1与其兄弟数据结点之间的细节曲线数据(如图1)。
若pChild还有子结点,并且访问的层次尚未达到nLevel层,则转向pChild结点的孩子结点,直到访问到达nLevel层;否则,从pChild开始向右访问lChildCount个数据结点。
3)接下去,访问block1结点的pSibling所指向的与block1位于同一分辨率的下一个数据结点,直到所有符合条件的结点都访问到。
按照曲线树遍历过程中的结点访问顺序,依次将每个结点上的坐标数据追加到曲线点坐标数组curve后面,则curve构成曲线在第i层分辨率下的曲线形态。
(2)增量数据
增量数据表示曲线(面)在分辨率scalei与scalej之间的差值。增量数据即为被化简的直线段所对应的原始曲线(面),增量数据不仅要表达增加的细节数据,还表达增量细节数据在增量数据在化简曲线上的插入位置。增量数据结构定义如下:
struct IncrementData
{
double dScale[2]
GFPoints Points;
GNumbers Offsets;
GNumbers Anchors;
};
dScale是一个由两个元素构成的数组,分别表示增量数据的两个分辨率scalei和scalej。Points记录增量数据点的坐标数据。曲线化简将曲线分解为不同分辨率下的多个曲线段,图1中的Leveli+1和Leveli之间的增量数据就由两个曲线段构成,Offsets记录每个曲线段上坐标点的个数。图1中,由于Leveli+1上的两个曲线段之间没有更低分辨率的曲线段,因此这两个曲线段在Leveli+1的增量数据中合并为一个增量曲线段。Anchors数组记录了恢复scalej下的曲线时,每个增量曲线段应该插入到scalei下曲线数组curvei的哪个位置。
增量数据的生成是一个多分辨率曲线树遍历的过程。首先计算scalei和scalej在曲线树中所对应的层次Leveli和Levelj。然后遍历曲线树,只有位于Leveli和Levelj之间的数据结点才记录坐标数据。但是,对于小于Leveli的结点,要累计每个结点上的点个数,此点数即为增量曲线段在scalei下的曲线curvei上的插入位置。
(3)矢量地图数据重建
矢量地图数据重建是其多分辨率分解的逆过程,通过逐步将增量数据与化简数据集成,就可以恢复高分辨矢量地图数据的原始形态。
获得增量数据后,利用增量数据和已有数据来恢复高分辨率下的地图数据。曲线的某些部分被化简为直线,因此只要将这部分被删除的点重新插入到化简后原来位置就可以恢复矢量地图数据。增量数据结构中的每条增量曲线对应scalei下的曲线curvei上的一条简化直线段,Anchors数组记录了每条化简直线段在curvei上的位置,因此只要将增量曲线段插入到curvei曲线中去就可以恢复saclej下的矢量地图数据形态。如图2所示。
(4)顶点调整
当矢量地图数据上顶点Pi的权重发生变化时,需要把Pi在曲线树中的位置调整到相应scale层级。顶点调整仅仅是调整Pi在曲线中纵向的层级位置,并不能改变Pi与其前后两相邻顶点Pi-1和Pi+1的逻辑顺序关系Pi-1-Pi-Pi+1,从而使矢量地图数据重建恢复过程中仍然保持原有的几何形态不变。顶点调整算法如下:
1)计算Pi的新权重ωi。如果ωi在曲线树中的层级没有变化,则无须调整Pi在曲线中的位置。否则进入第2)步,重新计算Pi在曲线中的位置。
2)如果Pi与Pi-1或Pi+1位于同一DataBlock,则调用接单分裂算法将该DataBlock按照图3的方式进行分裂,使Pi成为一个独立的DataBlock。
3)若Pi的权重减小,则从Pi-1所在的DataBlock开始,沿着其子结点的路径开始向下寻找适合Pi的层级,并将Pi所在的DataBlock插入到该分支的第一个位置。否则,则将Pi所在的DataBlock创建为该层级新的DataBlock(图4)。
4)若Pi的权重增大,则沿着Pi-1所在的DataBlock的父结点路径向上回溯,直到找到相应的层级,并将Pi所在的DataBlock作为该DataBlock的后继结点(图5)。对于图5A,由于Pi-1结点的父结点的层级无法与Pi的层级所匹配,所以相应层次处创建一个不含任何曲线顶点的虚DataBlock结点(图5B网格结点)。并将其作为父结点的子结点,同时将Pi所在的DataBlock作为该结点的直接后继。
若Pi所在的DataBlock拥有兄弟结点,则将其修改为子结点(图6)。
5)调整完毕。
(5)顶点插入
设在曲线的i位置上插入顶点P,记为Pi,则Pi的前后相邻顶点为Pi-1和Pi+1。显然,Pi的插入也会影响到Pi-1和Pi+1的权重,所以顶点插入算法还需要调整Pi-1和Pi+1在曲线书中的位置。顶点插入算法如下:
1)重新计算Pi-1(Pi+1)的权重ωi-1(ωi+1)。如果权重的层级没有发生变化,则无须调整Pi-1(Pi+1)在曲线树中的位置;否则,则调用顶点调整算法来调整Pi-1(Pi+1)在曲线树中的位置。
调整完Pi-1(Pi+1)的位置,则开始顶点Pi的插入算法。
2)若Pi的权重ωi与Pi-1或Pi+1的权重位于同一层级,则直接将Pi插入到Pi-1的前面或Pi+1的后面,插入算法完毕。否则,则进行第3)步。
3)判断Pi-1和Pi+1是否位于同一DataBlock。若是,则将该DataBlock从Pi-1和Pi+1之间分裂(图7)。
4)为Pi创建独立的DataBlock,并添加为Pi-1所在DataBlock的后继兄弟结点。
5)调用调整算法,调整Pi在曲线树中的位置(图8)。
6)插入插入完毕。
(6)顶点删除
删除顶点Pi,Pi的前后相邻顶点为Pi-1或Pi+1。顶点删除算法描述如下:
1)若Pi与Pi-1或Pi+1位于同一DataBlock,则调用结点分裂算法分裂该DataBlock,将Pi独立出来形成独立的DataBlock(图3)。
2)从曲线树中删除Pi所在的DataBlock(dbPi)。
3)若dbPi没有兄弟结点,则直接将dbPi删除;否则,将dbPi的兄弟结点作为dbPi的先序结点的兄弟结点(图9)。
4)若dbPi有子结点,则在dbPi的前序DataBlock的子结点中寻找相应的层级,并将dbPi的子结点追加到该层级DataBlock链的末尾(图9)。如果没有相应的层级,则创建新的层级。
(7)结点分裂算法
设当前DataBlock要在Pi和Pj处分裂。结点分裂算法如下:
1)如果当前DataBlock没有子结点,则在Pi和Pj处直接将当前DataBlock分裂为两个新的DataBlock(图10A)。否则执行第2步。
2)分裂结点
若Pk、P1分别位于不同的DataBlock中,则Pk和P1是相邻的顶点。首先利用结点分裂算法将Pk-P1的DataBlock在Pk、P1处将该DataBlock进行分裂。然后再利用第上一步的算法,将后面的DataBlock作为Pj所在DataBlock的子结点。这一步结点分裂是一个递归的过程。
(二)系统结构实现
基于以上方法,在Windows平台上设计和开发了一个矢量数据渐进传输的系统。
系统采用浏览器/服务器模式的三层体系结构。分别是客户端,应用服务器和数据库服务器。客户端是组件对象模型,客户端和应用服务器通过套接字进行通信。数据库服务器又可细分为两部分:一部分用于从单一高分辨率的数据中生成多分辨率数据结构,并将其写入多尺度数据库;另一部分则主要用于同应用服务器交互负责从数据库中检索多尺度矢量数据。
(1)客户端
客户端作为和用户交互的接口,主要完成两项工作:一项是地图表现和响应用户事件的功能;另一项则是同应用服务器进行交互,获取空间数据和增量数据以及进行数据重建的功能。
(2)应用服务器
当客户端向服务器请求数据时,应用服务器通过多尺度空间数据引擎检索相应的数据,并对获取的数据进行反序列化,重建多尺度空间数据的对象模型。多尺度空间数据的对象重建后,应用服务器从多尺度空间数据的对象中检索并生成客户端所请求的相应的轮廓数据和增量数据,并将其发送回客户端进行集成重建。
为了减少与数据库的交互,应用服务器缓存最近访问过的数据。当客户端向应用服务器请求数据时,应用服务器首先在缓存中进行检索。如果缓存中没有客户端请求数据,应用服务器再向数据库请求。从数据库获得数据后,应用服务器将数据返回给客户端的同时,应用服务器以空间对象的形式向缓存中写入一份数据的副本。为了使缓存不至于无限膨胀,以及维持缓存检索的效率,应用服务器采用合理的缓存调度策略来及时清理缓存中不常用的数据来维护一个精炼高效的缓存。
(3)数据库服务器
数据库服务器主要负责两方面的工作。一方面数据库服务器利用多尺度数据的存储方法和索引方法来管理多尺度数据,为渐进传输系统提供数据支持。另一方面,数据库服务器利用前面的多尺度数据生成算法从高精度的大比例尺矢量数据中提取多比例尺数据,并将其写入多尺度数据库中。
关于验证问题:
本发明对大规模矢量地图数据进行了渐进传输实验。实验环境为:客户端:Pentium III 1千兆,内存512兆。服务器端环境:Pentium IV 2.4千兆,内存512兆。网络速度256字节/秒。数据:1∶10万等高线数据,原始数据量为29.801兆。
下列表1比较了将原始数据分为三个层次传输与原始数据直接传输所消耗的时间。从中可以看出,本专利的方法能显著加快矢量地图数据的传输和显示速度,相邻层次数据在客户端能够实时显示。图12说明了该矢量数据渐进传输的过程。
表1渐进传输和传统传输时间对比
数据量(Kb) | 简化时间(s) | 传输时间(s) | 显示时间(s) | 压缩率(%) | |
分辨率-1 | 5022 | 9.21 | 15.12 | 89.6 | 0.1 |
分辨率-2 | 6743 | 8.84 | 18.35 | 72.1 | 0.3 |
分辨率-3 | 8875 | 6.27 | 21.21 | 60.5 | 0.5 |
分辨率-4 | 14029 | 4.50 | 27.30 | 48.7 | 0.9 |
原始数据 | 29801 | 无 | 429.41 | 无 | 4.2 |
Claims (1)
1. 一种大规模矢量地图数据渐进网络传输和重建的方法,其特征在于:其工艺步骤如下:
(一)多尺度矢量地图数据快速生成和重建算法
提出多分辨率曲线树快速构建基于特征的多尺度矢量地图数据模型;多分辨率曲线树是一棵多叉树,它由根结点、层次结点和数据结点三类结点构成;
(1)指定尺度下的矢量地图数据的快速生成
当客户机请求位于曲线树第i层分辨率的数据时,具体算法如下:
1)曲线树根据客户机请求的分辨率scale来确定曲线树对应的层次nLevel,即为遍历的最大深度,然后对曲线树进行深度优先遍历;
2)首先访问第一层的第一个数据结点block1,然后转向block1的pChild所指向的下一层次数据结点,来生成位于block1与其兄弟数据结点之间的细节曲线数据;
若pChild还有子结点,并且访问的层次尚未达到nLevel层,则转向pChild结点的孩子结点,直到访问到达nLevel层;否则,从pChild开始向右访问1ChildCount个数据结点;
3)接下去,访问block1结点的pSibling所指向的与block1位于同一分辨率的下一个数据结点,直到所有符合条件的结点都访问到;
按照曲线树遍历过程中的结点访问顺序,依次将每个结点上的坐标数据追加到曲线点坐标数组curve后面,则curve构成曲线在第i层分辨率下的曲线形态;
(2)增量数据
增量数据表示曲线(面)在分辨率scalei与scalej之间的差值;增量数据即为被化简的直线段所对应的原始曲线(面),增量数据不仅要表达增加的细节数据,还表达增量细节数据在增量数据在化简曲线上的插入位置;增量数据结构定义如下:
struct IncrementData
{
double dScale[2]
GFPoints Points;
GNumbers Offsets;
GNumbers Anchors;
};
dScale是一个由两个元素构成的数组,分别表示增量数据的两个分辨率scalei和scalej;Points记录增量数据点的坐标数据;曲线化简将曲线分解为不同分辨率下的多个曲线段,Offsets记录每个曲线段上坐标点的个数;Anchors数组记录了恢复scalej下的曲线时,每个增量曲线段应该插入到scalei下曲线数组curvei的哪个位置;
增量数据的生成是一个多分辨率曲线树遍历的过程;首先计算scalei和scalej在曲线树中所对应的层次Leveli和Levelj。然后遍历曲线树,只有位于Leveli和Levelj之间的数据结点才记录坐标数据;对于小于Leveli的结点,要累计每个结点上的点个数,此点数即为增量曲线段在scalei下的曲线curvei上的插入位置;
(3)矢量地图数据重建
矢量地图数据重建是其多分辨率分解的逆过程,通过逐步将增量数据与化简数据集成,就可以恢复高分辨矢量地图数据的原始形态;
获得增量数据后,利用增量数据和已有数据来恢复高分辨率下的地图数据;曲线的某些部分被化简为直线,因此只要将这部分被删除的点重新插入到化简后原来位置就可以恢复矢量地图数据;增量数据结构中的每条增量曲线对应scalei下的曲线curvei上的一条简化直线段,Anchors数组记录了每条化简直线段在curvei上的位置,因此只要将增量曲线段插入到curvei曲线中去就可以恢复saclej下的矢量地图数据形态;
(4)顶点调整
当矢量地图数据上顶点Pi的权重发生变化时,需要把Pi在曲线树中的位置调整到相应scale层级;顶点调整仅仅是调整Pi在曲线中纵向的层级位置,并不能改变Pi与其前后两相邻顶点Pi-1和Pi+1的逻辑顺序关系Pi-1-Pi-Pi+1,从而使矢量地图数据重建恢复过程中仍然保持原有的几何形态不变;顶点调整算法如下:
1)计算Pi的新权重ωi:如果ωi在曲线树中的层级没有变化,则无须调整Pi在曲线中的位置,否则进入第2)步,重新计算Pi在曲线中的位置;
2)如果Pi与Pi-1或Pi+1位于同一DataBlock,则调用接单分裂算法将该DataBlock进行分裂,使Pi成为一个独立的DataBlock;
3)若Pi的权重减小,则从Pi-1所在的DataBlock开始,沿着其子结点的路径开始向下寻找适合Pi的层级,并将Pi所在的DataBlock插入到该分支的第一个位置,否则,则将Pi所在的DataBlock创建为该层级新的DataBlock;
4)若Pi的权重增大,则沿着Pi-1所在的DataBlock的父结点路径向上回溯,直到找到相应的层级,并将Pi所在的DataBlock作为该DataBlock的后继结点;
由于Pi-1结点的父结点的层级无法与Pi的层级所匹配,所以相应层次处创建一个不含任何曲线顶点的虚DataBlock结点,并将其作为父结点的子结点,同时将Pi所在的DataBlock作为该结点的直接后继;
若Pi所在的DataBlock拥有兄弟结点,则将其修改为子结点;
5)调整完毕;
(5)顶点插入
设在曲线的i位置上插入顶点P,记为Pi,则Pi的前后相邻顶点为Pi-1和Pi+1;显然,Pi的插入也会影响到Pi-1和Pi+1的权重,所以顶点插入算法还需要调整Pi-1和Pi+1在曲线书中的位置;顶点插入算法如下:
1)重新计算Pi-1(Pi+1)的权重ωi-1(ωi+1),如果权重的层级没有发生变化,则无须调整Pi-1(Pi+1)在曲线树中的位置;否则,则调用顶点调整算法来调整Pi-1(Pi+1)在曲线树中的位置;
调整完Pi-1(Pi+1)的位置,则开始顶点Pi的插入算法;
2)若Pi的权重ωi与Pi-1或Pi+1的权重位于同一层级,则直接将Pi插入到Pi-1的前面或Pi+1的后面,插入算法完毕,否则,则进行第3)步;
3)判断Pi-1和Pi+1是否位于同一DataBlock,若是,则将该DataBlock从Pi-1和Pi+1之间分裂;
4)为Pi创建独立的DataBlock,并添加为Pi-1所在DataBlock的后继兄弟结点;
5)调用调整算法,调整Pi在曲线树中的位置;
6)插入算法完毕。
(6)顶点删除
删除顶点Pi,Pi的前后相邻顶点为Pi-1或Pi+1;顶点删除算法描述如下:
1)若Pi与Pi-1或Pi+1位于同一DataBlock,则调用结点分裂算法分裂该DataBlock,将Pi独立出来形成独立的DataBlock;
2)从曲线树中删除Pi所在的DataBlock(dbPi);
3)若dbPi没有兄弟结点,则直接将dbPi删除;否则,将dbPi的兄弟结点作为dbPi的先序结点的兄弟结点;
4)若dbPi有子结点,则在dbPi的前序DataBlock的子结点中寻找相应的层级,并将dbPi的子结点追加到该层级DataBlock链的末尾;如果没有相应的层级,则创建新的层级;
(7)结点分裂算法
设当前DataBlock要在Pi和Pj处分裂;结点分裂算法如下:
1)如果当前DataBlock没有子结点,则在Pi和Pj处直接将当前DataBlock分裂为两个新的DataBlock,否则执行第2步。
2)分裂结点
若Pk、Pl分别位于不同的DataBlock中,则Pk和Pl是相邻的顶点;首先利用结点分裂算法将Pk-Pl的DataBlock在Pk、Pl处将该DataBlock进行分裂,然后再利用第上一步的算法,将后面的DataBlock作为Pj所在DataBlock的子结点;这一步结点分裂是一个递归的过程;
(二)系统结构实现
基于以上方法,在Windows平台上设计一个矢量数据渐进传输的系统,该系统采用浏览器/服务器模式的三层体系结构,分别是客户端,应用服务器和数据库服务器;客户端是组件对象模型,客户端和应用服务器通过套接字进行通信;数据库服务器又细分为两部分:一部分用于从单一高分辨率的数据中生成多分辨率数据结构,并将其写入多尺度数据库;另一部分则主要用于同应用服务器交互负责从数据库中检索多尺度矢量数据;
(1)客户端
客户端作为和用户交互的接口,主要完成两项工作:一项是地图表现和响应用户事件的功能;另一项则是同应用服务器进行交互,获取空间数据和增量数据以及进行数据重建的功能;
(2)应用服务器
当客户端向服务器请求数据时,应用服务器通过多尺度空间数据引擎检索相应的数据,并对获取的数据进行反序列化,重建多尺度空间数据的对象模型;多尺度空间数据的对象重建后,应用服务器从多尺度空间数据的对象中检索并生成客户端所请求的相应的轮廓数据和增量数据,并将其发送回客户端进行集成重建。
为了减少与数据库的交互,应用服务器缓存最近访问过的数据;当客户端向应用服务器请求数据时,应用服务器首先在缓存中进行检索;如果缓存中没有客户端请求数据,应用服务器再向数据库请求;从数据库获得数据后,应用服务器将数据返回给客户端的同时,应用服务器以空间对象的形式向缓存中写入一份数据的副本;为了使缓存不至于无限膨胀,以及维持缓存检索的效率,应用服务器采用合理的缓存调度策略来及时清理缓存中不常用的数据来维护一个精炼高效的缓存;
(3)数据库服务器
数据库服务器主要负责两方面的工作;一方面数据库服务器利用多尺度数据的存储方法和索引方法来管理多尺度数据,为渐进传输系统提供数据支持;另一方面,数据库服务器利用前面的多尺度数据生成算法从高精度的大比例尺矢量数据中提取多比例尺数据,并将其写入多尺度数据库中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007101784393A CN101246597A (zh) | 2007-11-30 | 2007-11-30 | 大规模矢量地图数据渐进传输和动态重建的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007101784393A CN101246597A (zh) | 2007-11-30 | 2007-11-30 | 大规模矢量地图数据渐进传输和动态重建的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101246597A true CN101246597A (zh) | 2008-08-20 |
Family
ID=39947035
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2007101784393A Pending CN101246597A (zh) | 2007-11-30 | 2007-11-30 | 大规模矢量地图数据渐进传输和动态重建的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101246597A (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101477561B (zh) * | 2009-01-09 | 2010-12-29 | 中国人民解放军国防科学技术大学 | 基于内容访问网络的大规模空间矢量数据管理方法 |
CN102096945A (zh) * | 2010-01-07 | 2011-06-15 | 董福田 | 空间数据渐进传输方法及装置 |
CN102110137A (zh) * | 2011-01-04 | 2011-06-29 | 北京大学 | 一种多尺度矢量地图一致性检测方法和装置 |
CN101853514B (zh) * | 2009-04-02 | 2011-10-05 | 肖克炎 | 彩色地质图图像的交互式矢量化方法及其系统 |
CN102253947A (zh) * | 2010-05-21 | 2011-11-23 | 南京师范大学 | 可渐进传输的矢量数据聚集化存储与访问的方法 |
CN102413104A (zh) * | 2010-09-25 | 2012-04-11 | 中国科学院遥感应用研究所 | 空间数据网络渐进传输方法及系统 |
WO2012139506A1 (zh) * | 2011-04-14 | 2012-10-18 | Dong futian | 空间数据处理、化简与渐进传输的方法与装置 |
CN103678587A (zh) * | 2013-12-12 | 2014-03-26 | 中国神华能源股份有限公司 | 空间数据渐进传输方法及装置 |
CN103946836A (zh) * | 2011-09-26 | 2014-07-23 | 谷歌公司 | 使用非光栅地图数据的修改来渲染地图图像 |
CN104239329A (zh) * | 2013-06-18 | 2014-12-24 | 上海博泰悦臻电子设备制造有限公司 | 地图道路形状点数据的保存和加载方法及装置 |
CN104616354A (zh) * | 2015-01-23 | 2015-05-13 | 克拉玛依红有软件有限责任公司 | 一种三维gis快速加载空间数据的方法 |
CN105070185A (zh) * | 2015-08-26 | 2015-11-18 | 中科宇图天下科技有限公司 | 一种点要素群自动综合方法 |
CN105393282A (zh) * | 2013-05-15 | 2016-03-09 | 谷歌公司 | 图形元素的有效合成和渲染 |
CN105894548A (zh) * | 2012-04-18 | 2016-08-24 | 苏州超擎图形软件科技发展有限公司 | 空间数据渐进传输的有关方法与装置 |
CN106372261A (zh) * | 2011-11-08 | 2017-02-01 | 苏州超擎图形软件科技发展有限公司 | 一种矢量数据的处理方法及装置 |
CN106844443A (zh) * | 2016-12-16 | 2017-06-13 | 广东科诺勘测工程有限公司 | 一种矢量地图的快速纠偏方法及系统 |
CN110109917A (zh) * | 2018-02-01 | 2019-08-09 | 董福田 | 一种数据的处理方法及装置 |
-
2007
- 2007-11-30 CN CNA2007101784393A patent/CN101246597A/zh active Pending
Cited By (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101477561B (zh) * | 2009-01-09 | 2010-12-29 | 中国人民解放军国防科学技术大学 | 基于内容访问网络的大规模空间矢量数据管理方法 |
CN101853514B (zh) * | 2009-04-02 | 2011-10-05 | 肖克炎 | 彩色地质图图像的交互式矢量化方法及其系统 |
CN102096945A (zh) * | 2010-01-07 | 2011-06-15 | 董福田 | 空间数据渐进传输方法及装置 |
CN102096945B (zh) * | 2010-01-07 | 2016-06-15 | 苏州超擎图形软件科技发展有限公司 | 空间数据渐进传输方法及装置 |
WO2011082647A1 (zh) * | 2010-01-07 | 2011-07-14 | Dong futian | 空间数据渐进传输方法及装置 |
CN102253947B (zh) * | 2010-05-21 | 2013-05-08 | 南京师范大学 | 可渐进传输的矢量数据聚集化存储与访问的方法 |
CN102253947A (zh) * | 2010-05-21 | 2011-11-23 | 南京师范大学 | 可渐进传输的矢量数据聚集化存储与访问的方法 |
CN102413104B (zh) * | 2010-09-25 | 2015-04-01 | 中国科学院遥感应用研究所 | 空间数据网络渐进传输方法及系统 |
CN102413104A (zh) * | 2010-09-25 | 2012-04-11 | 中国科学院遥感应用研究所 | 空间数据网络渐进传输方法及系统 |
CN102110137A (zh) * | 2011-01-04 | 2011-06-29 | 北京大学 | 一种多尺度矢量地图一致性检测方法和装置 |
CN102110137B (zh) * | 2011-01-04 | 2013-01-23 | 北京大学 | 一种多尺度矢量地图一致性检测方法和装置 |
WO2012139506A1 (zh) * | 2011-04-14 | 2012-10-18 | Dong futian | 空间数据处理、化简与渐进传输的方法与装置 |
CN103425783B (zh) * | 2011-04-14 | 2017-06-23 | 苏州超擎图形软件科技发展有限公司 | 空间数据渐进传输方法与装置 |
CN103425783A (zh) * | 2011-04-14 | 2013-12-04 | 董福田 | 空间数据渐进传输方法与装置 |
CN110081891A (zh) * | 2011-09-26 | 2019-08-02 | 谷歌有限责任公司 | 使用非光栅地图数据的修改来渲染地图图像的方法和设备 |
CN103946836A (zh) * | 2011-09-26 | 2014-07-23 | 谷歌公司 | 使用非光栅地图数据的修改来渲染地图图像 |
US9830064B2 (en) | 2011-09-26 | 2017-11-28 | Google Inc. | Rendering map images using modifications of non-raster map data |
CN110081891B (zh) * | 2011-09-26 | 2023-02-17 | 谷歌有限责任公司 | 使用非光栅地图数据的修改来渲染地图图像的方法和设备 |
CN103946836B (zh) * | 2011-09-26 | 2019-01-18 | 谷歌有限责任公司 | 使用非光栅地图数据的修改来渲染地图图像的方法和设备 |
CN106372261A (zh) * | 2011-11-08 | 2017-02-01 | 苏州超擎图形软件科技发展有限公司 | 一种矢量数据的处理方法及装置 |
CN106485654A (zh) * | 2011-11-08 | 2017-03-08 | 苏州超擎图形软件科技发展有限公司 | 一种矢量数据的处理方法及装置 |
CN105894548B (zh) * | 2012-04-18 | 2019-09-24 | 苏州超擎图形软件科技发展有限公司 | 空间数据渐进传输的有关方法与装置 |
CN105894548A (zh) * | 2012-04-18 | 2016-08-24 | 苏州超擎图形软件科技发展有限公司 | 空间数据渐进传输的有关方法与装置 |
CN105393282A (zh) * | 2013-05-15 | 2016-03-09 | 谷歌公司 | 图形元素的有效合成和渲染 |
CN105393282B (zh) * | 2013-05-15 | 2019-02-26 | 谷歌有限责任公司 | 图形元素的有效合成和渲染 |
CN104239329A (zh) * | 2013-06-18 | 2014-12-24 | 上海博泰悦臻电子设备制造有限公司 | 地图道路形状点数据的保存和加载方法及装置 |
CN104239329B (zh) * | 2013-06-18 | 2018-01-30 | 上海博泰悦臻电子设备制造有限公司 | 地图道路形状点数据的保存和加载方法及装置 |
CN103678587B (zh) * | 2013-12-12 | 2017-10-13 | 中国神华能源股份有限公司 | 空间数据渐进传输方法及装置 |
CN103678587A (zh) * | 2013-12-12 | 2014-03-26 | 中国神华能源股份有限公司 | 空间数据渐进传输方法及装置 |
CN104616354B (zh) * | 2015-01-23 | 2018-08-03 | 克拉玛依红有软件有限责任公司 | 一种三维gis快速加载空间数据的方法 |
CN104616354A (zh) * | 2015-01-23 | 2015-05-13 | 克拉玛依红有软件有限责任公司 | 一种三维gis快速加载空间数据的方法 |
CN105070185B (zh) * | 2015-08-26 | 2017-09-05 | 中科宇图天下科技有限公司 | 一种点要素群自动综合方法 |
CN105070185A (zh) * | 2015-08-26 | 2015-11-18 | 中科宇图天下科技有限公司 | 一种点要素群自动综合方法 |
CN106844443B (zh) * | 2016-12-16 | 2018-06-12 | 广东科诺勘测工程有限公司 | 一种矢量地图的快速纠偏方法及系统 |
CN106844443A (zh) * | 2016-12-16 | 2017-06-13 | 广东科诺勘测工程有限公司 | 一种矢量地图的快速纠偏方法及系统 |
CN110109917A (zh) * | 2018-02-01 | 2019-08-09 | 董福田 | 一种数据的处理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101246597A (zh) | 大规模矢量地图数据渐进传输和动态重建的方法 | |
CN101630419B (zh) | 一种用于城市综合管网三维可视化系统的架构方法 | |
CN103871102B (zh) | 一种基于高程点和道路轮廓面的道路三维精细建模方法 | |
CN106898047A (zh) | 倾斜模型和多元模型动态融合的自适应网络可视化方法 | |
CN106095907A (zh) | 基于八叉树与三维r星树集成的激光点云数据管理方法 | |
CN103106284B (zh) | 用于三维数据球信息关联的剖分中间件和信息关联方法 | |
CN101364310A (zh) | 一种三维模型图形的生成方法和装置 | |
CN105956165B (zh) | 一种三维模型数据的瓦片式大文件存储组织方法 | |
CN102306180A (zh) | 一种基于海量激光雷达栅格点云数据的建模方法 | |
CN102074050A (zh) | 大规模地形绘制的分形多分辨率简化方法 | |
CN107886564A (zh) | 用于实现三维场景显示的方法 | |
CN102609982B (zh) | 空间地质数据非结构化模式的拓扑发现方法 | |
CN1936962A (zh) | 一种基于pc平台的三维游戏中大型地形生成方法 | |
CN102057368A (zh) | 利用最大连续场在三维体积模型中分布性质 | |
CN106156205A (zh) | 一种超大规模数据的三维可视化方法 | |
CN104978763A (zh) | 一种基于三维Douglas-Peucker算法的河网要素与DEM的同步综合地图仿真方法 | |
CN108765538A (zh) | 基于cad平台的osgb数据分级渲染的方法 | |
CN102567465B (zh) | 复眼视觉基础上的三维模型几何相似性搜索方法 | |
CN1932884A (zh) | 一种基于分形层次树的过程式地形快速绘制方法 | |
CN100481085C (zh) | 一种基于对象存储的地形数据存储方法 | |
CN106649776A (zh) | 一种半自动化综合矢量多边形的方法 | |
CN111913951A (zh) | 一种叠加电网数据的地图矢量数据切片方法 | |
Remacle et al. | Fast and robust mesh generation on the sphere—Application to coastal domains | |
Janus et al. | MKScal-system for land consolidation project based on CAD platform | |
CN117391878A (zh) | 一种虚实融合的煤矿储量动态管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20080820 |