一种面向嵌入式的三维空间数据存储方法与流程

文档序号:11864685阅读:436来源:国知局
一种面向嵌入式的三维空间数据存储方法与流程

本发明涉及一种三维空间数据的存储方法,具体是一种在嵌入式终端上存储三维空间数据的方法。



背景技术:

随着地理信息技术的进步和社会发展的需要,人们对三维GIS(Geographic Information System,地理信息系统)的渴求越来越强烈:“数字地球”Google Earth让人们在计算机里看到了一个“逼真化”、“立体化”的世界,并从此改变了人与信息的交互方式。三维GIS成为当今世界最热门的话题。三维GIS几乎可以包含完整的空间信息,为人们更好地表达和理解现实世界提供了更多选择。

移动GIS是基于可移动环境下的地理信息系统,它运行于移动终端上,具有桌面GIS的主要功能,并且比桌面GIS更加灵活,比较适合外业操作。随着移动设备的普及,移动嵌入式设备上的三维GIS应用也越来越广泛。Android平台具有开源性好、开发效率较高等优点,并且大屏、多点触摸、手势引导大大增强了用户的体验,受到了众多移动嵌入式设备开发者和厂商的青睐。

由于嵌入式设备资源有限,在采用Android平台的移动嵌入式设备上实现三维GIS应用,需要考虑软件系统的空间数据调度和读取效率的问题。

嵌入式终端存储空间数据主要有两种方式:文件存储和数据库存储。用文件存储空间数据,可以根据实际的软硬件需求来定义适合自己的数据格式,可以节省存储空间,方便数据拷贝,但需要自行设计和定义空间数据格式,当数据有更改时较为麻烦,且不支持空间数据索引。数据库存储实现起来较为方便,易于管理,支持空间索引,但在嵌入式设备中,运行大型的数据库管理系统会浪费宝贵的内存资源。因此,对于嵌入式平台下的GIS开发,适合选择较为轻便的数据库产品。Android平台下内嵌数据库为轻量级的SQLite数据库,虽然SQLite源码本身含有支持快速索引空间数据的R*树模块,但此模块默认关闭,Android API并未提供相应接口,因此Android平台下的数据库接口并不支持空间数据索引。



技术实现要素:

发明目的:针对现有技术中存在的问题,本发明公开了一种面向嵌入式的三维空间数据存储方法,该方法利用面向对象的思想组织三维空间数据,并支持R*树索引,能够快速检索三维空间数据。

技术方案:本发明公开了一种面向嵌入式的三维空间数据存储方法,包括如下步骤:

一种面向嵌入式的三维空间数据存储方法,其特征在于,包括如下步骤:

(1)开启SQLite源码R*树索引模块并嵌于Android客户端应用程序下;

(2)设计R*树数据库接口,实现Android客户端数据库对R*树检索的支持;

(3)在Android客户端建立R*树索引表和普通数据表;

(4)建立三维盒状模型,生成obj模型文件;

(5)解析三维obj模型文件,设计点结构、面结构和体结构;

(6)计算三维空间数据的最小外包矩形,将最小外包矩形数据存储于R*树索引表,三维空间数据的几何数据转化为BLOB数据,与属性数据共同存储于普通数据表。

进一步地,步骤(2)包括如下步骤:

(21)编写带有本地声明的用于新建、插入、读取数据的java类方法;

(22)利用编译器编译java文件,生成.h文件;

(23)实现.h文件中的方法;

(24)生成动态链接库,存放于Android工程的lib文件下。

进一步地,步骤(3)中R*树索引表中含有五个字段,第一个字段为数据行ID,其他四个字段存储最小外包矩形的四个参数;所述数据行ID为整形数据,用于和普通数据表关联;所述最小外包矩形的四个参数为最大横坐标值、最小横坐标值、最大纵坐标值、最小纵坐标值。

进一步地,步骤(3)中普通数据表含有三个字段,第一个字段为与R*树索引表对应的数据行ID,第二个字段为BLOB字段,第三个字段为存储属性数据的属性字段。

进一步地,步骤(4)中的三维盒状模型包括二维地图数据和高度数据。

进一步地,步骤(5)中,点结构包含X坐标值、Y坐标值、Z坐标值;所述面结构包含两个数组,其中一个数组存储该面的所有顶点集合,另一个数组存储该面的顶点索引信息;所述体结构中含有一个面结构的数组,存储组成该体的所有面数据。

进一步地,步骤(6)包含如下步骤:

(71)计算三维空间数据的最小外包矩形数据;

(72)最小外包矩形数据插入索引表;

(73)三维空间几何数据按照模型总面数、面点数、点坐标、面索引总数、面索引的规则转化为BLOB数据类型;

(74)BLOB数据和属性数据存储在普通数据表中的BLOB字段和属性字段中。

有益效果:与现有技术相比,本发明公开的面向嵌入式的三维空间数据存储方法具有以下优点:1、在Android客户端建立R*树索引表存储最小外包矩形数据,可以快速高效地搜索空间数据;2、三维空间几何数据转化为BLOB数据进行存储,方便数据管理,提高数据读取速度;3、对模型表面进行分类,易于数据管理和方便后期的图形绘制。

