基于Cesium的移动端三维开发问题总结

Cesium现在越来越火,基于他的网页版开发也是非常的多,技术也相对成熟些,但是移动端的开发相对就少了很多,因为项目需要,需要将web端的相关功能移植到移动端来.,期间遇到了很多的坑,总结一下,包括以下几点:

1.离线数据加载和读取;

2.classification的问题;

3.鼠标绘制移动端解决方法。

以上几个问题有的已经解决,有的目前没有找到解决方案,只能换个方案实现。

1.离线数据加载和读取

之所以使用移动端,很大一部分原因是需要到外业操作,因此,在线访问的方法存在很多问题,即使走移动流量,也是一笔很大开销,而且数据加载速度也会非常的慢,因此最好的方法就是将三维数据和相关数据放在平板的SD卡中。

为了减少代码开发量,移动端也是选择html/css,js开发, 开发平台选择HBuilder。

将已经写好的web端代码,移植到HBuilder工程中,在需要访问数据地址的代码中,外围添加如下代码:

var sdPath;
mui.plusReady(function(){
	sdPath = dataPath();
    /*你的代码实现*/
});

function dataPath(){
	 
	// 导入android.os.Environment类对象
	var environment = plus.android.importClass("android.os.Environment");
	// 判断SD卡是否插入
	if(environment.getExternalStorageState() !== environment.MEDIA_MOUNTED){
		plus.nativeUI.toast('没有找到SD卡');
		return;
	}
	console.log("获取 Android 数据目录:"+environment.getDataDirectory());
	console.log("获取 Android 下载/缓存内容目录:"+environment.getDownloadCacheDirectory());
	console.log("获取外部存储目录即 SDCard:"+environment.getExternalStorageDirectory());
	console.log("获取外部存储设备的当前状态:"+environment.getExternalStorageState());
	//console.log("获取 Android 的根目录:"+getRootDirectory());
	return environment.getExternalStorageDirectory();
}

这样,你就可以访问到平板SD卡中的数据了。

2.classification的问题

classification能够实现图形贴地、贴模型的效果,是一个非常实用的功能,classificationType用来描述是否只贴地形(ClassificationType.TERRAIN),或者只贴3dtiles数据(ClassificationType.CESIUM_3D_TILE),或者二者都贴(ClassificationType.BOTH)。

在pc浏览器端,这个功能是非常容易实现的,官网例子很多:

https://sandcastle.cesium.com/?src=3D%20Tiles%20Photogrammetry%20Classification.html

https://sandcastle.cesium.com/?src=Classification%20Types.html

https://sandcastle.cesium.com/?src=Classification.html

这几个都是官网提供的示例。

但是在移动端就出现了问题,有些平板能够实现此效果,有些平板却不能实现,目前我在华为平板三星平板上做的测试,华为平板不能显示classification效果,三星的可以。为了能让程序在更多平板运行,只能退而求其次,用polygon拉伸盒子效果显示了。

3.鼠标绘制移动端解决方法

pc端Cesium鼠标操作,有ScreenSpaceEventType,

基于Cesium的移动端三维开发问题总结_第1张图片

但是移动端的只有三个操作,PINCH_END,PINCH_MOVE,PINCH_START,对于画图各种操作,还是不能满足,因此只能添加一个button,当需要绘制完成时,点击button,完成绘制。

目前移动端开发遇到的几个问题就是这几个,后续再更新!

 

你可能感兴趣的:(Cesium,Cesium,移动端,三维)