首页 / 浏览问题 / 移动GIS / 问题详情
Android导入dwg文件之后怎么设置到图层去显示
65EXP 2020年09月21日

使用产品:supermap-imobile-10.0.1-189-android-zip-chs

操作系统:macos开发

数据类型:文件型

String path = projectPath + "/sample.dwg";
DatasourceConnectionInfo dsInfo = new DatasourceConnectionInfo();
ImportSettingDWG settingDWG=new ImportSettingDWG(path,dsInfo);
boolean isImport=DataConversion.importDWG(settingDWG) //返回了ture

以上代码是利用

DataConversion 导入dwg文件 返回为ture 看文档是表示导入成功,那么接下来怎么显示到mapview的图层上面呢

有没有相关例子?

以下是加载矢量瓦片的官方代码:是否跟加载矢量瓦片的代码一样?那么DatasourceConnectionInfo的那些怎么去设置呢

//将地图显示控件和工作空间关联
        Workspace mWorkspace = new Workspace();
        MapControl mMapControl = ((MapView) findViewById(R.id.mapView)).getMapControl();
        Map mMap = mMapControl.getMap(); //获取在地图控件中显示的地图对象
        mMap.setWorkspace(mWorkspace); //设置当前地图所关联的工作空间
        //以数据源的方式打开MVT数据
        DatasourceConnectionInfo dsInfo = new DatasourceConnectionInfo();
        dsInfo.setServer(sdcard + "/SampleData/MVT/NewYork/styles/style.json");
        dsInfo.setEngineType(EngineType.MVTCache);
        dsInfo.setAlias("MVT");
        Datasource ds = mWorkspace.getDatasources().open(dsInfo);
        if (ds == null) {
            return;
        }
        Log.e("MainActivity", "left: " + ds.getDatasets().get(0).getBounds().getLeft() + ", right: " + ds.getDatasets().get(0).getBounds().getRight());
        //地图显示范围可在iDesktop中,通过地图属性查看
        mMap.getLayers().add(ds.getDatasets().get(0), true);
        mMap.setScale(1/144447.92746805);
        mMap.refresh();

问题关闭原因: 已解决

1个回答

您好,导入数据集后会在数据源中以一个数据集存在,将这个数据集添加到地图中就可以。使用方法:map.getLayers.add():参考demo:数据转换。安装目录\SampleCode\DataConversion
9,237EXP 2020年09月21日
按照demo来总是返回false导入失败怎么办,代码都跟demo是一样的
1.检查一下你的dwg文件是否有问题,可以在iDesktop桌面软件中导入看是否正常
2.在代码里面dwg的路径是否正确
3。so库是否使用的是AutoCAD的库,可以将libimb2d的so库删掉

1.dwg文件几份都是正常的,最后用了demo当中的dwg文件,还是不行

2.dwg路径没有问题,在sd卡下面

3.so库是用的libimbAutoCAD_v1001.so,libimb2d不在项目当中

以上最后

DataConversion.importDWG

还是返回false 不知道怎么回事

以下是代码块:

private void loadSuperMapAutoCAD(){
        //将地图显示控件和工作空间关联
        Workspace mWorkspace = new Workspace();
        WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
        info.setServer(projectPath+"/World.smwu");
        info.setType(WorkspaceType.SMWU);
        mWorkspace.open(info);

        mapControl = superMapView.getMapControl();
        //mMap = mapControl.getMap(); //获取在地图控件中显示的地图对象
        mapControl.getMap().setWorkspace(mWorkspace); //设置当前地图所关联的工作空间

        String path = projectPath + "/dwgimport.dwg";
        Log.i(TAG,"路径:"+path);
        Datasource dataSource=mapControl.getMap().getWorkspace().getDatasources().get("World");
        try {
            Log.i(TAG,"dataSource:"+dataSource);
            boolean isImport= DataConversion.importDWG(path,dataSource,true);
            Log.i(TAG,"导入结果:"+isImport);
            if (isImport == true) {
                Dataset dataset =  dataSource.getDatasets().get(
                        "sample");
                showToast("导入dwg格式文件成功");
            } else {
                showToast("导入dwg格式文件失败");
            }
        } catch (Exception e) {
            Log.e(TAG,"导入失败:"+e.getMessage());
            e.printStackTrace();
        }
    }

您那边直接运行我们的demo会不会出现导入失败的问题呢

这个目标数据源datasource - 目标数据源这个参数要传一个什么样的目标数据源呢 不太理解这个参数

目标数据源就是需要把这个数据集保存都哪个数据源里面。您需要提前打开这个数据源,再把数据源传进去。您那边可以看一下api文档的参数介绍
你们这个Androidstudio的demo运行不起来的哦 不过我用sublimetext打开看了一下,代码都很简单我都是复制过来的
您看的demo是ADT的还是Android studio的呢?ADT是基于eclipse开发的。您那边看一下数据源是否打开成功,数据源datasource是否有值。数据源中是否存在当前DWG文件名称的同名数据集
SurfaceHolder: Exception locking surface
    java.lang.IllegalArgumentException: Surface was already locked
        at android.view.Surface.lockCanvas(Surface.java:346)
        at android.view.SurfaceView$3.internalLockCanvas(SurfaceView.java:1091)
        at android.view.SurfaceView$3.lockCanvas(SurfaceView.java:1051)
        at com.supermap.mapping.MapControl1.c(MapControl1.java:357)
        at com.supermap.mapping.MapControl1.refreshCallback(MapControl1.java:1052)
        at com.supermap.mapping.MapControlNative.jni_SetSize(Native Method)
        at com.supermap.mapping.MapControl1.a(MapControl1.java:1198)
        at com.supermap.mapping.MapControl1.c(MapControl1.java:367)
        at com.supermap.mapping.MapControl1$3.surfaceCreated(MapControl1.java:330)
        at android.view.SurfaceView.updateSurface(SurfaceView.java:701)
        at android.view.SurfaceView$2.onPreDraw(SurfaceView.java:144)
        at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:977)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2553)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1534)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7420)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1100)
        at android.view.Choreographer.doCallbacks(Choreographer.java:895)
        at android.view.Choreographer.doFrame(Choreographer.java:826)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1086)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:201)
        at android.app.ActivityThread.main(ActivityThread.java:6861)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

添加了这行代码

Environment.setOpenGLMode(false);

出现这个错误

是不是我的jar包导入不够

没有将所有的jar包导入

用10版本的移动端SDK不建议关闭OpenGL,因为很多都是在opengl开启下实现的。您那边现在能实现导入了吗
还是没做出来,自己又重新写了一个demo还是不行,返回false
Datasource udbDatasource = mMapControl.getMap().getWorkspace().getDatasources()
        .get("World");

我都是按照demo来的也都设置了这些,还是返回false

数据源

Datasource都是有值的 都是不为空的 也没有存在重复的情况
...