您好,如果是只读打开dxf文件,可以用datasource.getPrjCoordSys()获取到数据源的坐标系,还可以用
datasource.getDatasets().get(0).getPrjCoordSys()获取到数据集的坐标系
如果您想要改变dxf数据集的坐标系,应该先把dxf导入到数据源,再对dxf数据集进行坐标系转换,
如果只想要获得显示效果,可以用setDynamicProjection(boolean value)对地图开启动态投影
setDynamicProjection(boolean value)
imobile不是不支持动态投影么,这个动态投影是一个意思吗?
按照你给的这个步骤试了一下,在天地图叠加一个本地dxf文件,显示空白,单独加载dxf是正常的,以下是我的代码:
// 打开地图 private boolean openMapTianditu(){ mWorkspace = new Workspace(); // 将地图显示空间和 工作空间关联 mMapView = (MapView)findViewById(R.id.mapView); mMapControl = mMapView.getMapControl(); mMapControl.getMap().setWorkspace(mWorkspace); DatasourceConnectionInfo dsInfo = new DatasourceConnectionInfo(); dsInfo.setAlias("TianDiTu1"); dsInfo.setEngineType(EngineType.OGC); //设置驱动名称 dsInfo.setDriver("WMTS"); dsInfo.setServer("http://t0.tianditu.gov.cn/img_c/wmts?tk=14759b2c325777b25ffef34dfb8f950f&dpi=96"); Datasource ds = mWorkspace.getDatasources().open(dsInfo); if(ds != null){ mMapControl.getMap().getLayers().add(ds.getDatasets().get(0), true); CallOut clo = new CallOut(this); clo.setLocation(113.680977,34.764058);//X:12654908.132363,Y:4131863.877855 经度:113°40'51.51",纬度:34°45'50.62" mMapView.addCallout(clo,"aaaaaaa"); //开启动态投影 mMapControl.getMap().setDynamicProjection(true); overDxf(); mMapControl.getMap().refresh(); // openMapDizhiyun(20); return true; } Log.e(this.getClass().getName(), "打开数据源失败了"); return true; } private void overDxf() { DatasourceConnectionInfo dsInfo = new DatasourceConnectionInfo(); dsInfo.setAlias("Dxf"); dsInfo.setEngineType(EngineType.VECTORFILE); // dsInfo.setEngineType(EngineType.IMAGEPLUGINS); // dsInfo.setEngineType(EngineType.Rest); //VECTORFILE,IMAGEPLUGINS,Rest //设置驱动名称 // dsInfo.setDriver("WMTS"); dsInfo.setServer(importDXF);//1,0,0 // dsInfo.setServer(importDWG);//1,0,0 // dsInfo.setServer(importIMG);//1,1,0 // dsInfo.setServer(importMIF);//1,0,0 // dsInfo.setServer(importSHP);//1,0,0 // dsInfo.setServer(importTIF);//1,1,0 Datasource ds = mWorkspace.getDatasources().open(dsInfo); if(ds != null){ // ds.getDatasets().get(0).setPrjCoordSys(new PrjCoordSys(PrjCoordSysType.PCS_CHINA_2000_3_DEGREE_GK_38)); mMapControl.getMap().getLayers().add(ds.getDatasets().get(0), true); Toast.makeText(this, "导入文件成功", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this, "导入文件失败", Toast.LENGTH_SHORT).show(); } }