首页 / 浏览问题 / 移动GIS / 问题详情
二三维联动里边的地图换成天地图加载不出来
145EXP 2022年08月22日
 private void openMap1() {
        String url = "http://t0.tianditu.gov.cn/vec_c/wmts?tk=15fcda84316f12183782bd4511f18d79";
        workspace = new Workspace();
        DatasourceConnectionInfo info = new DatasourceConnectionInfo();
        info.setServer(url);
        info.setEngineType(EngineType.OGC);
        info.setDriver("WMTS");
        info.setAlias("tianditu_wmts");
        Datasource datasource = workspace.getDatasources().open(info);
        if (datasource == null) {
            Toast.makeText(this, "数据源打开失败", Toast.LENGTH_SHORT).show();
            return;
        }
    }

按照博客里边的把代码换了一下加载不出来天地图二维图 

1个回答

您好,这边看了您的代码,没有看到添加图层呢应该再加上

mapcontrol.getMap().getLayers().add(datasource.getDatasets().get(0),true);

您那边加上看看有没有呢

3,810EXP 2022年08月22日
把最后一句加上了还是不显示的 我把这个方法放到二维点击按钮那不应该不可以啊 要不要我把代码上传一下您看一下呢

刚刚运行错项目了 运行的直接奔溃闪退了

错误是这样的:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.map, PID: 26074
    java.lang.IllegalArgumentException: dataset
    数据集的工作空间应该与Map的工作空间相同。
        at com.supermap.mapping.Layers.add(Layers.java:360)
        at com.example.map.MainActivity.openMap1(MainActivity.java:429)
        at com.example.map.MainActivity.onClick(MainActivity.java:274)
        at android.view.View.performClick(View.java:7317)
        at android.view.View.performClickInternal(View.java:7291)
        at android.view.View.access$3600(View.java:838)
        at android.view.View$PerformClick.run(View.java:28247)
        at android.os.Handler.handleCallback(Handler.java:900)
        at android.os.Handler.dispatchMessage(Handler.java:103)
        at android.os.Looper.loop(Looper.java:219)
        at android.app.ActivityThread.main(ActivityThread.java:8668)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)

这一行报错了mapControl.getMap().getLayers().add(datasource.getDatasets().get(0), true);

如果把这个放到三维场景初始化那一步的话报错信息是这样的:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.map, PID: 26667
    java.lang.IllegalArgumentException: dataset
    数据集的工作空间应该与Map的工作空间相同。
        at com.supermap.mapping.Layers.add(Layers.java:360)
        at com.example.map.MainActivity.openMap1(MainActivity.java:429)
        at com.example.map.MainActivity.access$300(MainActivity.java:60)
        at com.example.map.MainActivity$2.onSuccess(MainActivity.java:262)
        at com.supermap.realspace.SceneControl$10.handleMessage(SceneControl.java:831)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:219)
        at android.app.ActivityThread.main(ActivityThread.java:8668)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)

错的基本上都差不多  都是先报的mapControl.getMap().getLayers().add(datasource.getDatasets().get(0), true);这一行错误

新建了一个Mode 去加载天地图直接闪退为什么呢 也没有报错信息的

怎么加载成这种在线地图呢 放大以后显示街道啥的

您好,请问您上面报错提示是因为您加载了多个工作空间吗,您这样想加载本地数据的话,应把数据源关联到同一个工作空间,关于您的第一个问题,天地图不显示,我这边在原有的地图上直接叠加天地图说可以看见的、

DatasourceConnectionInfo dinfo = new DatasourceConnectionInfo();
dinfo.setAlias("TianDiTu12");
dinfo.setEngineType(EngineType.OGC);
dinfo.setDriver("WMTS");
String url = "http://t0.tianditu.gov.cn/img_c/wmts?&DPI=96&tk=410199522650980db3dfb843a809a2a4";
dinfo.setServer(url);
Datasource d1 = woWorkspace.getDatasources().open(dinfo);
mapControl.getMap().getLayers().add(d1.getDatasets().get(0),true);

额之前不是有个问题就是保存我那三维场景到同一个工作空间吗 不是保存不上吗 可能就是因为我用了两个工作空间的关系 就是您那边测试的咋样了  

