CN104376050B - 一种在三维场景动态调度并显示海量矢量数据的方法 - Google Patents

一种在三维场景动态调度并显示海量矢量数据的方法 Download PDF

Info

Publication number
CN104376050B
CN104376050B CN201410603972.XA CN201410603972A CN104376050B CN 104376050 B CN104376050 B CN 104376050B CN 201410603972 A CN201410603972 A CN 201410603972A CN 104376050 B CN104376050 B CN 104376050B
Authority
CN
China
Prior art keywords
data
vector
bounding box
value
index value
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.)
Active
Application number
CN201410603972.XA
Other languages
English (en)
Other versions
CN104376050A (zh
Inventor
俞蔚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Kelan Information Technology Co Ltd
Original Assignee
Zhejiang Kelan Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang Kelan Information Technology Co Ltd filed Critical Zhejiang Kelan Information Technology Co Ltd
Priority to CN201410603972.XA priority Critical patent/CN104376050B/zh
Publication of CN104376050A publication Critical patent/CN104376050A/zh
Application granted granted Critical
Publication of CN104376050B publication Critical patent/CN104376050B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/29Geographical information databases

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Remote Sensing (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及地理信息系统三维矢量领域,公开了一种在三维场景动态调度并显示海量矢量数据的方法,包括以下步骤;第一步:建立缓存:缓存包括索引缓存与数据缓存;第二步:矢量数据的动态调度,包含确定显示范围索引值集以及矢量数据的动态增加与删除,即矢量动态调度。本发明以网格索引机制为基础,分别生成网格索引缓存和矢量数据缓存,通过当前视点及人为规定的显示距离确定显示范围,根据显示范围的变化实时增加或删除矢量数据,实现矢量数据的动态调度,从而实现海量矢量数据在三维场景中的动态显示。

Description

一种在三维场景动态调度并显示海量矢量数据的方法
技术领域
本发明属于地理信息系统三维矢量领域,涉及了一种在三维场景中通过对海量矢量数据进行逻辑分块,建立网格索引,根据网格索引调用与当前视点相关的数据块,实现对矢量数据的动态调度并显示的方法,即一种在三维场景动态调度并显示海量矢量数据的方法。
背景技术
传统的三维场景对矢量数据的绘制是通过对矢量数据一次性解析完毕,将所有空间数据加载到内存进行显示,但由于内存大小是有限的,因此,当矢量数据为海量数据时,这种处理方式则无能为力。因此,如何在三维场景中对海量矢量数据进行显示,是当前亟需解决的问题。
发明内容
本发明针对现有技术中的不足,提供了一种在三维场景动态调度并显示海量矢量数据的方法。
为了解决上述技术问题,本发明通过下述技术方案得以解决:
一种在三维场景动态调度并显示海量矢量数据的方法,包括以下步骤;
第一步:建立缓存:缓存包括索引缓存与数据缓存;
第二步:矢量数据的动态调度,包含确定显示范围索引值集以及矢量数据的动态增加与删除,即矢量动态调度。
作为优选,建立索引缓存包括以下步骤:
A1、解析矢量要素数据;
A2、以矢量要素数据的包围盒和矢量图层的包围盒以及瓦片大小进行索引计算,矢量要素数据的包围盒信息:确定XFMin、XFMax、YFMin、YFMax以及矢量图层的包围盒信息:XLMin、XLMax、YLMin、YLMax;
XFMin表示矢量要素包围盒X方向的最小值、XFMax表示矢量要素包围盒X方向的最大值、YFMin表示矢量要素包围盒Y方向的最小值、YFMax表示矢量要素包围盒Y方向的最大值、XLMin表示矢量图层包围盒X方向的最小值、XLMax表示矢量图层包围盒X方向的最大值、YLMin表示矢量图层包围盒Y方向的最小值、YLMax表示矢量图层包围盒Y方向的最大值,
计算瓦片大小的公式:
FeatureCount指矢量要素的个数,
矢量要素数据所占网格的起始终止行列值(行列值从0开始):
起始行值:BegRow=(YLMax-YFMax)/TileSize
终止行值:EndRow=(YLMax-YFMin)/TileSize
起始列值:BegCol=(XFMin-XLMin)/TileSize
终止列值:EndCol=(XFMax-XLMin)/TileSize
整个矢量图层的行列数:
行数:Rows=(YLMax-YLMin)/TileSize+1
列数:Cols=(XLMax-XLMin)/TileSize+1
索引值:Index=Row×Cols+Col,
其中BegRow≤Row≤EndRow,BegCol≤Col≤EndCol;
A3、生成索引缓存;遍历每一个矢量要素数据,按上面所列公式计算每个要素所占的索引值集合,根据索引值集合的每一个索引值,将索引值及对应的要素ID数据写到或追加到索引缓存中。
作为优选,数据缓存是通过遍历每个矢量要素数据,以要素ID、部分个数(NumParts)、坐标点数(NumPoints)、部分数组(Parts数组)、点数组(Points数组)、属性记录的组织方式生成。其中要素ID占8个字节;部分个数是指此要素有几部分组成,例如一条线要素有两条子线段组成,占4个字节;坐标点数表示构成当前要素所包含的坐标点个数,占4个字节;部分数组记录了每个部分的坐标在点数组中的起始位置,占4*NumParts个字节;点数组记录了所有的坐标信息,占了24*NumPoints个字节;属性记录记录了此要素的相关属性信息。
作为优选,确定显示范围索引值集的确定是根据当前视点eye(x,y,z)在XOZ平面的投影、人为规定的显示距离大小Range以及矢量图层的包围盒信息、视景体,步骤如下:
B1、根据eye(x,y,z)在XOZ平面的投影eye(x,z),显示距离大小Range确定当前的显示范围;
B2、对矢量图层数据的包围盒和B1确定的显示范围进行求交计算;
B3、通过求交得到的包围盒信息计算出当前范围起始终止行列值;
B4、根据每一个行列值、瓦片大小以及矢量图层的包围盒反算出每个格网的大小,判断每个格网是否在视景体范围内,若在视景体范围内,计算出索引值,添加到索引值集合中。
作为优选,矢量数据的增加与删除步骤如下:
C1、当前加载的矢量要素ID的列表mIdList,当前加载的缓存数据name的列表mCurNameList,存储加载缓存数据的索引号以及相应的矢量要素的ID集合,用map<int,vector<int>>存储;此map在编程语言中就是一种数据类型,就像我们说的整数类型一样,它存储了一个键值对,其中键值是一个唯一值,不能重复,在此是指索引号,而第二个分量是一个集合,它存储了索引号对应的要素ID的集合。“存储加载缓存数据的索引号以及相应的矢量要素的ID集合”其实就是对map<int,vector<int>>的解释,而mCurNameList就是这种map的数据类型。
C2、根据当前的索引值集合和上一次的索引值集合(mCurNameList)进行比较,计算出增加的索引值集合addNameList和减少的索引值集合delNameList;
C3、根据要删除的索引号delNameList在mCurNameList中删除对应的索引号(删除这个索引号的时候,相应的键值对都从mCurNameList中给移除了)并获取删除索引号对应的矢量要素ID集合,即为(ID),将(ID)记录在一个列表delList中,此时列表delList集合中ID不重复存在;
C4、遍历mCurNameList,依次比较其中要素的ID是否在delList中存在,若存在,则删除delList中对应的要素ID,遍历结束后,deList中的ID即为要删除矢量要素的ID;
C5、遍历mIdList中的ID值,如果ID值在deList中存在,则删除此ID值,并删除此ID值对应的矢量要素数据,然后再根据增加的索引号addNameList请求数据,判断增加addNameList对应的矢量要素ID值是否在mIdList不存在,若不存在,则在mIdList列表中增加对应的ID值并相应的增加矢量要素的数据。
本发明由于采用了以上技术方案,具有显著的技术效果:
本发明以网格索引机制为基础,分别生成网格索引缓存和矢量数据缓存,通过当前视点及人为规定的显示距离确定显示范围,根据显示范围的变化实时增加或删除矢量数据,实现矢量数据的动态调度,从而实现海量矢量数据在三维场景中的动态显示。
附图说明
图1为本发明索引缓存一条记录的组织结构图;
图2为本发明数据缓存一条记录的组织结构图;
图3为本发明显示范围计算方式的示意图。
具体实施方式
下面结合附图与实施例对本发明作进一步详细描述。
实施例1
一种在三维场景动态调度并显示海量矢量数据的方法,包括以下步骤;
第一步:建立缓存:缓存包括索引缓存与数据缓存;
第二步:矢量数据的动态调度,包含确定显示范围索引值集以及矢量数据的动态增加与删除,即矢量动态调度。
建立索引缓存包括以下步骤:
A1、解析矢量要素数据;
A2、以矢量要素数据的包围盒和矢量图层的包围盒以及瓦片大小进行索引计算,矢量要素数据的包围盒信息:确定XFMin、XFMax、YFMin、YFMax以及矢量图层的包围盒信息:XLMin、XLMax、YLMin、YLMax;
XFMin表示矢量要素包围盒X方向的最小值、XFMax表示矢量要素包围盒X方向的最大值、YFMin表示矢量要素包围盒Y方向的最小值、YFMax表示矢量要素包围盒Y方向的最大值、XLMin表示矢量图层包围盒X方向的最小值、XLMax表示矢量图层包围盒X方向的最大值、YLMin表示矢量图层包围盒Y方向的最小值、YLMax表示矢量图层包围盒Y方向的最大值,
计算瓦片大小的公式:
FeatureCount指矢量要素的个数,
矢量要素数据所占网格的起始终止行列值(行列值从0开始):
起始行值:BegRow=(YLMax-YFMax)/TileSize
终止行值:EndRow=(YLMax-YFMin)/TileSize
起始列值:BegCol=(XFMin-XLMin)/TileSize
终止列值:EndCol=(XFMax-XLMin)/TileSize
整个矢量图层的行列数:
行数:Rows=(YLMax-YLMin)/TileSize+1
列数:Cols=(XLMax-XLMin)/TileSize+1
索引值:Index=Row×Cols+Col,
其中BegRow≤Row≤EndRow,BegCol≤Col≤EndCol;
A3、生成索引缓存;遍历每一个矢量要素数据,按上面所列公式计算每个要素所占的索引值集合,根据索引值集合的每一个索引值,将索引值及对应的要素ID数据写到或追加到索引缓存中。
数据缓存是通过遍历每个矢量要素数据,以要素ID、部分个数(NumParts)、坐标点数(NumPoints)、部分数组(Parts数组)、点数组(Points数组)、属性记录的组织方式生成。其中要素ID占8个字节;部分个数是指此要素有几部分组成,例如一条线要素有两条子线段组成,占4个字节;坐标点数表示构成当前要素所包含的坐标点个数,占4个字节;部分数组记录了每个部分的坐标在点数组中的起始位置,占4*NumParts个字节;点数组记录了所有的坐标信息,占了24*NumPoints个字节;属性记录记录了此要素的相关属性信息。
确定显示范围索引值集的确定是根据当前视点eye(x,y,z)在XOZ平面的投影、人为规定的显示距离大小Range以及矢量图层的包围盒信息、视景体,步骤如下:
B1、根据eye(x,y,z)在XOZ平面的投影eye(x,z),显示距离大小Range确定当前的显示范围;
B2、对矢量图层数据的包围盒和B1确定的显示范围进行求交计算;
B3、通过求交得到的包围盒信息计算出当前范围起始终止行列值;
B4、根据每一个行列值、瓦片大小以及矢量图层的包围盒反算出每个格网的大小,判断每个格网是否在视景体范围内,若在视景体范围内,计算出索引值,添加到索引值集合中。
矢量数据的增加与删除步骤如下:
C1、当前加载的矢量要素ID的列表mIdList,当前加载的缓存数据name的列表mCurNameList,存储加载缓存数据的索引号以及相应的矢量要素的ID集合,用map<int,vector<int>>存储;
C2、根据当前的索引值集合和上一次的索引值集合(mCurNameList)进行比较,计算出增加的索引值集合addNameList和减少的索引值集合delNameList;
C3、根据要删除的索引号delNameList在mCurNameList中删除对应的索引号并获取删除索引号对应的矢量要素ID集合,即为(ID),将(ID)记录在一个列表delList中,此时列表delList集合中ID不重复存在;
C4、遍历mCurNameList,依次比较其中要素的ID是否在delList中存在,若存在,则删除delList中对应的要素ID,遍历结束后,deList中的ID即为要删除矢量要素的ID;
C5、遍历mIdList中的ID值,如果ID值在deList中存在,则删除此ID值,并删除此ID值对应的矢量要素数据,然后再根据增加的索引号addNameList请求数据,判断增加addNameList对应的矢量要素ID值是否在mIdList不存在,若不存在,则在mIdList列表中增加对应的ID值并相应的增加矢量要素的数据。根据数据源来验证本发明:
矢量数据图层包围:
XLMin=70403.596,XLMax=104115.631,YLMin=62958.350,YLMax=100016.620
矢量要素数据:
ID=0,XFMin=92314.068,XFMax=102846.140,YFMin=95832.002,YFMax=100016.620
ID=1,XFMin=98661.522,XFMax=104115.631,YFMin=64658.948,YFMax=71288.512
ID=2,XFMin=82690.183,XFMax=90104.213,YFMin=81162.330,YFMax=85895.670
ID=3,XFMin=70403.596,XFMax=76201.120,YFMin=93104.948,YFMax=96302.184
ID=4,
XFMin=73800.356,XFMax=78988.719,YFMin=62958.350,YFMax=66926.032
二、建立缓存
1、建立索引缓存
瓦片大小:
(取整)
整个矢量图层的行列数:
行数:Rows=(100016.620-62958.350)/15807+1=3(取整)
列数:Cols=(104115.631-70403.596)/15807+1=3(取整)
要素ID=0所占网格的起始行列值:
起始行值:BegRow=(100016.620-100016.620)/15807=0(取整)
终止行值:EndRow=(100016.620-95832.002)/15807=0(取整)
起始列值:BegCol=(92314.068-70403.596)/15807=1(取整)
终止列值:EndCol=(102846.140-70403.596)/15807=2(取整)
要素ID=0的索引值集合{1,2};
要素ID=1所占网格的起始行列值:
起始行值:BegRow=(100016.620-71288.512)/15807=1(取整)
终止行值:EndRow=(100016.620-64658.948)/15807=2(取整)
起始列值:BegCol=(98661.522-70403.596)/15807=1(取整)
终止列值:EndCol=(104115.631-70403.596)/15807=2(取整)
要素ID=1的索引值集合{4,7,5,8};
要素ID=2所占网格的起始行列值:
起始行值:BegRow=(100016.620-85895.670)/15807=0(取整)
终止行值:EndRow=(100016.620-81162.330)/15807=1(取整)
起始列值:BegCol=(82690.183-70403.596)/15807=0(取整)
终止列值:EndCol=(90104.213-70403.596)/15807=1(取整)
要素ID=2的索引值集合{0,3,1,4};
要素ID=3所占网格的起始行列值:
起始行值:BegRow=(100016.620-96302.184)/15807=0(取整)
终止行值:EndRow=(100016.620-93104.948)/15807=0(取整)
起始列值:BegCol=(70403.596-70403.596)/15807=0(取整)
终止列值:EndCol=(76201.120-70403.596)/15807=0(取整)
要素ID=3的索引值集合{0};
要素ID=4所占网格的起始行列值:
起始行值:BegRow=(100016.620-66926.032)/15807=2(取整)
终止行值:EndRow=(100016.620-62958.350)/15807=2(取整)
起始列值:BegCol=(73800.356-70403.596)/15807=0(取整)
终止列值:EndCol=(78988.719-70403.596)/15807=0(取整)
要素ID=4的索引值集合{6};
因此,索引缓存的结构如下所示:
0,2,3
1,0,2
2,0
3,2
4,1,2
5,1
6,4
7,1
8,1
其中每一行第一个数值为索引ID值,后面的为其对应的要素ID集合;
2、建立数据缓存
数据缓存的结构如下:
0,15{0}{{92314.068,98982.220,0},{96545.704,100016.620,0},{102564.031,98982.220,0},{102846.140,95832.002,0},{94900.067,96020.075,0}},属性记录
1,14{0}{{104115.631,64658.948,0},{98661.522,64800.003,0},{100307.158,71006.403,0},{102987.194,71288.512,0}},属性记录
2,14{0}{{84437.519,85895.700,0},{90104.213,83795.348,0},{87847.340,81162.330,0},{82690.183,82457.240,0}},属性记录
3,14{0}{{70403.596,95361.820,0},{75998.759,96320.184,0},{76201.120,94493.659,0},{71061.850,93104.948,0}},属性记录
4,13{0}{{73800.356,66926.032,0},{78988.719,64234.403,0},{74823.596,62958.350,0}},属性记录
矢量数据的动态调度
取两个视点作为动态调度的对比显示:eye1(91162.942,2393.006,-78572.783),eye2(79229.781,2393.159,-91666.061);规定显示距离Range大小为3000。
先取视点eye1,则当前的显示范围为
Box(eye1.x-Range,0,eye1.z-Range,eye1.x+Range,0,eye1.z+Range)=Box(88162.945,0,-81572.781,94162.945,0,-75572.781),其Box前三个坐标为左下角的xyz坐标值,后三个坐标为右上角的xyz坐标值。
矢量图层的包围盒信息BoundingBox
(70403.594,0,-100016.62,104115.63,0,-62958.352)
当前显示范围与矢量图层包围盒求交得InsectBox(88162.945,0,-81572.781,94162.945,0,-75572.781),
通过InsectBox,BoundingBox,TileSize可得当前显示范围的起始终止行列值,分别是BegCol=1,EndCol=1,BegRow=1,EndRow=1;
通过BegCol,EndCol,BegRow,EndRow仅构建了一个格网,其大小为Grid(86210.594,0,-84209.617,102017.59,0,-68402.617),通过判定其在视景体范围内,计算其索引值为4;
根据索引缓存通过索引值4找到对应的要素数据ID为1、2,通过要素ID=1,ID=2加载数据缓存中相应的数据进行绘制显示。则mIdList={1,2},mCurNameList={4,{1,2}};
改变视点为eye2(79229.781,2393.159,-91666.061),则调度的范围发生变化,eye2对应的显示范围
Box2(eye2.x-Range,0,eye2.z-Range,eye2.x+Range,0,eye2.z+Range)=Box2(76229.781,0,-94666.063,82229.781,0,-88666.063),其Box2前三个坐标为左下角的xyz坐标值,后三个坐标为右上角的xyz坐标值,
视点eye2对应的显示范围与矢量图层包围盒求交得InsectBox2(76229.781,0,-94666.063,82229.781,0,-88666.063)
通过InsectBox2,BoundingBox,TileSize可得eye2对应显示范围的起始终止行列值,分别是BegCol2=0,EndCol2=0,BegRow2=0,EndRow2=0,
通过BegCol2,EndCol2,BegRow2,EndRow2仅构建了一个格网,其大小为Grid2(70403.594,0,-100016.62,86210.594,0,-84209.617),通过判定其在视景体范围内,计算其索引值为0,
通过当前的索引值集合{0}和mCurNameList={4,{1,2}}比较,增加的索引值集合addNameList={0},减少的索引值集合delNameList={4};
根据要删除的索引号delNameList={4}在mCurNameList={4,{1,2}}中删除对应的索引号则mCurNameList={},获取删除索引号对应的矢量要素ID集合,则delList={1,2}(ID不重复存在);
遍历mCurNameList={},并依次比较其中要素的ID是否在delList={1,2}中存在,通过比较,不存在,因此delList={1,2};
依据deList={1,2}中的ID删除在mIdList={1,2}列表中对应的ID,则mIdList={};
再根据增加的索引号addNameList={0}请求数据,根据索引缓存通过索引值0找到对应的要素数据ID为2、3,判断矢量要素ID=2,ID=3是否在mIdList={}中,经判断,在mIdList不存在,通过数据缓存加载ID=2,ID=3的矢量要素数据,则mIdList={2,3},mCurNameList={0,{2,3}}。
总之,以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所作的均等变化与修饰,皆应属本发明专利的涵盖范围。

Claims (4)

1.一种在三维场景动态调度并显示海量矢量数据的方法,其特征在于包括以下步骤;
第一步:建立缓存:缓存包括索引缓存与数据缓存;
第二步:矢量数据的动态调度,包含确定显示范围索引值集以及矢量数据的动态增加与删除,即矢量动态调度;
矢量数据的增加与删除步骤如下:
C1、当前加载的矢量要素ID的列表mIdList,当前加载的缓存数据name的列表mCurNameList,存储加载缓存数据的索引号以及相应的矢量要素的ID集合,用map<int,vector<int>>存储;
C2、根据当前的索引值集合和上一次的索引值集合{mCurNameList}进行比较,计算出增加的索引值集合addNameList和减少的索引值集合delNameList;
C3、根据要删除的索引号delNameList在mCurNameList中删除对应的索引号并获取删除索引号对应的矢量要素ID集合,即为{ID},将{ID}记录在一个列表delList中,此时列表delList集合中ID不重复存在;
C4、遍历mCurNameList,依次比较其中要素的ID是否在delList中存在,若存在,则删除delList中对应的要素ID,遍历结束后,deList中的ID即为要删除矢量要素的ID;
C5、遍历mIdList中的ID值,如果ID值在deList中存在,则删除此ID值,并删除此ID值对应的矢量要素数据,然后再根据增加的索引号addNameList请求数据,判断增加addNameList对应的矢量要素ID值是否在mIdList不存在,若不存在,则在mIdList列表中增加对应的ID值并相应的增加矢量要素的数据。
2.根据权利要求1所述的一种在三维场景动态调度并显示海量矢量数据的方法,其特征在于:建立索引缓存包括以下步骤:
A1、解析矢量要素数据;
A2、以矢量要素数据的包围盒和矢量图层的包围盒以及瓦片大小进行索引计算,矢量要素数据的包围盒信息:确定XFMin、XFMax、YFMin、YFMax以及矢量图层的包围盒信息:XLMin、XLMax、YLMin、YLMax;
XFMin表示矢量要素包围盒X方向的最小值、XFMax表示矢量要素包围盒X方向的最大值、YFMin表示矢量要素包围盒Y方向的最小值、YFMax表示矢量要素包围盒Y方向的最大值、XLMin表示矢量图层包围盒X方向的最小值、XLMax表示矢量图层包围盒X方向的最大值、YLMin表示矢量图层包围盒Y方向的最小值、YLMax表示矢量图层包围盒Y方向的最大值,
计算瓦片大小的公式:FeatureCount指矢量要素的个数,
矢量要素数据所占网格的起始终止行列值,其中行列值从0开始:
起始行值:BegRow=(YLMax-YFMax)/TileSize
终止行值:EndRow=(YLMax-YFMin)/TileSize
起始列值:BegCol=(XFMin-XLMin)/TileSize
终止列值:EndCol=(XFMax-XLMin)/TileSize
整个矢量图层的行列数:
行数:Rows=(YLMax-YLMin)/TileSize+1
列数:Cols=(XLMax-XLMin)/TileSize+1
索引值:Index=Row×Cols+Col,
其中BegRow≤Row≤EndRow,BegCol≤Col≤EndCol;
A3、生成索引缓存;遍历每一个矢量要素数据,按公式计算每个要素所占的索引值集合,根据索引值集合的每一个索引值,将索引值及对应的要素ID数据写到或追加到索引缓存中。
3.根据权利要求1所述的一种在三维场景动态调度并显示海量矢量数据的方法,其特征在于:数据缓存是通过遍历每个矢量要素数据,以要素ID、部分个数NumParts、坐标点数NumPoints、部分数组Parts数组、点数组Points数组、属性记录的组织方式生成,其中要素ID占8个字节。
4.根据权利要求1所述的一种在三维场景动态调度并显示海量矢量数据的方法其特征在于:确定显示范围索引值集是根据当前视点eye(x,y,z)在XOZ平面的投影、人为规定的显示距离大小Range以及矢量图层的包围盒信息、视景体,步骤如下:
B1、根据eye(x,y,z)在XOZ平面的投影eye(x,z),显示距离大小Range确定当前的显示范围;
B2、对矢量图层数据的包围盒和B1确定的显示范围进行求交计算;
B3、通过求交得到的包围盒信息计算出当前范围起始终止行列值;
B4、根据每一个行列值、瓦片大小以及矢量图层的包围盒反算出每个格网的大小,判断每个格网是否在视景体范围内,若在视景体范围内,计算出索引值,添加到索引值集合中。
CN201410603972.XA 2014-10-31 2014-10-31 一种在三维场景动态调度并显示海量矢量数据的方法 Active CN104376050B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410603972.XA CN104376050B (zh) 2014-10-31 2014-10-31 一种在三维场景动态调度并显示海量矢量数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410603972.XA CN104376050B (zh) 2014-10-31 2014-10-31 一种在三维场景动态调度并显示海量矢量数据的方法

Publications (2)

Publication Number Publication Date
CN104376050A CN104376050A (zh) 2015-02-25
CN104376050B true CN104376050B (zh) 2017-11-24

Family

ID=52554957

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410603972.XA Active CN104376050B (zh) 2014-10-31 2014-10-31 一种在三维场景动态调度并显示海量矢量数据的方法

Country Status (1)

Country Link
CN (1) CN104376050B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105760529B (zh) * 2016-03-03 2018-12-25 福州大学 一种移动端矢量数据的空间索引和缓存构建方法
CN106600684B (zh) * 2016-11-29 2019-11-29 浙江科澜信息技术有限公司 一种倾斜模型组织构建方法
CN108572951B (zh) * 2017-03-08 2021-08-17 星际空间(天津)科技发展有限公司 一种基于地理信息的制图数据三维显示系统
CN107239559B (zh) * 2017-06-12 2020-03-31 中国电子科技集团公司第二十八研究所 一种基于矢量网格进行空间动目标位置计算的方法
CN110286389B (zh) * 2019-07-15 2021-05-07 北京智行者科技有限公司 一种用于障碍物识别的栅格管理方法
CN110990512B (zh) * 2019-11-29 2021-06-29 农业农村部规划设计研究院 矢量要素与行政区域全覆盖检查的方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101593364A (zh) * 2009-06-25 2009-12-02 北京航空航天大学 一种基于椭球体扫描的连续碰撞检测方法
CN101887595A (zh) * 2009-05-14 2010-11-17 武汉如临其境科技创意有限公司 基于四叉树索引的三维数字地球空间数据组织渲染方法
CN103164440A (zh) * 2011-12-14 2013-06-19 中国海洋大学 面向虚拟现实的空间数据引擎方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101887595A (zh) * 2009-05-14 2010-11-17 武汉如临其境科技创意有限公司 基于四叉树索引的三维数字地球空间数据组织渲染方法
CN101593364A (zh) * 2009-06-25 2009-12-02 北京航空航天大学 一种基于椭球体扫描的连续碰撞检测方法
CN103164440A (zh) * 2011-12-14 2013-06-19 中国海洋大学 面向虚拟现实的空间数据引擎方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
优化WebVR模型数据下载的VSPLA算法;赵强 等;《计算机工程与设计》;20121116;第33卷(第11期);4288-4293 *
基于HBase的矢量空间数据分布式存储研究;范建永 等;《地理与地理信息科学》;20120915;第28卷(第5期);39-42 *
基于Oracle Spatial的空间数据库缓存的关键技术;周芹 等;《地球信息科学》;20070615;第9卷(第3期);40-44 *

Also Published As

Publication number Publication date
CN104376050A (zh) 2015-02-25

Similar Documents

Publication Publication Date Title
CN104376050B (zh) 一种在三维场景动态调度并显示海量矢量数据的方法
CN107357846B (zh) 关系图谱的展示方法以及装置
CN108198145A (zh) 用于点云数据修复的方法和装置
CN105261066B (zh) 一种三维地理信息系统实时绘制多线程分配与控制方法
CN103701466A (zh) 基于特征保留的散乱点云压缩算法
US9959670B2 (en) Method for rendering terrain
CN102509339B (zh) 一种带纹理约束的三维模型顶点聚类简化方法
US20150235392A1 (en) Drawing data generation device and image drawing device
CN107705363B (zh) 一种道路三维可视化建模方法及装置
CN107886564A (zh) 用于实现三维场景显示的方法
US20220198748A1 (en) Method for visualizing large-scale point cloud based on normal
CN104050708A (zh) 一种3d游戏引擎lod系统的实现方法
CN113628314A (zh) 一种虚幻引擎中摄影测量模型的可视化方法、装置和设备
CN111275633A (zh) 基于图像分割的点云去噪方法、系统、装置和存储介质
CN111145356A (zh) 一种基于Unity3D模型的切割方法
CN114708414B (zh) 一种工程三维地形数据切割融合方法与系统
CN105957149A (zh) 一种适用于高效渲染的城市三维模型数据预处理方法
CN106373175A (zh) 一种地形高度图数据的加载方法
CN116402936A (zh) 一种基于八叉树的透明渲染复杂场景深度估计方法和装置
CN110634184B (zh) 一种海量倾斜摄影数据的加载方法
CN103714192A (zh) 基于自适应r-树的大数据量铁路三维设计模型渲染方法
CN108986212B (zh) 一种基于裂缝消除的三维虚拟地形lod模型的生成方法
CN103426201B (zh) 基于三维数字城市系统海量模型数据的浏览方法
CN105512312A (zh) 一种二维地图库加速的方法
CN106910239A (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
CB02 Change of applicant information

Address after: Hangzhou City, Zhejiang province Binjiang District 310051 shore road 1197 Building 5 room 363

Applicant after: ZHEJIANG KELAN INFORMATION TECHNOLOGY CO., LTD.

Address before: 310012 science building A203, East Software Park, No. 90, Zhejiang, Hangzhou, Wensanlu Road

Applicant before: Hangzhou Kelan Information Technology Co., Ltd.

COR Change of bibliographic data
GR01 Patent grant
GR01 Patent grant