首页 / 浏览问题 / 移动GIS / 问题详情
加载本地数据和天地图
3EXP 2021年03月02日
   DatasourceConnectionInfo dsInfo = new DatasourceConnectionInfo();
        String url2 = "http://t0.tianditu.com/cia_c/wmts?tk=87c70883ade017002d5f2345ff079a3f";
        dsInfo.setServer(url2);
        dsInfo.setAlias("TianDiTu2");
        dsInfo.setEngineType(EngineType.OGC);
        dsInfo.setDriver("WMTS");
        Datasource ds = m_workspace.getDatasources().open(dsInfo);

        DatasourceConnectionInfo dsInfo1 = new DatasourceConnectionInfo();
        dsInfo1.setServer(rootPath+"/SampleData/GeometryInfo/world.smwu");
        Log.i("lvjian","address========>"+rootPath+"/SampleData/GeometryInfo/world.udb");
        dsInfo1.setEngineType(EngineType.UDB);
        Datasource ds1 = m_workspace.getDatasources().open(dsInfo1);

        Datasource datasource = m_workspace.getDatasources().open(wmsInfo);
        if (datasource != null) {
//            m_mapControl.getMap().getLayers().add(datasource.getDatasets().get(0), true);
            m_mapControl.getMap().getLayers().add(ds.getDatasets().get(0), true);
            m_mapControl.getMap().getLayers().add(ds1.getDatasets().get(0),true);
            m_mapControl.getMap().setCenter(new Point2D(117.25, 31.89));
            m_mapControl.getMap().setScale(1 / 12322.6);
            m_mapControl.getMap().refresh();
            m_mapControl.getMap().setVisibleScalesEnabled(true);
        }

1个回答

您好,加载本地数据源和天地图都是通过DatasourceConnectionInfo类打开的,您那边具体是有什么问题呢,麻烦详细说明一下
9,137EXP 2021年03月02日
DatasourceConnectionInfo加载本地数据源格式是udb还是其他格式,怎么加载的?我这样加载不出来是不是数据有问题?有没有测试数据?
DatasourceConnectionInfo是数据源连接参数类,打开什么类型的数据源可以通过该类的setEngineType来确定。具体的使用方法你可以参考api文档。打开在线地图可以参考api文档知识库--服务对接--对接在线服务。您下载的完整产品包里面是有sampleData的,您可以使用该示例数据
同时加载本地数据和天地图的代码能贴一下吗
您好,没有具体的代码。实现思路如下:
1.通过DatasourceConnectionInfo类分别打开天地图和本地UDB数据源
2.通过打开的数据源datasource获取该数据源内的数据集dataset
3.通过layers.add(dataset,Boolean)将数据集添加到地图中
加载.smwu格式的数据源 EngineType用什么?
加载工作空间使用的类是WorkspaceConnectionInfo,engineType为smwu
m_workspace = new Workspace();
m_mapView = findViewById(R.id.map_view);
m_mapControl = m_mapView.getMapControl();
WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
info.setType(WorkspaceType.SMWU);
info.setServer(rootPath + "/SampleData/GeometryInfo/test.smwu");
m_workspace.open(info);
m_mapControl.getMap().setWorkspace(m_workspace);
String mapname = m_workspace.getMaps().get(0);//这一行索引越界
m_mapControl.getMap().open(mapname);

//****************************

  Caused by: java.lang.IndexOutOfBoundsException: index
    索引越界
        at com.supermap.data.Maps.get(Maps.java:81)
        at com.luyang.lightsystem.gis.GISMapActivity.openMap2(GISMapActivity.java:109)
        at com.luyang.lightsystem.gis.GISMapActivity.onCreate(GISMapActivity.java:38)
        at android.app.Activity.performCreate(Activity.java:7893)
        at android.app.Activity.performCreate(Activity.java:7880)

您好,报错索引越界您可以检查以下几点:
1.调试代码。看工作空间是否打开成功,可以通过workspace.open()方法返回的Boolean变量判断
2.如果工作空间打开成功,可以在iDesktop桌面软件中查看该工作空间中是否有地图存在
 加载测试数据不出图
DatasourceConnectionInfo dsInfo1 = new DatasourceConnectionInfo();
        dsInfo1.setServer(rootPath + "/SampleData/GeometryInfo/Changchun.udb");
        dsInfo1.setEngineType(EngineType.UDB);
        Datasource ds1 = m_workspace.getDatasources().open(dsInfo1);

        Datasource datasource = m_workspace.getDatasources().open(wmsInfo);
        if (ds1 != null) {
//            m_mapControl.getMap().getLayers().add(datasource.getDatasets().get(0), true);
            m_mapControl.getMap().getLayers().add(ds1.getDatasets().get(0), true);
//            m_mapControl.getMap().getLayers().add(ds.getDatasets().get(0), true);
//            m_mapControl.getMap().setCenter(new Point2D(117.25, 31.89));
//            m_mapControl.getMap().setScale(1 / 12322.6);
            m_mapControl.getMap().refresh();
            m_mapControl.getMap().setVisibleScalesEnabled(true);
        }

您那边调试一下代码,看数据源是否打开成功了?
怎么调试?

打断点调试可以百度搜索一下具体方法,参考https://blog.csdn.net/weixin_30556161/article/details/98624749。调试看一下打开数据源返回是否为null

...