首页 / 浏览问题 / 移动GIS / 问题详情
使用天地图DataSource导入kml失败
58EXP 2023年01月11日

通过WorkspaceConnectionInfo的.setServer( "/sdcard/SuperMap/SampleData/DataConversion/World.smwu")后获取

Datasource udbDatasource是可以导入的,但是我下面的代码不能导入,好像是DataSource的问题。请大佬看看。
这个代码是直接在DataConversion上面改的,原来的可以导入,我设置成天地图就不可以了。
  /**
     * 打开地图
     */
    private void openMap() {
        mWorkspace = new Workspace();
        // 将地图显示控件和工作空间关联
        mMapView = (MapView) findViewById(R.id.main_second_mapview);
        mMapControl = mMapView.getMapControl();
        mMapControl.getMap().setWorkspace(mWorkspace);
//        WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
//        info.setServer( "/sdcard/SuperMap/SampleData/DataConversion/World.smwu");
//        info.setType(WorkspaceType.SMWU);
//        mWorkspace.open(info);
        //天地图
        tiandidsInfo = new DatasourceConnectionInfo();
        tiandidsInfo.setServer(TIANDI_URL);
        tiandidsInfo.setEngineType(EngineType.OGC);
        tiandidsInfo.setAlias("tiandi");
        mMapControl.getMap().setMapDownLoadThreadNum(10);
        tiandidsInfo.setDriver("WMTS");

        tiandids = mWorkspace.getDatasources().open(tiandidsInfo);
        if (tiandids != null) {
            Log.d("ContentName.TAG", String.valueOf(tiandids.getDatasets().getCount()) );
            for(int i = 0; i< tiandids.getDatasets().getCount(); i++)
            {
                Log.d("ContentName.TAG","获取的Datasets:"+ tiandids.getDatasets().get(i).getName()+ " ");
            }
            mMapControl.getMap().getLayers().add(tiandids.getDatasets().get(0), true);
            mMapControl.getMap().viewEntire();

            mMapControl.getMap().setScale(1 / 7984.375);
            mMapControl.getMap().refresh();
        }


    }
	/**
	 * 构造函数
	 * 
	 * @param mapcontrol
	 */
	public ImportData(MapControl mapcontrol,Context context) {
		mMapControl = mapcontrol;
		this.context = context;
		mInflater = LayoutInflater.from(mMapControl.getContext());
		loadView();
		setContentView(mContentView);
		setWidth(LayoutParams.WRAP_CONTENT);
		setHeight(LayoutParams.WRAP_CONTENT);
//		udbDatasource = mMapControl.getMap().getWorkspace().getDatasources()
//				.get("World");//可以加载kml
		udbDatasource = mMapControl.getMap().getWorkspace().getDatasources()
				.get("tiandi");//不可以加载
	}
private void importKml(Context context){
		removeLayer();
		mMapControl.getMap().refresh();
		try {
			if (udbDatasource.getDatasets().get("mykml1") != null){
				boolean d = udbDatasource.getDatasets().delete("mykml1");
			}
			boolean kml = DataConversion.importKML( "/sdcard/JSTI/Project/路基路面/YK0+000——YK6+700.kml",udbDatasource,"mykml2",true);
			if (kml == true){
				mMapControl.getMap().getLayers().add(udbDatasource.getDatasets().get(udbDatasource.getDatasets().getCount()-1),true);
//				dataset = udbDatasource.getDatasets().get(
//						"mykml");
//				addMap();
				Toast.makeText(context, "真棒,导入kml格式文件成功", Toast.LENGTH_SHORT).show();
			} else {
				Toast.makeText(context, "难过,导入kml格式文件失败", Toast.LENGTH_SHORT).show();
			}
		}catch (Exception e){
			e.printStackTrace();
		}
	}

问题关闭原因: 1 天地图是只读数据源,建议大家使用工作控件创建新的数据源,再使用importKML接口去操作

1个回答

您好,天地图是只读数据源,不可以导入的哈,如果您想叠加天地图和kml数据,可以用layers.add方法添加天地图数据集再添加kml数据
3,405EXP 2023年01月11日

非常感谢!!您好 我刚刚接触,不太懂,请问 “可以用layers.add方法添加天地图数据集再添加kml数据”请问是单独创建一个新的kml 的DataSource,然后再添加吗,类似于下面这种

boolean kml = DataConversion.importKML( "/sdcard/JSTI/Project/路基路面/YK0+000——YK6+700.kml",kmlDatasource,"mykml2",true);
mMapControl.getMap().getLayers().add(kmlDatasource.getDatasets().get(kmlDatasource.getDatasets().getCount()-1),true);
是这样的,如果叠加显示有问题,建议先在桌面叠加显示,看看坐标系是否一致,如果不一致则需要开启动态投影,具体方法为先叠加天地图,接着用map.setDynamicProjection(true)开启动态投影,再叠加kml数据
...