本文主要是介绍iMobile与Online在线场景数据的交互,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
作者:xinxin
在SuperMap iMobile for Android中可以打开和加载数据,不仅支持离线三维数据,也支持在线的三维数据。下面将介绍三维数据的发布和与iMobile for Android的对接,在9D版本前SuperMap iMobile for Android支持在iServer中发布的三维数据,在9D版本后开始支持在SuperMap Online上发布的三维数据。
一、 iMobile与iServer上三维数据对接
1、 iServer上发布三维数据
(1) 准备数据
在iDesktop中将场景切成场景缓存,建议一般模型图层选osgb类型切,地形图层选tin类型切,在【基本信息】的缓存用途中选“Android系列设备”,如果这个数据打算在IOS设备上加载就选“IOS系列设备”,然后点生成即可。如果是用9D以前的iDesktop切的,生成场景缓存后进行纹理压缩,可以优化缓存数据在移动端的显示性能。
(2) 发布数据
启动iServer服务,登入iServer,进入【服务管理】,点击快速发布一个或一组服务,然后发布场景缓存的工作空间,按照发布的提示快速发布。发布成功后在【服务列表】中的【三维数据】中显示发布成功的三维数据。
2、 iMobile中加载三维数据
在iMobile中打开在线三维数据前需要知道打开三维数据对应的URL和场景名称,我这的测试关键代码如下:
String url = “http://192.168.15.71:8090/iserver/services/3D-MaSai/rest/realspace”; //其中url的ip是发布三维场景服务器的ip
String sceneName = "MaSai";
sceneControl.getScene().open(url,sceneName);
sceneControl.getScene().refresh();
二、 iMobile与Online上三维数据对接
1、 Online上发布三维数据
(1) 数据准备
切场景缓存和上面的步骤类似,切完场景缓存后需要打成.zip包,才能在SuperMap Online中上传;由于移动端底层做了一个场景缓存过滤,所以.zip包要以xxx_android.zip(xxx最好是小写字母)命名,由于后面获取数据服务名是包名,所以场景缓存中的场景名要和zip包名一致(即xxx_android),否则加载的时候要单独写场景名。
(2) 数据上传
数据准备好后,在浏览器中输入https://www.supermapol.com/,进入SuperMap Online网页,然后用邮箱或手机注册用户,注册成功后再登入,如下图:
登入后,点击【数据】-【上传数据】进入【我的资源】,在【我的数据】中点【上传数据】即可,然后根据提示选要上传的zip包数据,最后点上传,如下图:
上传成功后在状态栏显示“上传成功”,如下图:
(3) 数据发布
数据上传成功后发布服务,点击操作中的第一个图标,如下图:
发布成功后,状态显示“发布完成”,如下图:
2、 iMobile中加载三维数据
SuperMap Online中的数据分公有数据和私有数据,和SuperMap iMobile for Android的对接方式不一样,具体实现如下:
(1) iMobile打开公有数据
SuperMap Online上的公有数据只有Online的管理员才能发布,用iMobile for Android对接的时候不需要登入自己的Online用户,直接获取公有的服务数据,然后加载到场景中,实现的关键代码如下:
olAccountManager = OLAccountManager.getInstance(MainActivity.this);
olAccountManager.publicServiceWithCompletion(new LoginCallBackListenner() { @Overridepublic void onSuccess(String arg0) {// TODO Auto-generated method stub Log.e("MainActivity", "公有数据打开成功!");ArrayList<String> urls = olAccountManager.getpublicServiceList();ArrayList<String> names = olAccountManager.getpublicServiceNameList();if (urls.size()>0&&names.size()>0) {String url = urls.get(1);String name = names.get(1);Scene scene = sceneControl.getScene();scene.open(url,name);scene.setCreateSkirt(true);scene.refresh();}}@Overridepublic void onFailure(String arg0) {// TODO Auto-generated method stubLog.e("MainActivity", "公有数据打开失败!");}});
加载到场景后的效果图如下:
(2) iMobile打开私有数据
在SuperMap Online发布了私有的三维数据后,在iMobile for Android先要登入Online,然后在获取私有的服务数据,最后加载到场景中,关键代码如下:
olAccountManager = OLAccountManager.getInstance(MainActivity.this);try {olAccountManager.loginWithUsernameComplete("用户名", "密码", new LoginCallBackListenner() {@Overridepublic void onSuccess(String arg0) {// TODO Auto-generated method stubLog.e("MainActivity", "私有数据打开成功!");ArrayList<String> urls = olAccountManager.getPrivateServiceList();ArrayList<String> names = olAccountManager.getPrivateServiceNameList();if (urls.size()>0&&names.size()>0) {String url = urls.get(0);String name = names.get(0);Scene scene = sceneControl.getScene();boolean issuecs=scene.openPrivateSceneWithUrl(url, name);scene.refresh();}}@Overridepublic void onFailure(String arg0) {// TODO Auto-generated method stubLog.e("MainActivity", "私有数据打开失败!");}});} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}
加载到场景中的效果图如下:
注意:SuperMap Online每个用户只能免费上传500M的数据,且5000次/天 数据访问量,如果想扩大上传数据量和数据访问量,需要该买,具体标准如下图:
这篇关于iMobile与Online在线场景数据的交互的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!