首页 / 浏览问题 / 移动GIS / 问题详情
二三维联动打开三维的时候能看到一下但是直接闪退 联动也是
145EXP 2022年08月05日
   //本地数据地址
    private String workspacePath = sdcard + "/SuperMap/data/test/World.smwu";
    // 本地数据的场景名称
    private String sceneName = "scene";

    // 工作空间相关类
    private WorkspaceConnectionInfo info;
    private WorkspaceType workspaceTypetemp = null;
    private boolean isOpenSceneSuccess = false;
    // 三维场景
    private Scene scene;

 @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_map://二维
                setMapLayout();
                break;
            case R.id.btn_scene://三维
                setSceneLayout();
                openLocalScene();
                break;
            case R.id.btn_linkage://二三维
                setLayout();
                openLocalScene();
                break;
        }
    }

  /**
     * @author:Supermap
     * @注释 :打开一个本地场景数据
     */
    private void openLocalScene() {
        //新建一个工作空间对象
        if (workspace == null) {
            workspace = new Workspace();
        }

        //根据工作空间类型,设置服务路径和类型信息
        if (info == null) {
            info = new WorkspaceConnectionInfo();
        }

        workspaceTypetemp = WorkspaceType.SMWU;
        info.setServer(workspacePath);
        info.setType(workspaceTypetemp);
        scene = sceneControl.getScene();

        //场景关联工作空间
        if (workspace.open(info)) {
            scene.setWorkspace(workspace);
        }
        //打开场景
        isOpenSceneSuccess = scene.open(sceneName);
    }

  /**
     * mapView需要设置一个宽度
     */
    private void setSceneLayout() {
        //获取手机分辨率
        DisplayMetrics dp = new DisplayMetrics();
        //将当前窗口的一些信息放在DisplayMetrics
        //getDefaultDisplay()将取得的宽高维度存放于DisplayMetrics对象中
        getWindowManager().getDefaultDisplay().getMetrics(dp);
        //设备的 宽度
        width = dp.widthPixels;
        //设备的高度
        height = dp.heightPixels;

        double y = 1;
        double x = (dp.widthPixels - dp2px(50));

        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) rl_map.getLayoutParams();
        params.width = (int) y;
        params.height = (int) height;
        rl_map.setLayoutParams(params);

        RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams) rl_scene.getLayoutParams();
        params1.height = (int) height;
        params1.width = (int) x;
        rl_scene.setLayoutParams(params1);
    }


  private void setLayout() {
        DisplayMetrics dp = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dp);
        width = dp.widthPixels;
        height = dp.heightPixels;
        double x = (dp.widthPixels - dp2px(50)) / 2;

        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) rl_map.getLayoutParams();
        params.width = (int) x;
        params.height = (int) height;
        rl_map.setLayoutParams(params);

        RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams((int) x, (int) height);
        params1.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
        params1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
        rl_scene.setLayoutParams(params1);
    }

这是代码这边 这是因为什么呢 也没报错什么的  联动的时候二维不显示了 三维显示一下 然后直接闪退了就

代码这边全粘贴的话超过8000个字符了

1个回答

您好,建议您打一下断点,看一看是哪里的语句发生错误了呢,定位到具体语句才方便确认问题,另外看您的代码是想要加载球面场景是吗,那么您说的打开的时候能看到一下场景后就闪退了,那么看到的是默认的球面场景呢还是您自己制作的场景呢,
3,415EXP 2022年08月05日
您方便的话我代码发您 一份  您测试一下 看看
这边私信您了,请发送到私信中的邮箱
我发到您的邮箱了 你可以看一下

有一个示例数据您是有的
您在邮箱看到了吗   是不是我的二三维不联动是分开的 如果动二维的话三维是一块联动的  如果动三维 二维是不动的
问题原因是在打开地图前没有绑定工作空间,打开地图前使用map.setWorkspace(Workspace workspace)设置当前地图所关联的工作空间。
...