就是怎么可以加载成天地图的那种在线地图啊。放大以后可以看个各个地方的街道什么的   

这个是我新建一个Demo 加载的百度地图  放大以后就是这样的

这是我加载天地图的 放大以后就是一个平面的二维图 国家啥的都没有的

还是不可以的  是我配置的有什么问题吗

然后我用您发的那个代码 直接报错了

这一行报错:

mapControl.getMap().getLayers().add(d1.getDatasets().get(0), true);

报错信息如下:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.tianditu, PID: 20946
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tianditu/com.example.tianditu.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.supermap.mapping.Map com.supermap.mapping.MapControl.getMap()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4060)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4247)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2613)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:219)
        at android.app.ActivityThread.main(ActivityThread.java:8668)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.supermap.mapping.Map com.supermap.mapping.MapControl.getMap()' on a null object reference
        at com.example.tianditu.MainActivity.onCreate(MainActivity.java:80)
        at android.app.Activity.performCreate(Activity.java:8214)
        at android.app.Activity.performCreate(Activity.java:8202)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4033)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4247) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2613) 
        at android.os.Handler.dispatchMessage(Handler.java:110) 
        at android.os.Looper.loop(Looper.java:219) 
        at android.app.ActivityThread.main(ActivityThread.java:8668) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109) 
 

还有就是之前给您发的那个数据   测试的还是有问题吗

您测试天地图的那个Demo能发我一份吗 我对比一下 看到底我哪出错了
链接:https://pan.baidu.com/s/109uStIDS84e_vmtUINNWow
提取码:8754
运行程序后,会直接加载矢量天地图
好的麻烦您了
链接:https://pan.baidu.com/s/1FbrcG9b4Xp6zXo3FViIK3w?pwd=1105
提取码:1105
 

Map是我那个项目

Map里的app是我给您打电话说的那个剩下的都是测试Demo

剩下两个是工作空间
您那边看的怎么样  是不是加载地图的时候报错
加载 天地图  或者百度地图    您测试一下   还有一个就是您也可以看一下   二三维同时创建路线  模型在线上移动       那个您可以测试一下的  只有三维的模型在线上移动的
经测试,天地图可以的,百度地图由于坐标系不是经纬度,所以显示不了,建议使用天地图
我测试加载天地图报错呢  我加错地方了吗是  您是加到哪一块了   您没有报我之前的错误吗

这是我添加天地图的代码

DatasourceConnectionInfo dinfo = new DatasourceConnectionInfo();
dinfo.setAlias("TianDiTu12");
dinfo.setDriver("WMTS");
String url = "http://t0.tianditu.gov.cn/img_c/wmts?&DPI=96&tk=410199522650980db3dfb843a809a2a4";
dinfo.setEngineType(EngineType.OGC);
dinfo.setServer(url);
Datasource d1 = woWorkspace.getDatasources().open(dinfo);
mapControl.getMap().getLayers().add(d1.getDatasets().get(0),true);
mapControl.getMap().refresh();

链接:https://pan.baidu.com/s/11S8TZErUHbHF4nzcEvnhBA 
提取码:8754 

这是二维点动画的demo其中点为固定点,通过一线程实现,您可以得到三维飞机的图层设置为动态点的坐标

好的 非常感谢您 的解答

我把您这个代码加到我那里边直接闪退报错了   不加没有事  加了就是闪退报错的

报错 那行是:

Datasource d1 = workspace.getDatasources().open(dinfo);

错误如下:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.map, PID: 29332
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.map/com.example.map.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.supermap.data.Datasources com.supermap.data.Workspace.getDatasources()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4060)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4247)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2613)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:219)
        at android.app.ActivityThread.main(ActivityThread.java:8668)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.supermap.data.Datasources com.supermap.data.Workspace.getDatasources()' on a null object reference
        at com.example.map.MainActivity.onCreate(MainActivity.java:202)
        at android.app.Activity.performCreate(Activity.java:8214)
        at android.app.Activity.performCreate(Activity.java:8202)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4033)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4247) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2613) 
        at android.os.Handler.dispatchMessage(Handler.java:110) 
        at android.os.Looper.loop(Looper.java:219) 
        at android.app.ActivityThread.main(ActivityThread.java:8668) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109) 
 

在地图打开前要用map.setworkspace关联工作空间
...