首页 / 浏览问题 / 移动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,127EXP 2020年09月21日
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都是有值的 都是不为空的 也没有存在重复的情况
...