技术简介:
本专利针对三维模型、地形及倾斜摄影数据存储效率低、访问慢的问题,提出基于NoSQL架构与内存映射技术的GKF三维空间数据库方案。通过分块内存映射实现高效数据读取,结合异步加载与动态调度机制提升渲染性能,采用加密存储增强数据安全性,有效解决了海量三维数据存储紧凑性与访问实时性矛盾。
关键词:三维空间数据库,NoSQL,内存映射技术
本发明属于三维数字城市、三维地理信息系统领域,特别是涉及三维空间数据库格式及其创建和访问方法。
背景技术:
:三维数字城市是以计算机技术、多媒体技术和大规模存储技术为基础,以宽带网络为纽带,运用遥感、全球定位系统、地理信息系统、遥测、仿真-虚拟等技术,对城市进行多分辨率、多尺度、多时空和多种类的三维描述,即利用信息技术手段把城市的过去、现状和未来的全部内容在网络上进行数字化虚拟实现。三维空间数据是对地形地貌、地上地下人工建筑物等基础地理信息的三维表达,反映被表达对象的三维空间位置、几何形态、纹理及属性等信息,主要包括三维地形、三维模型、倾斜摄影模型,三维模型主要分为地面模型、建筑模型、道路模型、水系模型、植被模型、地下空间设施模型及其他模型等内容。三维空间数据库是用于存放三维空间数据的数据库,主要包括三维地形数据库、三维模型数据库、倾斜摄影模型数据库。三维地形数据、三维模型数据、倾斜摄影模型数据是指采用三维地形创建软件、三维建模软件、倾斜摄影建模软件制作的三维空间数据,可以打开和编辑,并能进行坐标转换、格式转换、分层、分块、切片等操作,并将操作结果保存到三维空间数据库中。三维空间数据库通常以关系数据库或文件方式存储;三维空间数据库创建通常包括关系数据库的模式创建、入库检查、入库、入库后检查等步骤;三维空间数据库访问通常包括关系数据库打开、三维场景构建、执行sql查询并返回结果等步骤。对于三维地形,通常支持由dem和dom数据经过重采样生成多级金字塔结构的三维地形瓦片,每一个三维地形瓦片包含了高程数据和纹理数据,层级的金字塔结构的三维地形瓦片适应了不同场景的加载需求;对于三维模型,通常支持lod技术,通过不同细节层次的模型适应不同场景的模型加载需求。1976年,clark提出了lod(levelsofdetail,细节层次)模型的概念,认为当物体覆盖屏幕较小区域时,可以使用该物体描述较粗的模型,并给出了一个用于可见面判定算法的几何层次模型,以便对复杂场景进行快速绘制。对于倾斜摄影模型,通常由倾斜摄影建模软件根据空三加密成果和倾斜摄影纹理,自动重建带有金字塔结构的倾斜摄影瓦片,每一个倾斜摄影瓦片包含了几何数据和纹理数据,层级的金字塔结构的倾斜摄影瓦片适应了不同场景的加载需求;nosql(notonlysql),泛指非关系型的数据库,是一项全新的数据库革命,nosql数据库的四大分类:(1)键值(key-value)存储数据库,主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。key指向value的键值对,通常用hashtable来实现,查找速度快数据无结构化,通常只被当作字符串或者二进制数据。key/value模型对于it系统来说的优势在于简单、易部署。但是如果dba只对部分值进行查询或更新的时候,key/value就显得效率低下了。(2)列存储数据库,通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。(3)文档型数据库,该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如json。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。(4)图形(graph)数据库,是使用灵活的图形模型,并且能够扩展到多个服务器上。nosql数据库没有标准的查询语言(sql),因此进行数据库查询需要制定数据模型。nosql数据库在以下情况下比较适用:(1)数据模型比较简单;(2)需要灵活性更强的it系统;(3)对数据库性能要求较高;(4)不需要高度的数据一致性;(5)对于给定key,比较容易映射复杂值的环境。(6)base:相对于事务严格的acid特性,nosql数据库保证的是base特性。base是最终一致性和软事务。内存映射文件,是由一个文件到一块内存的映射。win32提供了允许应用程序把文件映射到一个进程的函数(createfilemapping)。内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而且在对该文件进行操作之前必须首先对文件进行映射。使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行i/o操作,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。综上所述,在三维空间数据库中,存储着海量的三维空间数据,而且每一个要素存在不同精度的lod节点或者金字塔叶节点。由于普通计算机的硬件有限,现有的基于关系型数据库的三维空间数据库速度慢、效率低,因此如何高效存储和调度三维空间数据,就成了比较迫切的问题。技术实现要素:有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是面向三维模型、三维地形、倾斜摄影模型数据的存储及快速访问。为实现上述目的,本发明提供了一种gkf三维空间数据库的创建和访问方法。1、一种gkf三维空间数据库的创建方法,其特征在于按以下步骤进行:a1、分析创建数据集的类型,如果是三维模型数据集,执行步骤a2;如果是三维地形数据集,执行步骤a3;如果是倾斜摄影数据集,执行步骤a4;a2、创建三维模型数据集类型的gkf三维空间数据库,顺序执行a21-a25;a21、三维模型数据集元数据入库,顺序执行a211-a215;;a211、获取三维模型数据集信息,所述三维模型数据集信息包括版本、uuid、名称、别名、数据制作单位、创建日期、元数据记录数、数据记录数;a212、获取场景图层列表,所述场景图层列表为<图层id、父图层id、图层名称>元组列表;a213、获取三维模型信息,所述三维模型信息包括名称、中心点位置、偏转和缩放值、包围盒最小点、包围盒最大点、所属图层id、lod数据;所述lod数据为<lod级别,mindistance,maxdistance>的元组列表;a214、创建32字节的gkxheader,写入gkx文件。所述gkxheader包括gkf文件标识符、gkf版本、gkf数据集类型、gkf元数据记录数、gkf数据记录数、gkx索引文件压缩后长度、gkx索引文件原始长度和保留字段共8个字段;创建时,gkf文件标识符填充为0x4b4f4547,gkf数据集类型填充为gkf_dataset,所述gkf_dataset值为0x1;a215、将a211-a213三个步骤获得的3条元数据使用aes加密算法,形成三条元数据记录;元数据记录写入gkx文件,加密数据写入gkf文件;a22、三维模型几何数据入库,获得需要入库的所有模型列表,对每个模型执行a221-a222;a221、获取该模型的名称、渲染选项、顶点列表、顶点法线列表、第一套纹理坐标t0、第二套纹理坐标t1、使用的纹理名称等,形成二进制格式的几何数据,并使用异或加密算法,生成加密的二进制几何数据,使用zip算法压缩存储,记录压缩前原始长度和压缩后长度,形成压缩加密的二进制模型数据;所述模型渲染选项包括是否透明、是否含有光照纹理、是否双面显示、水效和玻璃材质选项;a222、创建压缩加密的二进制模型数据对应的数据记录,写入gkx文件,将压缩加密的二进制模型数据顺序写入gkf文件;a23、三维模型纹理数据入库,获得需要入库的所有纹理列表,对每个纹理执行a231-a232;a231、获取该纹理二进制格式数据,并使用异或加密算法,生成加密的二进制纹理数据,使用zip算法压缩存储,记录压缩前原始长度和压缩后长度,形成压缩加密的二进制纹理数据;所述纹理二进制格式为dds格式,支持dxt1、dxt3、dxt5;a232、创建压缩加密的二进制纹理数据对应的数据记录,写入gkx文件,将压缩加密的二进制纹理数据顺序写入gkf文件;a24、三维模型属性数据入库。获得需要入库的所有要素列表,对每一个要素,生成属性数据,将属性数据记录写入gkx文件,将属性数据写入gkf文件;a25、gkx数据记录入库。对gkx文件中的元数据记录和数据记录,使用zip算法压缩存储,并更新压缩前原始长度和压缩后长度;a3、创建三维地形数据集的gkf三维地形数据库,顺序执行a31-a33;a31、三维地形数据集元数据入库。顺序执行a311-a313:a311、获取三维地形数据集信息,所述三维地形数据集信息包括包括版本、uuid、名称、别名、数据制作单位、创建日期、元数据记录数、数据记录数、根瓦片名称、中心点位置、偏转和缩放值、包围盒最小点、包围盒最大点;a312、创建32字节的gkxheader,写入gkx文件。所述gkxheader包括gkf文件标识符、gkf版本、gkf数据集类型、gkf元数据记录数、gkf数据记录数、gkx索引文件压缩后长度、gkx索引文件原始长度和保留字段共8个字段;创建时,gkf文件标识符填充为0x4b4f4547,gkf数据集类型填充为gkf_tileset,所述gkf_tileset值为0x2;a313、将a311步骤获得的三维地形数据集的数据集信息使用aes加密算法进行加密,形成一条元数据记录;元数据记录写入gkx文件,加密数据写入gkf文件;a32、三维地形瓦片数据入库,需要获得需要入库的所有三维地形瓦片列表,对每个三维地形瓦片执行a321-a322;a321、获取该三维地形瓦片的名称、lod信息、高程数据、纹理数据等,形成二进制格式的三维地形瓦片数据,并使用异或加密算法,生成加密的二进制三维地形瓦片数据,使用zip算法压缩存储,记录压缩前原始长度和压缩后长度,形成压缩加密的二进制三维地形瓦片数据;a322、创建压缩加密的二进制三维地形瓦片数据对应的数据记录,写入gkx文件,将压缩加密的二进制三维地形瓦片数据顺序写入gkf文件;a33、gkx数据记录入库。对gkx文件中的元数据记录和数据记录,使用zip算法压缩存储,并记录压缩前原始长度和压缩后长度;a4、创建倾斜摄影模型数据集的gkf倾斜摄影模型数据库,顺序执行a41-a43;a41、倾斜摄影模型数据集元数据入库,顺序执行a411-a414:a411、获取倾斜摄影模型数据集信息,所述倾斜摄影模型数据集信息包括版本、uuid、名称、别名、数据制作单位、创建日期、元数据记录数、数据记录数、中心点位置、偏转和缩放值、包围盒最小点围盒最大点、采集时间、采集平台、建模平台、影像地面分辨率、成图比例尺、飞行高度、正射航向重叠度、正射旁向重叠度、精度评定日期、精度评定点数、精度评定x方向中误差、精度评定y方向中误差、精度评定高程中误差、成果金字塔层级、成果最精细层模型的x方向分辨率、成果最精细层模型的y方向分辨率;a412、获取倾斜摄影模型数据集的根瓦片名称列表;a413、创建32字节的gkxheader,写入gkx文件。所述gkxheader包括gkf文件标识符、gkf版本、gkf数据集类型、gkf元数据记录数、gkf数据记录数、gkx索引文件压缩后长度、gkx索引文件原始长度和保留字段共8个字段;创建时,gkf文件标识符填充为0x4b4f4547,gkf数据集类型填充为gkf_obliquetileset,所述gkf_obliquetileset值为0x3;a414、将a411-a412步骤获得的两条元数据使用aes加密算法进行加密,形成两条元数据记录;数据记录写入gkx文件,加密数据写入gkf文件;a42、倾斜摄影瓦片数据入库,需要获得需要入库的所有倾斜摄影瓦片列表,对每个倾斜摄影瓦片执行a421-a422;a421、获取该倾斜摄影瓦片的名称、lod信息、几何数据、纹理数据等,形成二进制格式的倾斜摄影瓦片数据,并使用异或加密算法,生成加密的二进制倾斜摄影瓦片数据,使用zip算法压缩存储,记录压缩前原始长度和压缩后长度,形成压缩加密的二进制倾斜摄影瓦片数据;a422、创建压缩加密的二进制倾斜摄影瓦片数据对应的数据记录,写入gkx文件,将压缩加密的二进制倾斜摄影瓦片数据顺序写入gkf文件;a43、gkx数据记录入库。对gkx文件中的元数据记录和数据记录,使用zip算法压缩存储,并记录压缩前原始长度和压缩后长度;2、一种gkf三维空间数据库访问方法,其特征在于按以下步骤进行:b1、读取gkx数据记录文件。顺序执行b211-b215;b211、打开对应的gkx数据记录文件流,读取gkxheader结构,所述gkxheader结构如a314、a312、a413所示;b212、读取并使用zip算法解压缩元数据记录和数据记录,存入buffer中;b213、关闭gkx数据记录文件流;b214、在buffer中读取元数据记录;b215、在buffer中读取数据记录,建立数据名称和数据记录的对应map;b2、创建gkf文件的内存映射环境。顺序执行步骤b221-b224;b221、使用createfile函数以只读模式创建gkf文件的句柄;b222、使用getfilesizeex函数获取gkf文件的大小;b223、使用createfilemapping函数创建gkf文件的内存映射句柄;b224、以2gb块为单位,使用mapviewoffile函数创建gkf文件的内存映射指针列表;一个大小为l的gkf文件,对应的内存映射指针列表项的个数为(l/2gb)的上取整,;记为n个;前n-1个的大小为2gb,最后一个的大小为l-(n-1)*2gb;每个2gb块的块号为其在内存映射指针列表中的下标,从第0块到第n-1块,共n块;b3、创建三维场景并动态调度访问;分析gkf三维空间数据库对应的数据集的类型,如果是三维模型数据集,执行步骤b31;如果是三维地形数据集,执行步骤b32;如果是倾斜摄影数据集,执行步骤b33;b31、三维模型数据集的场景创建及动态调度访问,顺序执行步骤b311-b314;b311、读取三维模型数据集元数据。根据第0个内存映射指针,读取并在内存中解密,获得三维模型数据集的数据集信息、场景图层列表、三维模型信息三条元数据;b312、根据三维模型信息元数据,构建网格索引,根据网格索引结构,构建三维模型树;b313、渲染更新时,遍历三维场景树,根据视距、模型大小、配置的模型可视距离,触发模型调用请求,建立模型调用请求优先队列,并按优先队列依次进行i/o调度,读取并生成三维几何模型,通过异步的方式,放入渲染线程中,在下一次渲染帧循环中,更新场景,将场景几何节点结合到对应的场景树叶子节点之下,并更新场景树叶子节点的模型状态,完成几何模型的动态调度;b314、在三维场景树遍历过程中,分析纹理加载情况,动态引发纹理调用请求,建立纹理调用请求优先队列,并按优先队列依次进行i/o调度,读取并生成纹理,将纹理添加并更新到对应模型中,完成纹理的动态调度;b32、三维地形数据集的场景创建及动态调度访问,顺序执行步骤b321-b323;b321、根据第0个内存映射指针,读取并在内存中解密,获得三维地形数据集的数据集信息;b322、根据三维地形数据集的数据集信息,以及根瓦片名称,以及瓦片内置的三维地形金字塔索引,构建单根节点的三维地形瓦片树;b323、渲染更新时,遍历单根节点的三维地形瓦片树,根据视距、三维地形瓦片lod配置,触发三维地形瓦片调用请求,建立三维地形瓦片调用请求优先队列,并按优先队列依次进行i/o调度,读取并生成三维地形瓦片,通过异步的方式,放入渲染线程中,在下一次渲染帧循环中,更新场景,将三维地形瓦片结合到对应的三维地形瓦片树叶子节点之下,完成三维地形瓦片的动态调度;b33、倾斜摄影数据集的场景创建及动态调度访问,顺序执行步骤b331-b333;b331、根据第0个内存映射指针,读取并在内存中解密,获得倾斜摄影数据集的数据集信息、根瓦片列表;b332、根据倾斜摄影数据集的数据集信息,以及根瓦片列表,以及瓦片内置的倾斜摄影瓦片金字塔索引,构建多根节点的倾斜摄影瓦片树;b333、渲染更新时,遍历多根节点的倾斜摄影瓦片树,根据视距、倾斜摄影瓦片lod配置等因素,触发倾斜摄影瓦片调用请求,建立倾斜摄影瓦片调用请求优先队列,并按优先队列依次进行i/o调度,读取并生成倾斜摄影瓦片,通过异步的方式,放入渲染线程中,在下一次渲染帧循环中,更新场景,将倾斜摄影瓦片结合到对应的倾斜摄影瓦片树叶子节点之下,完成倾斜摄影瓦片的动态调度。b4、读取gkf数据文件,顺序执行步骤b41-b42;b41、根据动态调用请求的数据名称,通过b215步骤中建立的数据名称和数据记录的对应map,获取其对应的数据记录;b42、判别该数据的首和尾对应的2gb块的块号block1和block2;公式如下:block1=record.dataoffset/2gbblock2=(record.dataoffset+record.datalen)/2gb如果block1=block2,则该数据在一个数据块内,使用block1块号对应的内存映射指针,直接读取偏移为(record.dataoffset&0x7fffffff),长度为record.datalen的数据块,异或解密并根据数据类型解析,获得相应的几何数据、纹理数据、三维地形瓦片数据或者倾斜摄影瓦片数据,并返回该几何数据、纹理数据、三维地形瓦片数据或者倾斜摄影瓦片数据;如果block1<block2,则该数据在两个数据块内,使用block1块号和block2块号对应的内存映射指针,直接读取block1块号末尾的偏移为record.dataoffset&0x7fffffff,长度为block2*2gb-record.dataoffset的数据块以及block2块号开头的偏移为0,长度为(record.dataoffset+record.datalen-block2*2gb)的数据块,前后两块合并起来,异或解密并根据数据类型解析,获得相应的几何数据、纹理数据、三维地形瓦片数据或者倾斜摄影瓦片数据,并返回该几何数据、纹理数据、三维地形瓦片数据或者倾斜摄影瓦片数据;b5、当需要查询模型属性时,先通过模型名称找到对应的要素,根据要素查询要素属性记录,根据要素属性记录,访问gkf数据文件,获得模型属性并返回要素属性记录。本发明的有益效果是:1、本发明面向三维模型、三维地形、倾斜摄影模型数据的存储及快速访问需求,提出了基于nosql思路和内存映射技术的一种gkf三维空间数据库的创建和访问方法,提升了三维模型、三维地形、倾斜摄影模型数据的存储安全性及快速访问效率。2、本发明顾及了三维模型、三维地形、倾斜摄影模型数据具有的海量、二进制流化、访问不需要事务支持等特点,比基于关系数据库存储的三维空间数据库,更符合三维模型、三维地形、倾斜摄影模型数据的特点,存储空间利用更紧凑,安全性更好,数据访问效率更高。附图说明图1是本发明gkf空间数据库的创建方法示意图。图2是本发明gkf空间数据库的访问方法示意图。具体实施方式下面结合附图和实例对本发明作进一步说明:实施例1,如图1所示,一种gkf三维空间数据库创建方法,按以下步骤进行:a1、分析创建数据集的类型,如果是三维模型数据集,执行步骤a2;如果是三维地形数据集,执行步骤a3;如果是倾斜摄影数据集,执行步骤a4;a2、创建三维模型数据集类型的gkf三维空间数据库,顺序执行a21-a25;a21、三维模型数据集元数据入库,顺序执行a211-a215;;a211、获取三维模型数据集信息,所述三维模型数据集信息包括版本、uuid、名称、别名、数据制作单位、创建日期、元数据记录数、数据记录数;a212、获取场景图层列表,所述场景图层列表为<图层id、父图层id、图层名称>元组列表;a213、获取三维模型信息,所述三维模型信息包括名称、中心点位置、偏转和缩放值、包围盒最小点、包围盒最大点、所属图层id、lod数据;所述lod数据为<lod级别,mindistance,maxdistance>的元组列表;a214、创建32字节的gkxheader,写入gkx文件。所述gkxheader包括gkf文件标识符、gkf版本、gkf数据集类型、gkf元数据记录数、gkf数据记录数、gkx索引文件压缩后长度、gkx索引文件原始长度和保留字段共8个字段;创建时,gkf文件标识符填充为0x4b4f4547,gkf数据集类型填充为gkf_dataset,所述gkf_dataset值为0x1;a215、将a211-a213三个步骤获得的3条元数据使用aes加密算法,形成三条元数据记录;元数据记录写入gkx文件,加密数据写入gkf文件;a22、三维模型几何数据入库,获得需要入库的所有模型列表,对每个模型执行a221-a222;a221、获取该模型的名称、渲染选项、顶点列表、顶点法线列表、第一套纹理坐标t0、第二套纹理坐标t1、使用的纹理名称等,形成二进制格式的几何数据,并使用异或加密算法,生成加密的二进制几何数据,使用zip算法压缩存储,记录压缩前原始长度和压缩后长度,形成压缩加密的二进制模型数据;所述模型渲染选项包括是否透明、是否含有光照纹理、是否双面显示、水效和玻璃材质选项;a222、创建压缩加密的二进制模型数据对应的数据记录,写入gkx文件,将压缩加密的二进制模型数据顺序写入gkf文件;a23、三维模型纹理数据入库,获得需要入库的所有纹理列表,对每个纹理执行a231-a232;a231、获取该纹理二进制格式数据,并使用异或加密算法,生成加密的二进制纹理数据,使用zip算法压缩存储,记录压缩前原始长度和压缩后长度,形成压缩加密的二进制纹理数据;所述纹理二进制格式为dds格式,支持dxt1、dxt3、dxt5;a232、创建压缩加密的二进制纹理数据对应的数据记录,写入gkx文件,将压缩加密的二进制纹理数据顺序写入gkf文件;a24、三维模型属性数据入库。获得需要入库的所有要素列表,对每一个要素,生成属性数据,将属性数据记录写入gkx文件,将属性数据写入gkf文件;a25、gkx数据记录入库。对gkx文件中的元数据记录和数据记录,使用zip算法压缩存储,并更新压缩前原始长度和压缩后长度;a3、创建三维地形数据集的gkf三维地形数据库,顺序执行a31-a33;a31、三维地形数据集元数据入库。顺序执行a311-a313:a311、获取三维地形数据集信息,所述三维地形数据集信息包括包括版本、uuid、名称、别名、数据制作单位、创建日期、元数据记录数、数据记录数、根瓦片名称、中心点位置、偏转和缩放值、包围盒最小点、包围盒最大点;a312、创建32字节的gkxheader,写入gkx文件。所述gkxheader包括gkf文件标识符、gkf版本、gkf数据集类型、gkf元数据记录数、gkf数据记录数、gkx索引文件压缩后长度、gkx索引文件原始长度和保留字段共8个字段;创建时,gkf文件标识符填充为0x4b4f4547,gkf数据集类型填充为gkf_tileset,所述gkf_tileset值为0x2;a313、将a311步骤获得的三维地形数据集的数据集信息使用aes加密算法进行加密,形成一条元数据记录;元数据记录写入gkx文件,加密数据写入gkf文件;a32、三维地形瓦片数据入库,需要获得需要入库的所有三维地形瓦片列表,对每个三维地形瓦片执行a321-a322;a321、获取该三维地形瓦片的名称、lod信息、高程数据、纹理数据等,形成二进制格式的三维地形瓦片数据,并使用异或加密算法,生成加密的二进制三维地形瓦片数据,使用zip算法压缩存储,记录压缩前原始长度和压缩后长度,形成压缩加密的二进制三维地形瓦片数据;a322、创建压缩加密的二进制三维地形瓦片数据对应的数据记录,写入gkx文件,将压缩加密的二进制三维地形瓦片数据顺序写入gkf文件;a33、gkx数据记录入库。对gkx文件中的元数据记录和数据记录,使用zip算法压缩存储,并记录压缩前原始长度和压缩后长度;a4、创建倾斜摄影模型数据集的gkf倾斜摄影模型数据库,顺序执行a41-a43;a41、倾斜摄影模型数据集元数据入库,顺序执行a411-a414:a411、获取倾斜摄影模型数据集信息,所述倾斜摄影模型数据集信息包括版本、uuid、名称、别名、数据制作单位、创建日期、元数据记录数、数据记录数、中心点位置、偏转和缩放值、包围盒最小点围盒最大点、采集时间、采集平台、建模平台、影像地面分辨率、成图比例尺、飞行高度、正射航向重叠度、正射旁向重叠度、精度评定日期、精度评定点数、精度评定x方向中误差、精度评定y方向中误差、精度评定高程中误差、成果金字塔层级、成果最精细层模型的x方向分辨率、成果最精细层模型的y方向分辨率;a412、获取倾斜摄影模型数据集的根瓦片名称列表;a413、创建32字节的gkxheader,写入gkx文件。所述gkxheader包括gkf文件标识符、gkf版本、gkf数据集类型、gkf元数据记录数、gkf数据记录数、gkx索引文件压缩后长度、gkx索引文件原始长度和保留字段共8个字段;创建时,gkf文件标识符填充为0x4b4f4547,gkf数据集类型填充为gkf_obliquetileset,所述gkf_obliquetileset值为0x3;a414、将a411-a412步骤获得的两条元数据使用aes加密算法进行加密,形成两条元数据记录;数据记录写入gkx文件,加密数据写入gkf文件;a42、倾斜摄影瓦片数据入库,需要获得需要入库的所有倾斜摄影瓦片列表,对每个倾斜摄影瓦片执行a421-a422;a421、获取该倾斜摄影瓦片的名称、lod信息、几何数据、纹理数据等,形成二进制格式的倾斜摄影瓦片数据,并使用异或加密算法,生成加密的二进制倾斜摄影瓦片数据,使用zip算法压缩存储,记录压缩前原始长度和压缩后长度,形成压缩加密的二进制倾斜摄影瓦片数据;a422、创建压缩加密的二进制倾斜摄影瓦片数据对应的数据记录,写入gkx文件,将压缩加密的二进制倾斜摄影瓦片数据顺序写入gkf文件;a43、gkx数据记录入库。对gkx文件中的元数据记录和数据记录,使用zip算法压缩存储,并记录压缩前原始长度和压缩后长度;实施例2,如图2所示,一种gkf三维空间数据库访问方法,按以下步骤进行:b1、读取gkx数据记录文件。顺序执行b211-b215;b211、打开对应的gkx数据记录文件流,读取gkxheader结构,所述gkxheader结构如a314、a312、a413所示;b212、读取并使用zip算法解压缩元数据记录和数据记录,存入buffer中;b213、关闭gkx数据记录文件流;b214、在buffer中读取元数据记录;b215、在buffer中读取数据记录,建立数据名称和数据记录的对应map;b2、创建gkf文件的内存映射环境。顺序执行步骤b221-b224;b221、使用createfile函数以只读模式创建gkf文件的句柄;b222、使用getfilesizeex函数获取gkf文件的大小;b223、使用createfilemapping函数创建gkf文件的内存映射句柄;b224、以2gb块为单位,使用mapviewoffile函数创建gkf文件的内存映射指针列表;一个大小为l的gkf文件,对应的内存映射指针列表项的个数为(l/2gb)的上取整,记为n个;前n-1个的大小为2gb,最后一个的大小为l-(n-1)*2gb;每个2gb块的块号为其在内存映射指针列表中的下标,从第0块到第n-1块,共n块;b3、创建三维场景并动态调度访问;分析gkf三维空间数据库对应的数据集的类型,如果是三维模型数据集,执行步骤b31;如果是三维地形数据集,执行步骤b32;如果是倾斜摄影数据集,执行步骤b33;b31、三维模型数据集的场景创建及动态调度访问,顺序执行步骤b311-b314;b311、读取三维模型数据集元数据。根据第0个内存映射指针,读取并在内存中解密,获得三维模型数据集的数据集信息、场景图层列表、三维模型信息三条元数据;b312、根据三维模型信息元数据,构建网格索引,根据网格索引结构,构建三维模型树;b313、渲染更新时,遍历三维场景树,根据视距、模型大小、配置的模型可视距离,触发模型调用请求,建立模型调用请求优先队列,并按优先队列依次进行i/o调度,读取并生成三维几何模型,通过异步的方式,放入渲染线程中,在下一次渲染帧循环中,更新场景,将场景几何节点结合到对应的场景树叶子节点之下,并更新场景树叶子节点的模型状态,完成几何模型的动态调度;b314、在三维场景树遍历过程中,分析纹理加载情况,动态引发纹理调用请求,建立纹理调用请求优先队列,并按优先队列依次进行i/o调度,读取并生成纹理,将纹理添加并更新到对应模型中,完成纹理的动态调度;b32、三维地形数据集的场景创建及动态调度访问,顺序执行步骤b321-b323;b321、根据第0个内存映射指针,读取并在内存中解密,获得三维地形数据集的数据集信息;b322、根据三维地形数据集的数据集信息,以及根瓦片名称,以及瓦片内置的三维地形金字塔索引,构建单根节点的三维地形瓦片树;b323、渲染更新时,遍历单根节点的三维地形瓦片树,根据视距、三维地形瓦片lod配置,触发三维地形瓦片调用请求,建立三维地形瓦片调用请求优先队列,并按优先队列依次进行i/o调度,读取并生成三维地形瓦片,通过异步的方式,放入渲染线程中,在下一次渲染帧循环中,更新场景,将三维地形瓦片结合到对应的三维地形瓦片树叶子节点之下,完成三维地形瓦片的动态调度;b33、倾斜摄影数据集的场景创建及动态调度访问,顺序执行步骤b331-b333;b331、根据第0个内存映射指针,读取并在内存中解密,获得倾斜摄影数据集的数据集信息、根瓦片列表;b332、根据倾斜摄影数据集的数据集信息,以及根瓦片列表,以及瓦片内置的倾斜摄影瓦片金字塔索引,构建多根节点的倾斜摄影瓦片树;b333、渲染更新时,遍历多根节点的倾斜摄影瓦片树,根据视距、倾斜摄影瓦片lod配置等因素,触发倾斜摄影瓦片调用请求,建立倾斜摄影瓦片调用请求优先队列,并按优先队列依次进行i/o调度,读取并生成倾斜摄影瓦片,通过异步的方式,放入渲染线程中,在下一次渲染帧循环中,更新场景,将倾斜摄影瓦片结合到对应的倾斜摄影瓦片树叶子节点之下,完成倾斜摄影瓦片的动态调度。b4、读取gkf数据文件,顺序执行步骤b41-b42;b41、根据动态调用请求的数据名称,通过b215步骤中建立的数据名称和数据记录的对应map,获取其对应的数据记录;b42、判别该数据的首和尾对应的2gb块的块号block1和block2;公式如下:block1=record.dataoffset/2gbblock2=(record.dataoffset+record.datalen)/2gb如果block1=block2,则该数据在一个数据块内,使用block1块号对应的内存映射指针,直接读取偏移为(record.dataoffset&0x7fffffff),长度为record.datalen的数据块,异或解密并根据数据类型解析,获得相应的几何数据、纹理数据、三维地形瓦片数据或者倾斜摄影瓦片数据,并返回该几何数据、纹理数据、三维地形瓦片数据或者倾斜摄影瓦片数据;如果block1<block2,则该数据在两个数据块内,使用block1块号和block2块号对应的内存映射指针,直接读取block1块号末尾的偏移为record.dataoffset&0x7fffffff,长度为block2*2gb-record.dataoffset的数据块以及block2块号开头的偏移为0,长度为(record.dataoffset+record.datalen-block2*2gb)的数据块,前后两块合并起来,异或解密并根据数据类型解析,获得相应的几何数据、纹理数据、三维地形瓦片数据或者倾斜摄影瓦片数据,并返回该几何数据、纹理数据、三维地形瓦片数据或者倾斜摄影瓦片数据;b5、当需要查询模型属性时,先通过模型名称找到对应的要素,根据要素查询要素属性记录,根据要素属性记录,访问gkf数据文件,获得模型属性并返回要素属性记录。以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思做出诸多修改和变化。因此,凡本
技术领域:
中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。当前第1页12