韦 波,王熙宇,杨东兴
(1.桂林理工大学广西矿冶与环境科学实验中心,广西 桂林 541004;2.桂林理工大学测绘地理信息学院,广西 桂林 541004)
Oracle Spatial三维模型存储与可视化
韦 波1,2,王熙宇1,2,杨东兴2
(1.桂林理工大学广西矿冶与环境科学实验中心,广西 桂林 541004;2.桂林理工大学测绘地理信息学院,广西 桂林 541004)
论述Oracle Spatial三维空间数据模型,以存储表面的方式设计了三维模型的数据库存储方案,同时引入Hibernate对象持久化技术并自行设计开发了SDO_GEOMETRY映射类,结合Java 3D实现了三维模型的可视化。结果表明构建的存储与可视化方案可行。
Oracle Spatial;三维空间数据存储;可视化
Oracle Spatial作为对象-关系型数据库的典型代表,一直是地理信息系统(GIS)研究与应用的主要对象之一。王云帆探讨了Oracle Spatial的特点,并应用数据库技术实现了空间数据管理与操作[1];卢廷军等以Oracle Spatial为工具,建立了海量栅格数据的空间索引[2];Bianca等提出了Oracle Spatial 3D点云数据的四叉树索引方法[3];马奎等在.NET环境下,基于OO4O核心实现了对Oracle Spatial空间数据的互操作[4];邬群勇等使用Oracle Spatial SDO_GEOMETRY抽象几何数据类型存储环境空间数据,实现了OLAP和GIS的完全集成[5];钱华明、戴建旺、高光大、冯兴杰等分别应用Oracle Spatial建立了WebGIS车辆监控系统[6]、土地调查国家级数据库[7]、铁矿资源潜力数据库[8]、航油公司EAM系统[9]。
虽然目前对Oracle Spatial的研究与应用取得了较多的成果,但主要集中于二维空间数据方面。Oracle从11g版本开始支持对三维空间数据的存储与管理,因此,本文结合Hibernate对象持久化和Java 3D,讨论Oracle Spatial的三维空间数据存储与可视化技术。
1.三维存储模型
如图1所示,表面、形体和组合类型是三维存储模型中所特有的,在二维存储模型中不支持。表面和构成形体的表面目前只能是三维平面,不能是三维曲面。组合类型不同于二维的复合线串、复合多边形等复合类型[1],组合类型只能是表面、形体等同类型三维对象间的组合,复合类型在三维存储模型中不支持。多边形类型包括含洞的多边形。集合可以是点、线、多边形的集合,也可以是表面、形体的集合,包括由同类型对象构成的(同质)集合和由不同类型对象构成的(异质)集合。
图1 Oracle Spatial三维存储模型
2.SDO_GEOMETRY三维对象存储
SDO_GEOMETRY在Oracle Spatial中被定义为一个对象类型,共包含5个属性:
与二维版本相比,SDO_GEOMETRY及其5个属性的定义形式均没有发生变化,只是将它们扩展到三维的应用环境。
图2中多边形的SDO_GEOMETRY二维、三维空间存储表示如下,可对比看出二者的明显异同。
图2 多边形示例
图3为Google Earth上的两个建筑物三维模型,其中一个为教堂(右下角),而另一个为办公大楼。
图3 3D模型实例
1.总体框架
总体分为3层:数据库层、持久化层、可视化层,如图4所示。数据库层使用Oracle Spatial存储三维模型数据。持久化层通过对象-关系映射(object-relation mapping,ORM),处理面向对象和面向关系二者之间的映射,实现模型的面向对象操作,采用Hibernate技术实现。可视化层由Java 3D构建虚拟场景,完成三维模型的显示。
引入Hibernate的原因在于当将空间对象从数据库重新加载至内存时,由于Java、C++、C#等高级程序设计语言缺乏与SDO_GEOMETRY直接映射的数据类型,不能直接构建空间对象对应的类,进而不能直接实现面向对象的操作;而Hibernate则能够方便而快速地建立持久化层和ORM[10],解决对象持久化问题,实现对空间对象的面向对象操作。
图4 三维模型可视化总体框架
2.数据库表设计与数据导入
从Google Earth位置工具栏可以看出,教堂模型共包括15个屋顶和48个墙面,而办公大楼模型共包括14个屋顶和131个墙面。如果将模型整体存储,会造成SDO_GEOMETRY的坐标数据太长,不方便模型的解析。因此采用分解策略,设计两个数据库表分别用于存储模型的屋顶和墙面的表面数据。表1为屋顶的表结构,表2为墙面的表结构。
表1 屋顶表(BUILDING_ROOF_3D)结构
表2 墙面表(BUILDING_FACADE_3D)结构
由于三维模型数据量大,采用SDO_GEOMETRY构造函数导入数据的方法并不可行。本文首先利用Google Earth将两个建筑物的墙面和屋顶的表面逐一转换成KML文件,然后利用Oracle Spatial的FROM_KMLGEOMETRY函数编程将KML格式的三维数据导入到两个数据库表中。
3.三维模型Hibernate POJO
POJO(plain old java objects,简单的Java对象),是Hibernate的一种持久化类。通常,一个持久化类和一个表对应,POJO的字段和属性则分别与表的字段和记录相对应。因此,需要创建两个POJO:BuildingRoof3d和BuildingFacade3d类,分别与表BUILDING_ROOF_3D和BUILDING_FACADE_3D相对应。
以表BUILDING_ROOF_3D为例,根据其表结构(限于篇幅,以字段ROOF_ID、GEOM为例,下同),创建的BuildingRoof3d类为:
4.Hibernate POJO ORM文件
将Oracle表数据类型映射为Java数据类型,如NUMBER映射为Long,需要建立它们之间的映射关系。Hibernate的ORM文件为一个XML文件,一个POJO对应一个ORM文件。BuildingRoof3d类的ORM文件(BuildingRoof3d.hbm.xml)为:
5.SDO_GEOMETRY映射类
Hibernate POJO和ORM文件都使用了一个J3D_ GeometryType类作为SDO_GEOMETRY的映射类型,J3D_GeometryType类并不是Java定义的,而需要自行设计和开发。本文基于Oracle Spatial提供的JGeometry和J3D_Geometry类,实现了该类,创建的主要步骤如下。
(1)定义Hibernate方言类
该方言类为Hibernate Oracle10gDialect方言类的子类,在其构造函数中注册SDO_GEOMETRY为
(2)定义Java映射类
即J3D_GeometryType类。Hibernate提供了UserType接口用于用户实现自定义的Java映射类。自定义的Java映射类包含一个Oracle Spatial J3D_ Geometry类实例,并且还必须实现UserType接口中的11个方法。其中的nullSafeGet()方法、nullSafe-Set()方法实现的关键语句如下:
nullSafeGet()方法负责从SDO_GEOMETRY读取数据存储到J3D_Geometry实例中,nullSafeSet()方法则负责将J3D_Geometry实例存储到SDO_GEOMETRY中,具体实现借助了Oracle Spatial JGeometry类实例作为SDO_GEOMETRY和J3D_Geometry实例数据转换的中间对象。
6.模型Java 3D可视化
可视化大致分两步:首先从数据库中获取三维模型的数据,然后生成模型的Java 3D对象。
获取三维模型数据,以面向对象的方式进行。如获取纹理、坐标的程序为(event为BuildingRoof3d或BuildingFacade3d类对象):
坐标获取后需要先利用SDO_GEOMETRY的SDO_ELEM_INFO属性对其进行解析,然后将其传递给Java 3D。
构建Java 3D对象,即创建三维形体Shape3D对象,包括定义它的几何信息和外观。几何信息使用GeometryInfo类设置,外观主要是设置纹理贴图,使用Appearance类实现。Shape3D对象创建后,将其加入到Java 3D的TransformGroup节点中。
图5为可视化后的效果图,与图3模型三维效果一致,表明构建的存储与可视化方案可行。
图5 Java 3D模型可视化效果
Oracle Spatial通过增加对表面、形体等三维空间对象类型的支持,从对二维空间数据的存储扩展到对三维空间数据的存储。本文通过存储两个三维模型表面的方式设计和实践了Oracle Spatial的三维存储;同时引入Hibernate对象持久化技术,结合Java 3D实现了三维模型的可视化,结果表明构建的存储与可视化方案可行。通过自行设计开发的SDO_ GEOMETRY映射类,实现了对包含SDO_GEOMETRY数据类型字段的Oracle数据库表的对象-关系映射,解决了其建立对应Hibernate POJO的问题,从而实现了对数据库中三维模型的面向对象操作,也为实现对Oracle Spatial中二维或三维空间对象的面向对象操作(加载、保存、更新、删除、查询等)提供了一种可行的思路。
[1] 王云帆.Oracle Spatial空间数据存储管理技术的应用研究[J].测绘通报,2011(6):76-79.
[2] 卢廷军,黄明.海量栅格数据空间索引与存储的研究[J].测绘通报,2010(10):24-26.
[3] BIANCA S,MO HAMMAD M,DEBRA F L,et al.Octree-based Indexing for 3D Pointclouds within an Oracle Spatial DBMS[J].Computers&Geosciences,2013(51):430-438.
[4] 马奎,李宏伟,李勤超,等..NET下基于OO4O核心的Oracle Spatial空间数据互操作[J].计算机应用,2009,29(S1):205-208.
[5] 邬群勇,刘梦鑫,李细杰,等.面向环境数据集的Spatial OLAP系统集成[J].地球信息科学学报,2013,15(1):90-96.
[6] 钱华明,施丽娟,王雯升.WebGIS车辆监控系统的空间数据存储技术研究[J].计算机工程与科学,2009,31(4):124-129.
[7] 戴建旺,白晓飞.第二次全国土地调查国家级数据库管理系统关键技术研究[J].中国土地科学,2010,24(6):74-80.
[8] 高光大,王永志,张道勇,等.基于GIS和SOA的我国铁矿资源潜力数据库开发与应用[J].吉林大学学报:地球科学版,2010,40(6):1515-1520.
[9] 冯兴杰,许亚娟,王辉.基于Oracle Spatial技术的地理信息管理与优化[J].计算机工程与设计,2011,32(5):1706-1709.
[10] 王海涛,贾宗璞.基于Struts和Hibernate的Web应用开发[J].计算机工程,2011,37(9):112-114.
《数字测图原理与技术》(第二版)内容简介
本书由杨晓明等编著,系统地介绍了数字测图的理论、技术和方法。其主要内容包括:数字测图概论、数字测图的数学基础、硬件设备、图根控制测量、野外数据采集、计算机绘图原理、数字测图内业、地图数字化、数字测图质量控制、数字测图成果的应用、数字地籍测绘、数字地下管线图测绘等。
本书为高等学校测绘工程、GIS及相关专业的教材,亦可供相关技术人员学习参考。
本书为16开本,240页,定价34.00元。测绘出版社2014年10月出版。
Storage and Visualization of 3D Model in Oracle Spatial
WEI Bo,WANG Xiyu,YANG Dongxing
P208
B
0494-0911(2014)11-0088-04
2013-11-18
广西自然科学基金(2012GXNSFGA060001;桂科自0991248);桂林理工大学博士基金(GUT1996015)
韦 波(1974—),男,瑶族,广西荔浦人,博士,副教授,主要研究方向为空间信息处理理论与方法。
韦波,王熙宇,杨东兴.Oracle Spatial三维模型存储与可视化[J].测绘通报,2014(11):88-91.
10.13474/j.cnki.11-2246.2014.0371