作者:姜尔


一、技术思路

用于将三维高斯泼溅数据(*.ply)生成为S3M 3.01瓦片数据。

参数说明

参数名

参数释义

参数类型

选择文件夹

选择源数据所在文件夹。指定文件夹下所有3D高斯数据(*.ply)都会参与运算。

指定文件夹下每个子目录将作为一个分组,没有子目录的整个文件夹是一个分组。

String

瓦片名称:

(可选)

设置结果瓦片数据的名称,默认值为pointCloudCacheResult。

String

存储路径:

设置结果瓦片数据的存储路径。

String

金字塔剖分类型:

(可选)

设置结果瓦片数据的金字塔剖分类型,可选项包括四叉树和八叉树,默认值为四叉树(QuadTree)。

PyramidSplitType

顶点优化方式:

(可选)

设置结果瓦片数据的顶点优化方式。

  • 不压缩:不对数据进行压缩。
  • Draco压缩:基于一定算法对数据进行压缩处理,可以显著减少数据量,提升数据加载体验。
  • MeshOpt压缩:采用一系列算法来减少数据网格复杂性,从而减少数据量并提升数据渲染效率。

MeshCompressType

数据坐标单位:

(可选)

设置数据坐标单位,包括米、度、厘米、毫米、英寸、英尺。默认值为米(Meter)。

DataUnit

插入点X

(可选)

设置数据的插入点(即地理参考原点)的X坐标值,默认为0。

Double

插入点Y

(可选)

设置数据的插入点(即地理参考原点)的Y坐标值,默认为0。

Double

插入点Z

(可选)

设置数据的插入点(即地理参考原点)的Z坐标值,默认为0。

Double

旋转角(XYZ):

(可选)

设置数据绕X/Y/Z轴顺时针旋转的欧拉角,单位为度。格式为:x,y,z,例如:0,0,0。

String

缩放(XYZ):

(可选)

设置数据沿X/Y/Z轴的缩放倍率, 格式为(x,y,z),默认值为(1,1,1)。

String

源投影(EPSG):

(可选)

输入源数据所在坐标系的EPSG编码。

Integer

源坐标系文件:

(可选)

输入记录源数据坐标系的文件(*.xml、*.prj)。当EPSG编码和坐标系文件同时设置,以坐标系文件为准。

String

目标投影(EPSG):

(可选)

输入结果瓦片数据所在坐标系的EPSG编码,例如4490。

Integer

目标坐标系文件:

(可选)

输入记录结果数据坐标系的文件(*.xml、*.prj)。当EPSG编码和坐标系文件同时设置,以坐标系文件为准。

String

转换方法

(可选)

设置数据进行投影转换的方法,包括:

1、基于地心的三参数转换法Geocentric Translation(3-para):适用于基于地心的三参数坐标转换。

2、莫洛金斯基转换法Molodensky(3-para):莫洛金斯基三参数转换方法。

3、简化的莫洛金斯基转换法Abridged Molodensky(3-para):三参数转换法。

4、位置矢量法Position vECTOR(7-para):七参数转换法的一种。

5、基于地心的七参数转换法Coordinate Frame(7-para)。

6、Bursa-Wolf(7-para):较为常用的七参数转换法。

7、莫洛金斯基-巴待卡斯投影转换方法MolodenskyBadekas(10-para):一种十参数的空间坐标转换模型。

8、三维七参数转换方法China_3D_7P(7-para):用于不同坐标系与2000国家大地坐标系(CGC2000)之间的转换。适用于全国及省级椭球面3度及以上不同地球椭球基准下的大地坐标系统间控制点坐标转换。转换方法涉及三个平移参数,三个旋转参数和一个尺度变化参数,同时需要顾及两种大地坐标系所对应的两个地球椭球体长半轴和扁率差。

CoordSysTransMethod

投影转换参数

(可选)

设置数据进行投影转换的参数,包括比例差、旋转角度、偏移量、旋转原点等。具体参数值由投影转换参数工具指定。

CoordSysTransParameter

输出结果

参数名

参数释义

参数类型

瓦片结果地址

结果瓦片的存储地址

String

主要使用接口说明

详见SuperMap iObject Java 120版本帮助文档(在线帮助文档链接:https://support.supermap.com/DataWarehouse/WebDocHelp/iObjectsJava/index.html

二、主要代码

    //12版本新功能,高斯数据生成供三维场景发布使用的三维瓦片
        GaussianSplattingCacheBuilder gaussianSplattingCacheBuilder=new GaussianSplattingCacheBuilder();//构造一个新的GaussianSplattingCacheBuilder对象
boolean flag=gaussianSplattingCacheBuilder.buildFromPLY(gaussianSplattingBuildSetting);//开始创建高斯瓦片
        System.out.println("创建高斯瓦片是否创建成功"+flag);

三、完整示例代码

package gettingstarted;

import com.supermap.data.CoordSysTransMethod;
import com.supermap.data.PrjCoordSys;
import com.supermap.data.processing.GaussianSplattingBuildSetting;
import com.supermap.data.processing.GaussianSplattingCacheBuilder;
import com.supermap.data.processing.MeshCompressType;
import com.supermap.data.processing.PyramidSplitType;

import java.util.ArrayList;
import java.util.HashMap;

public class GaussianSplatting {
    public static void main(String[] args) {
//        12版本新功能,高斯数据生成供三维场景发布使用的三维瓦片
        GaussianSplattingCacheBuilder gaussianSplattingCacheBuilder=new GaussianSplattingCacheBuilder();//构造一个新的GaussianSplattingCacheBuilder对象
        gaussianSplattingCacheBuilder.setCacheName("高斯瓦片");//设置高斯瓦片的名称
        gaussianSplattingCacheBuilder.setGeometryCompressType(MeshCompressType.MESHOPT);//设置几何压缩类型
        gaussianSplattingCacheBuilder.setOutputFolder("src/testData/3dgs");//设置生成瓦片的存储路径。
        gaussianSplattingCacheBuilder.setTilePyramidSplitType(PyramidSplitType.QuadTree);//设置单个Tile金字塔刨分类型

        GaussianSplattingBuildSetting gaussianSplattingBuildSetting=new GaussianSplattingBuildSetting();//高斯数据缓存参数设置类。
        gaussianSplattingBuildSetting.setCoordSysTransMethod(CoordSysTransMethod.MTH_GEOCENTRIC_TRANSLATION);//设置坐标系转换方法
        gaussianSplattingBuildSetting.setDesPrjCoordSys(PrjCoordSys.fromEPSG(4490));//设置高斯数据结果坐标系类型。
        gaussianSplattingBuildSetting.setSrcPrjCoordSys(PrjCoordSys.fromEPSG(4547));//设置高斯数据原始坐标系类型。

        // 创建分组文件名的HashMap
        HashMap<String, ArrayList<String>> groupFileNames = new HashMap<>();
        // 为每个组创建文件列表
        ArrayList<String> group1Files = new ArrayList<>();
        group1Files.add("src/testData/3dgs/point_cloud_2.ply");
        // 将分组添加到HashMap
        groupFileNames.put("group1", group1Files);
        gaussianSplattingBuildSetting.setGroupFileNames(groupFileNames);

        boolean flag=gaussianSplattingCacheBuilder.buildFromPLY(gaussianSplattingBuildSetting);//开始创建高斯瓦片
        System.out.println("创建高斯瓦片是否创建成功"+flag);
    }
}

四、运行结果展示

高斯泼溅瓦片需在iClient3D产品中加载预览,预览结果如下:

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