首页 / 浏览问题 / 移动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,450EXP 2022年08月05日
一开始是球但是等下 是自己的场景
断点打了 是往下走的
您的意思是走到底层去了是吗,那么请问您是在哪里打断点的呢,根据您的描述,应该是场景加载出来了,然后又崩溃了,如果您不是在loadscene方法里面加的断点那试试在loadscene方法最后加个断点看一下呢
我是在loadscene方法那加的 然后方法里边也加了   往下走的
而且二三维联动的时候二维不显示地图了 三维显示一下直接崩了 闪退
A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x10 in tid 20725 (le.openmapscene), pid 20725 (le.openmapscene)

I/chatty: uid=10395(com.example.openmapscene) Thread-6 identical 9 lines
D/zhangjf: UGS3MBROSerializer-load
D/zhangjf: UGS3MBROSerializer-load
I/chatty: uid=10395(com.example.openmapscene) Thread-6 identical 4 lines
D/zhangjf: UGS3MBROSerializer-load
D/zhangjf: UGS3MBROSerializer-load
D/zhangjf: UGS3MBROSerializer-load
D/zhangjf: UGS3MBROSerializer-load
I/chatty: uid=10395(com.example.openmapscene) Thread-6 identical 133 lines
D/zhangjf: UGS3MBROSerializer-load
D/zhangjf: UGS3MBROSerializer-load
D/zhangjf: UGS3MBROSerializer-load
I/chatty: uid=10395(com.example.openmapscene) Thread-6 identical 37 lines
D/zhangjf: UGS3MBROSerializer-load
D/zhangjf: UGS3MBROSerializer-load
I/chatty: uid=10395(com.example.openmapscene) Thread-6 identical 23 lines
D/zhangjf: UGS3MBROSerializer-load
D/zhangjf: UGS3MBROSerializer-load
I/chatty: uid=10395(com.example.openmapscene) Thread-6 identical 58 lines
D/zhangjf: UGS3MBROSerializer-load

下边 跟的一堆这个
改了一下还是不行  为什么呢
您好,我这边测试了一下打开二三维联动场景与地图,是可以打开并正常显示的

代码链接:https://pan.baidu.com/s/1ldgauwmHWDBkM2e9xgKUIA
提取码:8754

数据链接:https://pan.baidu.com/s/1CaF0Hk9-s-roKXQWPki4sg
提取码:8754
三维闪退 跟二维不显示已经解决了

 现在就是联动的时候不联动   如果移动二维的话 自己的三维场景不会显示了只会显示球形的跟demo一样  如果移动三维的话 二维不会移动  两个就是分开的
您方便的话我代码发您 一份  您测试一下 看看
这边私信您了,请发送到私信中的邮箱
我发到您的邮箱了 你可以看一下

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