iMobile与Online在线场景数据的交互

326 篇文章 85 订阅
57 篇文章 12 订阅

作者: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() {					
					@Override
					public 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();
						}
					}
					
					@Override
					public void onFailure(String arg0) {
						// TODO Auto-generated method stub
						Log.e("MainActivity", "公有数据打开失败!");
					}
				});

加载到场景后的效果图如下:
这里写图片描述
(2) iMobile打开私有数据
在SuperMap Online发布了私有的三维数据后,在iMobile for Android先要登入Online,然后在获取私有的服务数据,最后加载到场景中,关键代码如下:

olAccountManager = OLAccountManager.getInstance(MainActivity.this);
				try {
					olAccountManager.loginWithUsernameComplete("用户名", "密码", new LoginCallBackListenner() {
						
						@Override
						public void onSuccess(String arg0) {
							// TODO Auto-generated method stub
							Log.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();
							}
						}
						
						@Override
						public void onFailure(String arg0) {
							// TODO Auto-generated method stub
							Log.e("MainActivity", "私有数据打开失败!");
							
						}
					});
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

加载到场景中的效果图如下:
这里写图片描述
注意:SuperMap Online每个用户只能免费上传500M的数据,且5000次/天 数据访问量,如果想扩大上传数据量和数据访问量,需要该买,具体标准如下图:
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值