首页 / 浏览问题 / 移动GIS / 问题详情
imobile如何给dxf文件数据源设置一个坐标系
12EXP 2023年02月06日
使用产品:imobile for Android-11.0.1-232 操作系统:Android12
数据类型:dxf文件
问题详细描述:加载dxf文件后,获取不到该数据源的坐标系,是否可以手动给该数据源设置一个坐标系?如何设置?

1个回答

您好,如果是只读打开dxf文件,可以用datasource.getPrjCoordSys()获取到数据源的坐标系,还可以用

datasource.getDatasets().get(0).getPrjCoordSys()获取到数据集的坐标系

如果您想要改变dxf数据集的坐标系,应该先把dxf导入到数据源,再对dxf数据集进行坐标系转换,

如果只想要获得显示效果,可以用setDynamicProjection(boolean value)对地图开启动态投影

3,685EXP 2023年02月06日
对dxf数据集进行坐标系转换,具体应该如何转换,有没有示例代码

如果只想要获得显示效果,可以用setDynamicProjection(boolean value)对地图开启动态投影

imobile不是不支持动态投影么,这个动态投影是一个意思吗?

1.imobile完全支持对本地数据的动态投影,也支持一张在线地图与本地数据的动态投影(步骤为先添加在线地图,再开启动态投影,最后叠加本地数据地图)

2.投影转换可以参考范例程序 投影转换(CoordSysTranslator)

按照你给的这个步骤试了一下,在天地图叠加一个本地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();
      }
   }
建议使用桌面叠加天地图与dxf数据查看效果是否正常
...