附图说明

图1是本发明的整体框架图;

图2是建筑物底图最小外包矩形示意图;

图3是建筑物几何数据转化为BLOB类型的转化规则。

具体实施方式

下面结合附图和具体实施方式,进一步阐明本发明。

本发明提供一种面向嵌入式的三维空间数据存储方法,以三维建筑物数据为例,具体包括以下过程:

步骤1、SQLite源代码开启R*索引模块并嵌于Android应用程序下;

步骤2、设计R*树数据库接口,实现Android客户端数据库对R*树检索的支持;具体包括如下步骤:

(21)编写本地java类DataBaseJNI、QueryResultJNI、StmtJNI和对应的java类DataBase、QueryResult、Stmt,它们含有数据表的建立、读入和读出数据等操作;

(22)编译成对应的.h接口;

(23)实现.h接口

(24)生成动态链接库libSqlite3_rtree.so,存于Android工程目录的lib文件夹下;

步骤3、在Android客户端新建两个数据表,一个是R*树索引表,一个是普通数据表;

其中R*索引表包含五个字段:一个整形数据为数据行ID,用于和普通数据表关联;其他四个字段为float型数据,用于存储建筑物底面轮廓的最小外包矩形MBR(Minimal Bounding Rectangle)数据,四个字段分别存储最大横坐标值Xmax、最小横坐标值Xmin、最大纵坐标值Ymax和最小纵坐标值Ymin,如图2所示;普通数据表包含三个字段,第一个是整形字段,与索引表相对应的数据行ID;第二个是BLOB字段,用于存储建筑物对应的二进制数据流;第三个是属性字段,包括若干个文本、浮点字段用于存储属性数据,比如建筑物的面积(浮点型)、周长(浮点型)、名字(文本)等。

步骤4、收集建筑物二维地图数据,如shp文件数据,采用ArcGIS软件对数据进行预处理,删除围墙、道路、植被等信息、仅保留建筑物信息;对建筑物数据进行拓扑检查,完善出现断点、不封闭的面状数据;通过楼层数乘以3米(一层楼的高度)估算得到建筑物的高度,并将此高度通过一个浮点型字段添加到shp文件中;通过建模软件SketchUp对二维数据在高度方向上拉伸建立三维盒状模型,该建筑物模型不含屋顶,最后生成obj模型文件;这里shp文件中属性的类型和个数决定了步骤3中普通数据表属性字段具体是文本类型还是浮点类型以及属性字段的个数;

步骤5、Android客户端解析obj模型文件,设计点结构、面结构和体结构;obj模型文件是一种类似txt格式的文件,存储了建筑物各个表面的顶点坐标,以及点是如何构成面的点索引信息。Obj文件中一个完整的建筑物数据以字母g开头,读到字母g开头的行,则说明上一个建筑物读取完毕,接下来是另一个建筑物数据;顶点以字母v开头,接着是顺序的三个X、Y、Z坐标,将顶点信息依次读到点结构体中;顶点如何构成面的索引信息以字母f开头,比如f开头的行前面有四个顶点,f行为1 2 3 4,则该面为四个顶点依次相连构成,将这些索引信息读到面结构体的索引数组中,该面的所有顶点存储到顶点集合中;读到下一个g开头行时,对建筑物体数据进行封装,新建体对象,将所有面数据存储于该体的面数组中。

点结构中含三个属性变量:X坐标值、Y坐标值、Z坐标值。面结构中含两个数组,一个数组存储该面的所有顶点集合,另一个数组存储这些点是如何组成该面的顶点索引信息。体结构中含有一个面结构的数组,存储组成该体的所有面数据。其中面结构又分成三种类型:顶面、底面和侧面,如果该面的所有顶点的Z坐标值全为0,则该面为底面;如果该面的所有顶点的Z坐标值全不为零且均为最大值,则该面为顶面;否则为侧面。对表面进行分类易于数据管理和方便后期的图形绘制,因为后期三维渲染可以以面为绘制单元,不同的面可能会有不同的绘制策略,比如如果顶面需要绘制颜色,则只需要在顶面结构体中加一个颜色变量,并赋值相应颜色即可,其他面以此类推;

步骤6、利用建筑物底面数据计算底面轮廓的最小外包矩形,建筑物数据是沿高度方向对底面的拉伸,不含屋顶数据,因此建筑物平面方向上的最小外包矩形即底面轮廓的最小外包矩形。建筑物对象转化为BLOB类型的转化规则如图3所述,直到所有面循环完毕。按照这一转化规则将建筑物对象转化为二进制集合;

步骤7、利用sql语句将最小外包矩形数据插入索引数据表,将二进制集合数据读入普通数据表对应的BLOB字段,建筑物的属性数据读入普通数据表的属性字段;

步骤8、重复步骤5-步骤7,直到将建筑物对象数据遍历完毕。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1