一种时空变化过程动态可视化方法

文档序号:10553645阅读:364来源:国知局
一种时空变化过程动态可视化方法
【专利摘要】本发明公开了一种时空变化过程动态可视化方法,处于时空中的对象都有很强的时空依赖性和动态性,对时空变化过程进行可视化有助于人们更好地了解时空变化的机理。通过以x、y、t为坐标轴,构建时空点、线、面对象的时空立方体模型,在x、y、t构成的三维空间中,使用时间平面求取相交的时空立方体和时空立方体切面,通过颜色控制、显隐控制和时间平面的逐级递增递减,直观而有效地展现时空对象变化的整个过程,整个过程引入可视性计算和GPU顶点缓存,以提升时空对象的浏览体验和渲染效率。本方法直观而动态地描述时空变化的过程,帮助人们更好地理解时空变化的机理,并保证较好的可视化效率和体验,对于时空现象的研究和应用有着重要的意义。
【专利说明】
一种时空变化过程动态可视化方法
技术领域
[0001 ] 本发明涉及GIS(Geographic Information System,地理信息系统)的时空数据可 视化领域,具体涉及一种时空变化过程的动态可视化方法。
【背景技术】
[0002] 地理时空对象总是处于连续变化之中,具有很强的时空依赖性和动态性特征。近 年来,由于人们对时空资源的需求日益增长,时空变化愈加频繁和复杂。时空数据作为时空 变化现象的数字化体现,其特征可以概括为两点:1)具有时空的动态性,2)数据日积月累。 这些特征给时空变化的可视化带来一定的挑战,时空动态性表现力弱,绘制效率不高,用户 体验差,都会给时空变化过程的可视化带来一定困扰。
[0003] 时空立方体(space-time cube)模型,用几何立体图形描述二维空间沿着时间维 的演变过程,在该模型中,空间实体演变历史对应其中一个时空体。可以根据需要在任何时 间点上截取一个界面来确定空间实体在改时间点上的状态特征。时空立方体模型对地理变 化描述更为形象简洁,适合作为时空变化动态可视化的数据模型。
[0004] 四叉树索引结构简单清晰而且算法容易实现,是目前广泛应用的空间索引。通过 四叉树空间索引,将数据所在的地理空间递归等分为四个子空间,存储于对应的的树结构 中,直到树的深度到达某一值或满足某一要求后便停止分割。该四叉树中的根节点和中间 节点不存储地理实体对象,叶子节点存储地理对象或对象的集合。在进行时空变化过程浏 览时,尤其是空间数据规模较大时,可以根据坐标系姿态解算可见的空间范围,而根据需求 调度相应的四叉树节点,能够减少不必要的对象的渲染,提高浏览效率。
[0005] 0penGL(0pen Graphics Library)顶点缓存(VB0,Vertex Buffer object)直接在 高性能显卡(GPU,Graphics Processing Unit)中开辟一个缓存区域来存储顶点数据,根据 用户输入的"target"模式和"usage"模式,顶点缓冲区内存管理器将缓冲区对象放在储存 器中最佳的位置。因为缓冲区只会在初始化和顶点数据发生变化时才会进行写操作,所以 使用顶点缓存大大地减少了 CPU-GPU之间的数据拷贝开销,能够显著地提升程序运行的效 率。

【发明内容】

