使用产品: idesktopx SuperMap iMobile 11i(2024) for Android
问题详细描述:数据库的道路线二维空间数据,导出成web墨卡托的shp文件,将这个文件使用idesktopx的二维线转换成三维线,再保存场景并导出场景瓦片。在安卓中使用scenecontrl和Arcontrol加载,但加载出来的线显示异常,都连接到一个点。
/**
* 打开本地工作空间中的三维场景
*/
public void openLocalWorkspace() {
// 创建工作空间对象
Workspace workspace = new Workspace();
// 创建连接信息对象
WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
// 设置工作空间路径
info.setServer(currentARModel.getLocalWorkspacePath());
// 设置工作空间类型
info.setType(WorkspaceType.SXWU);
// 绑定工作空间到场景
sceneControl.getScene().setWorkspace(workspace);
// 打开工作空间
if (workspace.open(info)) {
// 打开第一个场景
boolean mOpen = sceneControl.getScene().open(workspace.getScenes().get(0));
// 获取所有图层
layer3Ds = sceneControl.getScene().getLayers();
// 获取图层数量
layerCount = layer3Ds.getCount();
}
double initZ = currentARModel.getInitZ();
//GPS坐标系转换为墨卡托投影坐标系(地理坐标与平面坐标转换)
double[] lonLat2Mercator = GPSConverterUtils.lonLat2Mercator(currentARModel.getLon(), currentARModel.getLat());
/**
* setSceneTransLation()方法
* 里面的三个参数:表示想把场景中哪个位置设置为AR原点
* 例如:一份带地理投影坐标系的场景,其大概的坐标范围都是(100000±, 100000±)那么这种距离远远超过AR中的可见距离,实际加载出来也看不见
* 所以 setSceneTransLation(-100000, -100000, 0)就等价于把AR相机原点(0, 0, 0)移动到(100000, 100000, 0)处
* 这样就能看到整个场景中的要素了。
*/
arControl.setSceneTransLation(0 - lonLat2Mercator[0], 0 - lonLat2Mercator[1], initZ);
// 隐藏平面提示
arControl.setARPlaneState(false);
// 弹出提示
Toast.makeText(this, "场景加载完毕", Toast.LENGTH_SHORT).show();
Log.d(TAG, "场景加载完毕!!!!!!");
}


