发明内容
本发明所要解决的技术问题是针对现有技术的不足,提供将GeoJSON数据格式转换为三维GLB格式的方法、装置和设备。
本发明解决上述技术问题的技术方案如下:
一种将GeoJSON数据格式转换为三维GLB格式的方法,所述方法包括:
加载配置文件;
加载待转换GeoJSON数据,将所述待转换GeoJSON数据根据所述配置文件进行转换,生成中间数据,所述中间数据包括对所述待转换GeoJSON数据的区域分类数据和每一区域的高度数据;
将所述中间数据利用三角剖分算法,得到三维GLB格式文件。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步地,所述配置文件包括待转换文件路径、输出文件路径、楼层高度属性名、楼层单位高度以及楼层高度分类,所述楼层高度属性名用于识别区域楼层高度的属性名称,所述楼层单位高度用于对区域楼层高度进行倍数增加,所述楼层高度分类用于对不同高度的楼层进行分类。
进一步地,所述将所述待转换GeoJSON数据根据所述配置文件进行转换,生成中间数据,具体包括:
在所述待转换GeoJSON数据中进行检索后,得到所述待转换GeoJSON数据中的所述楼层高度属性名,并利用所述楼层高度属性名对所述待转换GeoJSON数据进行区域划分,得到多个区域数据;
按照所述楼层高度分类对所述区域数据进行分类,得到所有区域数据所属所述楼层高度分类。
进一步地,所述将所述中间数据利用三角剖分算法,得到三维GLB格式文件,具体包括:
对每一个区域数据中的多边形数据进行三角剖分计算后,得到三角面组合,所述三角面组合包括底面和顶面,其中所述底面是高度为零的面,所述顶面为所述区域数据的楼层高度;
根据所述区域数据中的多边形数据中的各点位信息,得到所述区域数据的侧面;
分别对所述底面、顶面和侧面生成坐标,并进行贴图后,得到所述三维GLB格式文件。
进一步地,所述根据所述区域数据中的多边形数据中的各点位信息,得到所述区域数据的侧面,具体包括:
获取所述多边形中的各个点位,按照预设顺序,将每一个点位和它下一个点位,以及所述每一个点位的高度值和它下一个点位的高度值构成四边形,将所述四边形划分为两个三角形,直到所述多边形中所有点位计算完成后,得到所述区域数据的侧面。
本方法发明的有益效果是:提出了一种将GeoJSON数据格式转换为三维GLB格式的方法,包括加载配置文件;加载待转换GeoJSON数据,将所述待转换GeoJSON数据根据所述配置文件进行转换,生成中间数据,所述中间数据包括对所述待转换GeoJSON数据的区域分类数据和每一区域的高度数据;将所述中间数据利用三角剖分算法,得到三维GLB格式文件。本发明实现了将描述二维地形或者建筑区域的GeoJSON文件转换为三维地形或者建筑的GLB文件,提高了地理数据在ThingJS中的渲染速度。
本发明解决上述技术问题的另一技术方案如下:
一种将GeoJSON数据格式转换为三维GLB格式的装置,所述装置包括:
加载模块,用于加载配置文件;
分区模块,用于加载待转换GeoJSON数据,将所述待转换GeoJSON数据根据所述配置文件进行转换,生成中间数据,所述中间数据包括对所述待转换GeoJSON数据的区域分类数据和每一区域的高度数据;
转换模块,用于将所述中间数据利用三角剖分算法,得到三维GLB格式文件。
进一步地,所述配置文件包括待转换文件路径、输出文件路径、楼层高度属性名、楼层单位高度以及楼层高度分类,所述楼层高度属性名用于识别区域楼层高度的属性名称,所述楼层单位高度用于对区域楼层高度进行倍数增加,所述楼层高度分类用于对不同高度的楼层进行分类。
进一步地,所述分区模块,具体用于在所述待转换GeoJSON数据中进行检索后,得到所述待转换GeoJSON数据中的所述楼层高度属性名,并利用所述楼层高度属性名对所述待转换GeoJSON数据进行区域划分,得到多个区域数据;
按照所述楼层高度分类对所述区域数据进行分类,得到所有区域数据所属所述楼层高度分类。
此外,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述技术方案中任一项所述的将GeoJSON数据格式转换为三维GLB格式的方法的步骤。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述技术方案中任一项所述的将GeoJSON数据格式转换为三维GLB格式的方法的步骤。
本发明附加的方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明实践了解到。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
如图1所示,本发明实施例所述的一种将GeoJSON数据格式转换为三维GLB格式的方法,包括以下步骤:
110、加载配置文件。
120、加载待转换GeoJSON数据,将所述待转换GeoJSON数据根据所述配置文件进行转换,生成中间数据,所述中间数据包括对所述待转换GeoJSON数据的区域分类数据和每一区域的高度数据。
130、将所述中间数据利用三角剖分算法,得到三维GLB格式文件。
其中,所述配置文件包括待转换文件路径、输出文件路径、楼层高度属性名、楼层单位高度以及楼层高度分类,所述楼层高度属性名用于识别区域楼层高度的属性名称,所述楼层单位高度用于对区域楼层高度进行倍数增加,所述楼层高度分类用于对不同高度的楼层进行分类。
进一步地,步骤120中具体包括:
在所述待转换GeoJSON数据中进行检索后,得到所述待转换GeoJSON数据中的所述楼层高度属性名,并利用所述楼层高度属性名对所述待转换GeoJSON数据进行区域划分,得到多个区域数据。
按照所述楼层高度分类对所述区域数据进行分类,得到所有区域数据所属所述楼层高度分类。
应理解,本实施例中待转换GeoJSON数据都是基于地理区域中的建筑区域的二维地图数据。
进一步地,步骤130中具体包括:
131、对每一个区域数据中的多边形数据进行三角剖分计算后,得到三角面组合,所述三角面组合包括底面和顶面,其中所述底面是高度为零的面,所述顶面为所述区域数据的楼层高度。
132、根据所述区域数据中的多边形数据中的各点位信息,得到所述区域数据的侧面。
133、分别对所述底面、顶面和侧面生成坐标,并进行贴图后,得到所述三维GLB格式文件。
进一步地,步骤132中具体包括:
获取所述多边形中的各个点位,按照预设顺序,将每一个点位和它下一个点位,以及所述每一个点位的高度值和它下一个点位的高度值构成四边形,将所述四边形划分为两个三角形,直到所述多边形中所有点位计算完成后,得到所述区域数据的侧面。
应理解,加载配置文件,其中,配置文件为YML格式,读取后以备后过程使用。配置文件中主要包括待转换文件路径、输出文件路径、楼层高度属性名、楼层单位高度以及楼层高度分类。
其中,楼层高度属性名主要用于识别GeoJSON中定义区域楼层高度的属性名称;楼层单位高度用于对原始高度进行相应倍数增加;楼层高度分类用于对不同高度的楼层进行分类,方便渲染时区分不同的图层进而渲染出不同的样式。
读取GeoJSON数据,加载需要转换的GeoJSON数据。按照配置楼层高度属性名数据,在已有数据进行中进行检索查询出每块区域的高度,并使用此高度按照楼层高度分类对区域进行分类。分类好的区域与高度数据作为中间数据,进行后续处理。
制作三维数据,对分类好的数据中的每个多边形数据使用EARCUT算法进行三角剖分计算,将多边形转换成三角面组合,高度为零的面为底面,高度为多边形设置高度的面为顶面。对分类好的数据中每个多边形数据按顺时针计算,每个点位和下一个点位组成一个组合,在加上高度可以获得四个点位,由此四个点为组成的四边形,手动划分成两个三角形。逐个计算后组成侧面。侧面生成四边形的时候会直接生成UV贴图的坐标,顶面和底面按照包围盒计算UV贴图坐标。输出数据,并保存为GLB格式文件。
应理解,三角剖分算法定义:假设V是二维实数域上的有限点集,边e是由点集中的点作为端点构成的封闭线段,E为e的集合。那么该点集V的一个三角剖分T=(V,E)是一个平面图G,该平面图满足条件:1、除了端点,平面图中的边不包含点集中的任何点。2、没有相交边。边和边没有交叉点。3、平面图中所有的面都是三角面,且所有三角面的合集是散点集V的凸包。凸包的概念:用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点。
在实际中运用的最多的三角剖分是Delaunay三角剖分,它是一种特殊的三角剖分。先从Delaunay边说起:Delaunay边:假设E中的一条边e(两个端点为a,b),e若满足下列条件,则称之为Delaunay边:存在一个圆经过a,b亮点,圆内(注意是园内,圆上最多三点共圆)不含点集V中任何其他的点,这一特性又称空圆特性。Delaunay三角剖分:如果点集V的一个三角剖分T只包含Delaunay边,那么该三角剖分称为Delaunay三角剖分。Delaunay三角剖分的准则,要满足Delaunay三角剖分的定义,必须符合空圆特性:Delaunay三角网是唯一的(任意四点不能共圆),在Delaunay三角形网中任一三角形的外接圆范围内不会有其它点存在。
ThingJS是物联网三维可视化开发平台,采用JavaScript开发语言,主要面向前端程序员和实施人员。ThingJS平台让传统企业无需组建3D可视化开发团队,也能开发3D可视化应用。包括:场景搭建工具,CityBuilder:聚焦城市的3D地图搭建工具,主要用于搭建带有3D建筑的三维城市场景。CityBuilder支持Geojson、CSV、Excel格式的空间数据,同时支持3D建筑、动效路网的特效图层样式。CityBuilder无缝集成园区场景,支持从城市到园区、房间、设备的逐级下钻,可以无缝对接园区的业务逻辑。
CampusBuilder:3D园区搭建工具,主要用于搭建3D物联网场景。使用CampusBuilder搭建的场景,无需开发即具备鸟瞰、行走等于3D场景互动的能力。
开发工具:ThingJS:面向物联网的三维可视化开发平台。ThingJS提供3D开发API、开发文档和视频教程,熟悉JavaScript、HTML+CSS等前端知识即可上手开发。3D模型库:ThingDepot:积累有上万种模型,涵盖数十个物联网行业的各类3D模型,例如智慧城市、能源、医疗、零售、制造、农业、公共事业、物流运输、金融服务、智能家居等。同时ThingDepot也支持用户上传自有模型自用或共享。
基于上述实施例所提出的一种将GeoJSON数据格式转换为三维GLB格式的方法,包括加载配置文件;加载待转换GeoJSON数据,将所述待转换GeoJSON数据根据所述配置文件进行转换,生成中间数据,所述中间数据包括对所述待转换GeoJSON数据的区域分类数据和每一区域的高度数据;将所述中间数据利用三角剖分算法,得到三维GLB格式文件。本发明实现了将描述二维地形或者建筑区域的GeoJSON文件转换为三维地形或者建筑的GLB文件,提高了地理数据在ThingJS中的渲染速度。
如图2所示,一种将GeoJSON数据格式转换为三维GLB格式的装置,所述装置包括:
加载模块,用于加载配置文件。
分区模块,用于加载待转换GeoJSON数据,将所述待转换GeoJSON数据根据所述配置文件进行转换,生成中间数据,所述中间数据包括对所述待转换GeoJSON数据的区域分类数据和每一区域的高度数据。
转换模块,用于将所述中间数据利用三角剖分算法,得到三维GLB格式文件。
进一步地,所述配置文件包括待转换文件路径、输出文件路径、楼层高度属性名、楼层单位高度以及楼层高度分类,所述楼层高度属性名用于识别区域楼层高度的属性名称,所述楼层单位高度用于对区域楼层高度进行倍数增加,所述楼层高度分类用于对不同高度的楼层进行分类。
进一步地,所述分区模块,具体用于在所述待转换GeoJSON数据中进行检索后,得到所述待转换GeoJSON数据中的所述楼层高度属性名,并利用所述楼层高度属性名对所述待转换GeoJSON数据进行区域划分,得到多个区域数据。
按照所述楼层高度分类对所述区域数据进行分类,得到所有区域数据所属所述楼层高度分类。
此外,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述技术方案中任一项所述的将GeoJSON数据格式转换为三维GLB格式的方法的步骤。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述技术方案中任一项所述的将GeoJSON数据格式转换为三维GLB格式的方法的步骤。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括是电载波信号和电信信号。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。