首页 / 浏览问题 / 组件GIS / 问题详情
将数据放入场景
33EXP 2020年03月23日

在workspace中新建了一个场景,成功。然后使用

currentScene.getLayers().add(dataset, layer3DSettingVector, true);

添加数据到里面,保存之后,场景是新建出来了,但是场景中没有数据

 Workspace m_workspace = new Workspace();
        DatasourceConnectionInfo info = new DatasourceConnectionInfo();
        info.setEngineType(EngineType.UDBX);
        info.setServer(path);
        Datasource ds = m_workspace.getDatasources().open(info);
        Datasets datasets = ds.getDatasets();
        // 另存工作空间
        String file_saveAs = "D:\\work\\项目\\天府智慧管廊\\workSpace_test.sxwu";
        Scene sceneObject1 = new Scene(m_workspace);
        m_workspace.save();
        Scene currentScene = new Scene();
        currentScene.setWorkspace(m_workspace);

        //返回三维图层集合对象
        Layer3Ds layer3Ds = currentScene.getLayers();

        //构造三维矢量图层设置对象并进行设置

        //向三维图层集合中添加数据集类型的三维图层
//        layer3Ds.clear();
        for (int i = 0; i < datasets.getCount(); i++) {
            String name = datasets.get(i).getName();
            Dataset dataset = ds.getDatasets().get(name);
            Layer3DSettingVector layer3DSettingVector = new Layer3DSettingVector();
            GeoStyle3D style = new GeoStyle3D();
            style.setFillForeColor(Color.PINK);
            layer3DSettingVector.setStyle(style);
            currentScene.getLayers().add(dataset, layer3DSettingVector, true);
            layer3Ds.add(dataset, layer3DSettingVector, true);
            Layer3DDataset layer3DDataset = layer3Ds.insert(i, dataset,
                    layer3DSettingVector,name);
            layer3DDataset.updateData();
        }

        currentScene.refresh();

//
//        // 返回三维场景的XML形式的描述
        String descriptionScene = currentScene.toXML();
//        m_workspace.getScenes().add("test",descriptionScene);
        // 保存工作空间
        m_workspace.getScenes().add("tet",descriptionScene);
        m_workspace.save();

        // 另存工作空间
        WorkspaceConnectionInfo workspaceConnectionInfo_saveAs = new
                WorkspaceConnectionInfo(file_saveAs);
        if (m_workspace.saveAs(workspaceConnectionInfo_saveAs)) {
            System.out.println("另存工作空间成功!");
        }
        // 释放资源
        m_workspace.save();
        currentScene.dispose();
        info.dispose();
        workspaceConnectionInfo_saveAs.dispose();
        m_workspace.close();
        m_workspace.dispose();

1个回答

您好,调试一下你的代码。保存场景后返回的图层个数。可以参考以下代码:

workspace = new Workspace();
         DatasourceConnectionInfo info = new DatasourceConnectionInfo();
         info.setServer("E:\\数据\\测试\\测试\\liudong.udb");
         info.setEngineType(EngineType.UDB);
         Datasource datasource = workspace.getDatasources().open(info);
         Dataset dataset = datasource.getDatasets().get(0);
         Scene scene = new Scene(workspace);
         Layer3DSettingVector layer3DSettingVector = new Layer3DSettingVector();
         scene.getLayers().add(dataset,  layer3DSettingVector,true);
         String xml = scene.toXML();
         workspace.getScenes().add("test", xml);
         scene.fromXML(xml);
         WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
         workspaceConnectionInfo.setType(WorkspaceType.SXWU);
         workspaceConnectionInfo.setServer("E:\\数据\\测试\\test.sxwu");
         workspace.saveAs(workspaceConnectionInfo);

9,127EXP 2020年03月24日

你好,我调试了一下,在执行了scene.getLayers().add(dataset, layer3DSettingVector,true);后,Scene中已经有了我从数据源中取到的数据layer,但是保存工作空间之后,只有一个空白的场景,里面并没有数据,是不是String xml = scene.toXML(); workspace.getScenes().add("test", xml);这里转为xml后,并没有workspace并没有接收到呢?

您好,请问一下你的数据能否在桌面添加到场景中,然后使用我提供的代码测试一下看能否正常添加数据并保存工作空间

通过代码生成的新的工作空间文件,用idesktop打开后,可以将上面的数据添加到这个场景中,代码中场景中已经有了数据,但是没有保存到工作空间中,

您好,您的路径写的是sxw,后面的type是sxwu。改成一致试试。

还是一样的

经过测试10.0.1版本加载数据是个缺陷,已经提交至研发处理。解决后第一时间回复您。您可以暂时使用9D版本的Java组件添加数据到场景
...