栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

iObjects java进行倾斜入库

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

iObjects java进行倾斜入库

作者: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文件,在对应一栏,里面包含了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("保存工作空间成功");
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/583090.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号