iObjects java进行倾斜入库

这篇博客介绍了如何使用iObjects Java产品实现OSGB数据的倾斜配置文件生成及倾斜入库的后台处理。首先,通过代码详细解释了如何生成SCP配置文件,包括获取OSGB文件的坐标信息和设置投影坐标系。然后,展示了倾斜入库的步骤,涉及设置存储类型、纹理压缩、约束类型等参数,并最终将数据存储为S3M格式。整个过程旨在将原本桌面化的操作流程化和定制化。

作者:zhangL

背景
很多用户在实际项目开发中对osgb数据进行倾斜入库的处理已经不局限于使用iDesktop产品了,而是需要将这个过程定制化、后台化、流程化。这里我将从iObjects java产品的角度,分两步进行过程讲解。

1.生成倾斜配置文件

对osgb生成倾斜配置文件,该过程不太熟悉的同学可以在桌面上 三维数据——倾斜摄影——数据管理——生成配置文件 先熟悉功能的使用以及参数的含义。

        String rootPath = "OSGB文件路径";
        String fileName =  "test";//scp配置文件名
       //pathData即OSGB文件路径下的Data文件夹
        String pathData = rootPath + File.separator + "Data" +  File.separator ;
        //生成Point3D对象,用编辑器打开osgb的xml文件,在<SRSOrigin>对应一栏,里面包含了X,Y,Z坐标信息
        double x = 620540;
        double y = 3579599;
        double z = 0;
        Point3D point3D  =new Point3D(x,y,z);
        //命名scp格式文件
        String configFileName= pathData + fileName  +  ".scp";
        System.out.println("生成scp格式文件");
        //io遍历读取osgb文件
        String fileNames = pathData ;
        File file = new File(fileNames);
        File[] files = file.listFiles();
        String[] lsStrings = new String[files.length];
        for (int i = 0; i < files.length; i++) {
            if(files[i].isDirectory()) {
                File[] ffFiles=files[i].listFiles();
                lsStrings[i]=ffFiles[0].getPath();
            }
        }
        //设置PrjCoordSys对象的EPSG
        PrjCoordSys prjCoordSys = new PrjCoordSys();
        prjCoordSys.fromEPSGCode(4548);
        //生成scp配置文件
        boolean OSGBflat = OSGBCacheBuilder.generateConfigFile(configFileName, point3D, prjCoordSys, lsStrings);
        System.out.println(OSGBflat);

2.倾斜入库

生成好scp配置文件了过后就可以根据 scp文件进行倾斜入库了。同样,对这个操作不太熟悉的建议先使用桌面的功能,三维数据——倾斜摄影——数据处理——倾斜入库。

		//第一步生成的scp配置文件
 		String scpPath = pathData  + fileName + ".scp";
 		//存放入库后数据的目录
        String outputFolder =  rootPath  + File.separator + "S3M";
        //倾斜摄影数据生成类
        ObliquePhotogrammetryBuilder obliquePhotogrammetryBuilder =
                new ObliquePhotogrammetryBuilder(new ObliqueProcessType[]{ObliqueProcessType.COMBINE_NODE,ObliqueProcessType.COMPRESS_TEXTURE});
        
        //设置存储类型
        obliquePhotogrammetryBuilder.setStorageType(StorageType.Original);
      
        //  设置纹理压缩类型,可以查组件帮助文档TextureCompressType查看不同类型以及对应含义
        obliquePhotogrammetryBuilder.setTexCompressType(TextureCompressType.TEXTURECOMPRESS_DXT);
       
        //  设置约束类型。 软约束,裁剪边界按照原始数据计算;硬约束,裁剪边界按照新数据计算
	    obliquePhotogrammetryBuilder. setConstraintType(ConstraintType.SOFTCONSTRAINT);

        // 设置输入的SCP名字。
        obliquePhotogrammetryBuilder.setFieldName(fileName + ".scp");

        //setFileType(CacheFileType fileType)
        // 设置结果数据的缓存文件格式。
        obliquePhotogrammetryBuilder.setFileType(CacheFileType.S3MB);

		//设置中心点坐标单位
        obliquePhotogrammetryBuilder.setCenterPositionUnit(DataUnit.Meter);

        // 设置合并根节点的金字塔层级数。
        obliquePhotogrammetryBuilder.setCombineLevel(1);
        
        //设置目标坐标系
        PrjCoordSys prj4490 = new PrjCoordSys();
        prj4490.fromEPSGCode(4490);
        obliquePhotogrammetryBuilder.setTargetPrjCoordSys(prj4490) ;

        //设置几何压缩方式,包括不压缩、常规压缩、DRACO压缩。
        obliquePhotogrammetryBuilder.setVertexOptimazationType(VertexOptimizationType.VO_NONE);

        //设置线程数
        int  threadCount= 8;
        
        //倾斜入库
        boolean build = obliquePhotogrammetryBuilder.build(scpPath, outputFolder, threadCount);
        if(build) {
        	 System.out.println("s3mb生成成功");
        }
       
       //将结果数据加载并保存到场景进行显示
        //在本地创建一个工作空间
        Workspace workspace = new Workspace();
        workspace.setCaption(fileName);
        WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
        workspaceConnectionInfo.setType(WorkspaceType.SXWU);
        String filedir = outputFolder + File.separator +"Data" + File.separator;
        String filename = fileName +".sxwu";
        String fileworkspace = filedir + "/" +filename;
        workspaceConnectionInfo.setServer(fileworkspace);//也可以直接复制本地磁盘绝对路径
        
        workspace.create(workspaceConnectionInfo);

        //在工作空间中新建一个场景
        Scene scene =new Scene(workspace);
        Layer3Ds layer3Ds = scene.getLayers();

        //向三维图层集合中添加三维图层
        String  layer3DsScpName = rootPath+"/S3M/Combine.scp";//入库后的scp文件
 
        Layer3D layer3d = layer3Ds.add(layer3DsScpName, Layer3DType.OSGB, true);
        scene.ensureVisible(layer3d);
        scene.refresh();
        Scenes scenes = workspace.getScenes();
        scenes.add( fileName, scene.toXML());
        workspace.saveAs(workspaceConnectionInfo);

        System.out.println("保存工作空间成功");
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值