[0006] 本发明的目的是克服现有技术存在的问题,提供一种时空变化动态可视化方法。 以x、y、t为坐标轴,构建时空点、线、面对象的立方体模型,使用时间平面求取相交的立方体 和立方体切面,通过颜色控制、显隐控制和时间平面的逐级递增递减,直观而有效地展现时 空对象变化的整个过程,在时空对象的研究和应用中具有重要的意义。
[0007] 本发明的目的是通过以下技术方案来实现的:一种时空变化过程动态可视化方 法,包括如下步骤:
[0008] 步骤1:记录时空对象的出生时间、消亡时间,建立"线性表+四叉树"的时空索引, 以文件形式统一存储所要描述的时空对象信息;
[0009] 步骤2:根据系统状态参数快速定位时空对象数据文件,将数据读入内存,进行平 移和缩放操作以适应屏幕坐标系;
[0010] 步骤3:构建时间平面,与内存中时空对象的时空立方体模型进行一一求交,记录 当前相交对象和历史相交对象,将当前相交对象几何形状投影到时间平面;
[0011] 步骤4:针对时间平面、历史相交对象、当前相交对象、当前相交对象投影结果构建 顶点数组和顶点颜色数组,调用OpenGL顶点缓存进行场景渲染;
[0012] 步骤5:上升或下降一级时间平面,将上一时间间隔的相交对象拷贝到历史相交对 象,重复步骤3)和步骤4);
[0013] 步骤6:通过设置时间平面间隔参数,较为连续地对整个时空中的时空对象变化过 程进行可视化展示。
[0014] 进一步地,所述的步骤1中所述时空对象包括点、线、面三种形态的对象。
[0015] 进一步地,所述步骤1具体如下:
[0016] (1 ? 1)使用GIS开源库shapeLib从shapefile文件中读取时空对象的几何信息和属 性信息;所述属性信息包括出生时间和消亡时间;
[0017] (1.2)根据出生时间以一定时间间隔对时空对象进行线性划分,对时空对象在出 生时刻的空间几何图形创建四叉树索引。
[0018] (1.3)将时空对象以文件形式进行统一存储,存储结构如下:每一个时空对象的结 构以一对能表明该时空对象类型的标记性语言作为开始和结束。记录时空对象的标识码、 出生时间、消亡时间,以及时空对象在出生时刻的几何图形的边界约束,边界约束为边界点 集合,边界点的标识码、坐标X和坐标Y同样记录在该时空对象的数据内容中。
[0019] 进一步地,所述步骤2具体如下:
[0020] (2.1)根据系统状态参数计算整个时空中的可视空间范围;
[0021] 所述系统状态参数包括当前用于求交的时间平面(iterTime)、世界坐标系(world frame)的姿态、照相机坐标系(camera frame)的姿态和模型坐标系(model frame)的姿态;
[0022] 所述可视空间范围的计算如下:相机坐标系与世界坐标系一致,将x,y,z方向的取 值均为[_1,1]的世界坐标系根据当前的平移和缩放量进行平移和缩放的坐标逆变换,变换 到模型坐标系;将模型坐标系根据初始设定的平移和缩放量进行平移和缩放的坐标逆变 换,得到地理空间坐标系下的可视空间范围;
[0023] (2.2)每次进行模型平移或缩放变换操作时计算可视空间范围,变化前后的可视 空间范围相差大于等于四叉树叶节点最小空间范围一半时重新读取数据;
[0024] (2.3)采用线性表的时间索引方式根据所分隔的年份命名根节点文件夹名称;
[0025] (2.4)采用四叉树的空间索引方式对空间进行划分,从划分空间的左上角象限开 始,顺时针命名并创建文件夹节点,若该节点为叶子节点则创建data.txt文件,该文件统一 存储该划分空间中的对象信息。
[0026] (2.5)在读取数据时,根据时间平面的值,定位根节点文件夹;再根据可视空间范 围检索与该范围相交的四叉树中的父节点集合,对集合中的每个父节点进行递归得到父节 点的四叉树检索路径列表。结合根节点文件夹和四叉树检索路径列表快速定位需要读入内 存的时空对象数据文件。
[0027]进一步地,所述的步骤3包括:
[0028] (3.1)将时间平面与时空立方体投影到时间轴(t轴)上,分别得到点的投影和线段 的投影,将点的投影和线段的投影进行相交计算,得到可视空间范围的当前相交对象;根据 不断更新的当前相交对象得到历史相交对象,历史相交对象和当前相交对象不重复,且相 对于当前时间平面处于消亡状态;
[0029] (3.2)计算当前相交对象在时间平面上的投影:首先取时空对象的时空立方体模 型的任意一条时间线段与时间平面求交,计算得出相交点与时空对象边界约束点的时间距 离td,然后将时空对象所有边界约束点在t轴上平移td,得到投影结果的边界约束点集合。 [00 30] 进一步地,所述的步骤4中采用glBuf f erData()为顶点缓存对象申请内存空间并 进行初始化,glBufferDataO的usage参数选取GL_DYNAMIC_DRAW。对时间平面、历史相交对 象、当前相交对象、当前相交对象投影结果使用不同的颜色渲染方式,其中当前相交对象投 影的渲染需要关闭深度缓存测试gIDisab 1 e (GL_DEPTH_TEST)。
[0031]进一步地,所述的步骤6包括:
[0032] (6.1)根据时空数据在生存周期上的分布特征选取时间平面间隔参数;
[0033] (6.2)在x,y,t构成的三维空间中,通过逐级递增或递减时间平面,观察时空变化 在不同阶段的特征、某一时空对象的变化历程,以及整个时空的演变过程;
[0034] (6.3)通过对点、线、面时空对象,以及当前时空对象、历史时空对象、当前对象投 影结果进行显隐控制,以更好地观察整个时空变化的过程。
[0035] 本发明与现有技术相比具有有益效果:
[0036] (1)本发明为GIS时空数据动态可视化提供了一种崭新的思考方式和实施方法。采 用时间切面和时空立方体的表现形式,相比于现有的可视化方法,更加直观、简洁、形象。
[0037] (2)本发明采用线性表+四叉树的时空索引,结构清晰、算法容易实现,而且能够满 足时空变化动态可视化的需求。所提出的结合四叉树的空间范围可视性计算,能够减少不 必要对象的可视化并且较好地进行空间数据的调度,从而提升可视化的用户体验。
[0038] (3)本发明使用OpenGL顶点缓存技术进行场景渲染,大大提升了场景渲染的效率, 增强了整个时空变化过程的可操作性。
【附图说明】
[0039] 图1为本发明基于可视性计算的数据加载效果,(a)为系统初始状态数据加载情 况,(b)为系统缩放操作后数据加载情况;
[0040] 图2为本发明时空变化不同阶段的截图,(a)为时间平面处于1991年4月1日的地籍 时空对象状态,(b)为时间平面处于1994年2月13日的地籍时空对象状态,(c)为时间平面处 于1998年11月21日的地籍时空对象状态,(d)为时间平面处于2002年8月18日的地籍时空对 象状态;
[0041]图3为本发明时空变化过程中不同时空对象的显隐控制,(a)为全部显示的时空对 象情况,(b)为不显示当前相交对象投影结果的时空对象情况,(c)为不显示当前相交对象 投影结果和历史对象的时空对象情况,(d)为只显示点对象的时空对象情况,(e)为只显示 线对象的时空对象情况,(f)为只显示面对象时空对象情况,(g)为只显示当前相交对象投 影结果的时空对象情况,(h)为当前相交对象投影结果的三维浏览。
【具体实施方式】
[0042] 下面结合附图和具体实施例对本发明作进一步详细说明。
[0043] 本发明提供的一种时空变化过程的动态可视化方法,包括如下步骤:
[0044] 步骤1:记录时空对象的出生时间、消亡时间,建立"线性表+四叉树"的时空索引, 以文件形式统一存储所要描述的时空对象信息;
[0045] 步骤2 :根据系统状态参数快速定位时空对象数据文件,将数据读入内存,进行平 移和缩放操作以适应屏幕坐标系;
[0046] 步骤3:构建时间平面,与内存中时空对象的时空立方体模型进行一一求交,记录 当前相交对象111_;[1^6冲1';[111;[1:;[¥68和历史相交对象111_18;[1^6冲1';[111;[1:;[¥68,将当前相交对象 m_interPrimitives几何形状投影到时间平面;
[0047] 步骤4:针对时间平面、历史相交对象、当前相交对象、当前相交对象投影结果构建 顶点数组和顶点颜色数组,调用OpenGL顶点缓存进行场景渲染;
[0048] 步骤5 :上升或下降一级时间平面,将上一时间间隔的相交对象!11_ ;[11七6冲1';[111;[1:;[¥68拷贝到历史相交对象111_18;[1^6冲1';[111;[1:;[¥68,重复步骤3)和步骤4);
[0049] 步骤6:通过设置时间平面间隔参数,较为连续地对整个时空中的时空对象变化过 程进行可视化展示。
[0050] 所述的步骤1包括:
[0051 ] (1)所述时空对象包括点、线、面三种形态的对象。
[0052] (2)基于传统shapefile的空间数据管理模式的应用开发,受限于ArcGIS版权的约 束,无法进行很好的扩展,所以采用文件形式进行时空对象的统一存储。
[0053] (3)使用GIS开源库shapeLib读取时空对象的几何信息和属性信息,分别是函数 SHP0pen()和DBF0pen();所述属性信息包括出生时间和消亡时间。其中padfX和padfY为指 向对象几何图形端点的指针,通过padfX++和padfY++可以遍历所有节点获取相应坐标信 息。而使用函数DBFGetFieldlndexO可以获取某一属性字段的索引号,进而使用函数 DBFReadStringAttribute()读取属性字段具体值。
[0054] (4)近年来人们对于时空资源的需求日益增长,时空变化频繁,时空数据空间范围 广且在时间维度上加速累积。为了提高读取和渲染的速度,根据出生时间以一定时间间隔 对数据进行线性划分,在此基础上,对时空对象在出生时刻的空间几何图形创建四叉树索 引。
[0055] (5)根据不同对象类型进行分层存储的传统形式,在时空变化动态可视化中没有 优势,反而不利于统一的计算与渲染,和数据文件的快速检索。所述用于动态可视化的时空 对象统一存储结构形式化表达如下:
[0056] <0b jectType>
[0057] [ObjectID,BeginTime ,EndTime ,Attrl ,Attr2, ??? ] <0bjectConstraints>
[0058] [Point,PointID,X,Y]
[0059] </0b jectType>
[0060] 所述的步骤2包括:
[0061 ] (1)整个过程中世界坐标系和相机坐标系重合。
[0062] (2)根据系统状态参数计算整个时空中的可视空间范围;
[0063]所述系统状态参数包括当前用于求交的时间平面(iterTime),世界坐标系(world frame)、照相机坐标系(camera frame)和模型坐标系(model frame)的姿态。
[0064]所述可视空间范围的计算如下:空间范围的计算只涉及x和y坐标信息,将三维坐 标变换简化为二维坐标变换;相机坐标系与世界坐标系一致,将x,y,z方向的取值均为[-1, 1 ]的世界坐标系根据当前的平移和缩放量进行平移和缩放的坐标逆变换,变换到模型坐标 系;将模型坐标系根据初始设定的平移和缩放量进行平移和缩放的坐标逆变换,得到可视 空间范围。变换公式如下:
[0065] 二维坐标变换: /sx 〇 〇\ /I 〇 i:x\
[0066] z, = s r ^ - 〇 .s v 〇 (〇 1 W Vo 0 V Vo 0 1/
[0067] 其中,S为缩放矩阵、T为平移矩阵、X为变换前的坐标矩阵、X'为变换后的坐标矩 阵。
[0068] 二维坐标逆变换: /V% 〇 〇\ /I 〇
[0069] X = S-1 * r-1 = 〇 1/ 〇 0 1 -tyl-X' \ o 〇y J 0 1 J
[0070] 其中,为缩放逆矩阵、r1为平移逆矩阵x为变换前的坐标矩阵、x'为变换后的坐 标矩阵。
[0071] (3)如果每进行一次模型变换(平移、旋转、缩放)都重新进行数据调度,会对场景 渲染、顶点缓存区更新造成一定压力,因此只考虑平移和缩放变换且当平移和缩放的累积 量对应到空间范围的变化到达一定值时才重新进行数据读写,该值根据四叉树子结点划分 的最小空间范围大小而定。若变化前后空间范围相差大于四叉树叶节点最小空间范围一半 时,即可重新读取数据。变换累积量计算依赖于复合平移变换和复合缩放变换计算:
[0072] 复合平移变换:S(S2x,S2y) ? S(Slx,Sly)=S(S2x ? Slx,S2y ? Sly)
[0073] 复合缩放变换:T(t2x,t2y) ? T(tlx,tly)=T(t2X+tlx,t2y+tly)
[0074] (4)采用线性表的时间索引方式根据所分隔的年份命名根节点文件夹名称,例如 1990,1995,2000。
[0075] (5)采用四叉树的空间索引方式对空间进行划分,从划分空间的左上角象限开始, 顺时针命名并创建文件夹节点:〇,1,2,3。若该节点为叶子节点则创建data. txt文件,该文 件统一存储该划分空间中的对象信息。
[0076] (6)在读取数据时,根据时间平面的值,定位根节点文件夹;再根据可视空间范围 检索与该范围相交的四叉树中的父节点集合,对集合中的每个父节点进行递归得到父节点 的四叉树检索路径列表。对其中一项进行举例,例如71/2/1/3/",使用strcat()函数在该 字串前增加根节点年份字串,即可以快速定位需要读入内存的数据文件。
[0077] (7)父节点递归检索的函数如下: /VWnter:是否相父 l、huj、A ; searchs:检索路径列茨#/ ReadQuad(QuadNocle node, bool &Inter, int i._child; std :: stack < in > &st, vector < std :: stack < hit ? &searchs){ if(i_child!二 0)st. push(Lchild);//跳过似节点
[0078] if'(node > childrcn[0] === NULL){lntcr :== turc; return;}//己到叶子节点 for(int i = (); i < 4; i + +){ ReadQuad(node --> chjldren[i],Inter, j + l,st,searchs);//递[J! if(Inter = true)seardis, push一back(st); if(! st, empty())st p0p(); } inter = false;}
[0079]所述的步骤3包括:
[0080] (1)将时间平面与时空立方体投影到时间轴(t轴)上,分别得到点的投影和线段的 投影,将点的投影和线段的投影进行相交计算,即点的t坐标值与线段最小t坐标值和最大t 坐标值的比较,得到可视空间范围的当前相交对象。
[0081] (2)根据不断更新的当前相交对象得到历史相交对象m_lsinterPrimitives,历史 相交对象111_18 interPrimitives和当前相交对象111_;[1^6冲1';[111;[1:;[¥68不重复,且相对于当前 时间平面处于消亡状态;
[0082] (3)计算当前相交对象在时间平面上的投影:首先取时空对象的时空立方体模型 的任意一条时间线段与时间平面求交,计算得出相交点与时空对象边界约束点的时间距离 td,然后将时空对象所有边界约束点在t轴上平移td,得到投影结果的边界约束点集合。 [0083]所述的步骤4包括:
[0084] (1)传统glVerteX()的方式是每次往GPU传顶点,CPU与GPU的数据传输消耗大,而 顶点缓存是直接在GPU中开辟一个缓存区,一次性将一个场景所需的顶点数据传入GPU,减 少了 CPU与GPU的传输消耗,能够较大提升场景渲染的效率。
[0085] (2)具体实现主要包含以下顶点缓存函数:
[0086] glGenBuffersO创建顶点缓存对象;glBindBuffer()将顶点缓存对象设置为当前 数组缓存对象(参数target取值GL_ARRAY_BUFFER);glBufferData()为顶点缓存对象申请 内存空间并进行初始化;g 1 B u f f e r S u b D a t a ()初始化或更新顶点缓存对象; glDeleteBuffers()销毁缓存对象。
[0087] (3)随着时间平面的逐级递增或递减,缓存区会被周期性更改,因此glBufferData ()的usage参数选取 GL_DYNAMIC_DRAW。
[0088] (4)对时间平面、历史相交对象、当前相交对象、当前相交对象投影结果使用不同 的颜色渲染方式:
[0089] 时间平面顶点:透明灰色面,glColor4fm(0.7,0.7,0.7,0.5);
[0090] 历史相交对象顶点:灰色面,glColor3f (0 ? 9,0 ? 9,0 ? 9);
[0091 ]当前相交对象顶点:多色面渲染,针对类型分色,例如土地用途;
[0092]当前相交对象投影结果顶点:红色线框,glColorf3f(l .0,0.0,0.0),需要关闭深 度缓存测试glDisable(GL_DEPTH_TEST);
[0093] (5)点、线、面时空立方体模型的绘制模式:
[0094]点:GL_P0INTS;线:面(GL_P0LYG0N)+首尾相接线(GL_LINE_L00P)双面绘制,通过 控制法线方向实现;面:面(GL_P0LYG0N)+首尾相接线(GL_LINE_L00P),剔除背面。
[0095]所述的步骤6包括:
[0096] (1)根据时空数据在生存周期上的分布特征选取时间平面间隔参数。
[0097] (2)在x,y,t构成的三维空间中,通过逐级递增或递减时间平面,观察时空变化在 不同阶段的特征、某一时空对象的变化历程,以及整个时空的演变过程。
[0098] (3)通过对点、线、面时空对象,以及现实时空对象、历史时空对象、现实对象投影 结果进行显隐控制,以更好地观察整个时空变化的过程。
[0099] 实施例:
[0100] 以地籍时空数据的时空变化过程动态可视化为例。
[0101] 第一步是使用shapeLib逐个读取现有地籍要素的出生时间、消亡时间等信息,读 取过程中,根据要素的出生时间和空间包围盒坐标范围,建立"线性表+四叉树"的时空索 弓丨,并存储到相应路径下的data.txt中。
[0102] 第二步是根据当前时间平面(默认19900000)在时间线性表中检索,定位父节点文 件夹"1990";根据模型坐标系姿态T(2,4)和S(l/10,1/10),通过坐标逆变换计算模型可视 空间范围(-30,-50)~(-10,-30 ),根据初始设定的地理坐标往模型坐标转换时的固定初始 缩放比例(1/100)和平移值(-430236.0,-3261083.0),进行坐标先缩放和平移的逆变换,计 算得到所要显示的地理空间范围(427236.0,3256083.0)~(429236.0,3258083.0 ),在空间 四叉树中进行递归检索,得到检索路径71/3/3"、71/3/4"、74/2/1"和74/2/2",将四个 路径下的data. txt数据读入内存,如图1所示;
[0103] 第三步是构建时间平面,通过线段求交方式与内存中时空对象的时空立方体模型 进行--求交,记录当前相交对象m_interPrimitives和历史相交对象111_ IsinterPrimitives,计算当前相交对象在时间平面上的几何形状投影;
[0104] 第四步是针对时间平面、历史相交对象、当前相交对象、当前相交对象投影结果构 建顶点数组和顶点颜色数组,调用OpenGL顶点缓存进行场景渲染,如图2所示;
[0105] 第五步是上升或下降一级时间平面(按照间隔5000进行加或减),将上一时间间隔 的相交对象拷贝到历史相交对象m_lsinterPrimitives,重复步骤3)和步骤4);
[0106] 第六步是在连续调整时间平面的过程中(如图2所示),在视窗中操作时空对象的 显隐性,可选择显示点、线、面的时空对象中的一种或多种,可选择只显示或不显示当前相 交对象在时间平面的投影结果,可选择只显示或不显示当前时间状态的历史时空对象。如 图3所示。
【主权项】
1. 一种时空变化过程动态可视化方法,其特征在于,包括如下步骤: 步骤1:记录时空对象的出生时间、消亡时间,建立"线性表+四叉树"的时空索引,以文 件形式统一存储所要描述的时空对象信息; 步骤2:根据系统状态参数快速定位时空对象数据文件,将数据读入内存,进行平移和 缩放操作以适应屏幕坐标系; 步骤3:构建时间平面,与内存中时空对象的时空立方体模型进行--求交,记录当前 相交对象和历史相交对象,将当前相交对象几何形状投影到时间平面; 步骤4:针对时间平面、历史相交对象、当前相交对象、当前相交对象投影结果构建顶点 数组和顶点颜色数组,调用OpenGL顶点缓存进行场景渲染; 步骤5:上升或下降一级时间平面,将上一时间间隔的相交对象拷贝到历史相交对象, 重复步骤3)和步骤4); 步骤6:通过设置时间平面间隔参数,较为连续地对整个时空中的时空对象变化过程进 行可视化展示。2. 根据权利要求1所述的一种时空变化过程动态可视化方法,其特征在于,所述的步骤 1中所述时空对象包括点、线、面三种形态的对象。3. 根据权利要求1所述的一种时空变化过程动态可视化方法,其特征在于,所述步骤1 具体如下: (1.1) 使用GIS开源库shapeLib从shapefile文件中读取时空对象的几何信息和属性信 息;所述属性信息包括出生时间和消亡时间; (1.2) 根据出生时间以一定时间间隔对时空对象进行线性划分,对时空对象在出生时 刻的空间几何图形创建四叉树索引。 (1.3) 将时空对象以文件形式进行统一存储,存储结构如下:每一个时空对象的结构以 一对能表明该时空对象类型的标记性语言作为开始和结束。记录时空对象的标识码、出生 时间、消亡时间,以及时空对象在出生时刻的几何图形的边界约束,边界约束为边界点集 合,边界点的标识码、坐标X和坐标Y同样记录在该时空对象的数据内容中。4. 根据权利要求1所述的一种时空变化过程动态可视化方法,其特征在于,所述步骤2 具体如下: (2.1) 根据系统状态参数计算整个时空中的可视空间范围; 所述系统状态参数包括当前用于求交的时间平面(iterTime)、世界坐标系(world frame)的姿态、照相机坐标系(camera frame)的姿态和模型坐标系(model frame)的姿态; 所述可视空间范围的计算如下:相机坐标系与世界坐标系一致,将x,y,z方向的取值均 为[_1,1]的世界坐标系根据当前的平移和缩放量进行平移和缩放的坐标逆变换,变换到模 型坐标系;将模型坐标系根据初始设定的平移和缩放量进行平移和缩放的坐标逆变换,得 到地理空间坐标系下的可视空间范围; (2.2) 每次进行模型平移或缩放变换操作时计算可视空间范围,变化前后的可视空间 范围相差大于等于四叉树叶节点最小空间范围一半时重新读取数据; (2.3) 采用线性表的时间索引方式根据所分隔的年份命名根节点文件夹名称; (2.4) 采用四叉树的空间索引方式对空间进行划分,从划分空间的左上角象限开始,顺 时针命名并创建文件夹节点,若该节点为叶子节点则创建data.txt文件,该文件统一存储 该划分空间中的对象信息。 (2.5)在读取数据时,根据时间平面的值,定位根节点文件夹;再根据可视空间范围检 索与该范围相交的四叉树中的父节点集合,对集合中的每个父节点进行递归得到父节点的 四叉树检索路径列表。结合根节点文件夹和四叉树检索路径列表快速定位需要读入内存的 时空对象数据文件。5. 根据权利要求1所述的一种时空变化过程动态可视化方法,其特征在于,所述的步骤 3包括: (3.1) 将时间平面与时空立方体投影到时间轴(t轴)上,分别得到点的投影和线段的投 影,将点的投影和线段的投影进行相交计算,得到可视空间范围的当前相交对象;根据不断 更新的当前相交对象得到历史相交对象,历史相交对象和当前相交对象不重复,且相对于 当前时间平面处于消亡状态; (3.2) 计算当前相交对象在时间平面上的投影:首先取时空对象的时空立方体模型的 任意一条时间线段与时间平面求交,计算得出相交点与时空对象边界约束点的时间距离 td,然后将时空对象所有边界约束点在t轴上平移td,得到投影结果的边界约束点集合。6. 根据权利要求1所述的一种时空变化过程动态可视化方法,其特征在于,所述的步骤 4中采用glBufferDataO为顶点缓存对象申请内存空间并进行初始化,glBufferData()的 usage参数选取GL_DYNAMIC_DRAW。对时间平面、历史相交对象、当前相交对象、当前相交对 象投影结果使用不同的颜色渲染方式,其中当前相交对象投影的渲染需要关闭深度缓存测 试glDisable(GL_DEPTH_TEST)。7. 根据权利要求1所述的一种时空变化过程动态可视化方法,其特征在于,所述的步骤 6包括: (6.1) 根据时空数据在生存周期上的分布特征选取时间平面间隔参数; (6.2) 在x,y,t构成的三维空间中,通过逐级递增或递减时间平面,观察时空变化在不 同阶段的特征、某一时空对象的变化历程,以及整个时空的演变过程; (6.3) 通过对点、线、面时空对象,以及当前时空对象、历史时空对象、当前对象投影结 果进行显隐控制,以更好地观察整个时空变化的过程。
【文档编号】H04N9/31GK105913475SQ201610409366
【公开日】2016年8月31日
【申请日】2016年6月12日
【发明人】张丰, 杜震洪, 刘仁义, 王巧燕
【申请人】浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1