句句斟酌,细说物联网行业怎样做可视化大屏?

371 阅读3分钟

随着企业对物联网可视化愈发重视,做3D可视化大屏解决方案的公司也越来越多。而我们可以给到大家的有两种方案,一种全权委托,包括出方案实地考察安装部署,技术指导等等可能还有更多服务,而今天小编要讲的是另一种,物联网可视化pass平台。什么是pass平台,简单说,技术人员自己在thingjs平台上开发,通过拖拽,简单写代码,不要怀疑,前端工程师完全可以做到的事情,前提你要掌握js,熟悉webgl,就能做出可视化DEMO,对接业务数据使其应用起来!

场景搭建

ThingJS平台为用户提供了以下两种方式搭建场景:

通过CamBuilder客户端搭建3D场景

通过CityBuilder城市地图搭建3D场景

CamBuilder

通过客户端下载需要以下几个步骤:

通过ThingJS官网下载3D园区搭建工具,在出现的下载详情面板中点击下载按钮

下载后可登陆账号,点击工具下的「用户手册」可查看使用教程

将场景导出上传或同步至ThingJS平台

选择园区资源下的场景进行开发

后续操作详见 在线开发 - 菜单导航 - 资源管理 - 园区

CityBuilder

在“地图”资源面板中点击“新建地图”

在出现的弹出面版中输入地图名称,点击“下一步”

选择“一键城市”和“上传数据”中的任一选项。若选择“上传数据”,地图面板将同时新增一个地图资源;若选择“一键城市”,需选择“城市范围”和“模板”并点击“下一步”,待数据下载完成之后,点击“进入编辑”,地图面板将新增一个地图资源

选择地图资源下的地图进行开发

后续操作详见 在线开发 - 菜单导航 - 资源管理 - 地图

引用跨域页面js

/**

* 说明:iframe引用跨域的页面 使用 H5的postMessage方法 进行 函数传参相互调用

* 操作:

* 3D场景中单击物体 将物体name传给页面

* 页面中单击按钮 进入相应物体的层级,进入层级后 右键返回上一级

* 教程:ThingJS教程——>界面——>iframe引用页面

* 难度:★★★★☆

*/

var app = new THING.App({

url: 'https://www.thingjs.com/static/models/storehouse'// 场景地址

});

app.on('load', function(ev) {

app.level.change(ev.campus);

})

// 界面组件

var panel = new THING.widget.Panel();

// 创建数据对象

var dataObj = {

iframe: 'https://3dmmd.cn/test/page01/index.html'

};

var iframe = panel.addIframe(dataObj, 'iframe').caption('iframe');

iframe.setHeight('100px');

var iframeDom = iframe.domElement.getElementsByTagName('iframe')[0];

// 设置iframe滚动条

// iframeDom.scrolling = "auto";

app.on(THING.EventType.SingleClick, function (ev) {

if (ev.picked && ev.object) {

var obj = ev.object;

var name = obj.name;

var message = {

'funcName': 'changeText', // 所要调用iframe页面里的函数名

'param': {

'name': name

}

}

// 向引用的iframe页面发送数据

// 第一个参数是数据内容,

// 第二个参数是接收消息的窗口的源(origin),即"协议 + 域名 + 端口"。也可以设为*,表示不限制域名,向所有窗口发送

iframeDom.contentWindow.postMessage(message, '*');

}

})

function changeLevel(value) {

var obj = app.query(value)[0];

if (obj) {

app.level.change(obj);

}

}

// 接收iframe页面传送的数据

window.addEventListener('message', function (e) {

var data = e.data;

var funcName = data.funcName;

var param = data.param;

window[funcName](param.name);

})