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,
但是移动端的只有三个操作,PINCH_END,PINCH_MOVE,PINCH_START,对于画图各种操作,还是不能满足,因此只能添加一个button,当需要绘制完成时,点击button,完成绘制。
目前移动端开发遇到的几个问题就是这几个,后续再更新!