受疫情影响下,许多行业都受到了不同程度的冲击,尤其是那些需要员工亲自操作的企业,都受到了不同程度的影响,在这个大环境下,如何绝境求生成为了部分企业的当务之急,而对于另一部分人来说,大挑战之下往往有着大机遇,如何把握住机遇腾飞反而才是他们的选择,那么细数一下在这个时候,有哪些行业还能顶住,有哪些行业还在不断发展呢?
第一大行业就是互联网,作为这个时代的主题,互联网仍是站在顶点屹立不倒,互联网下的直播、短视频更是飞速发展,而停滞一段时间的快递行业也在交通复苏的情况下,恢复生机,而餐饮行业还无法缓过来,旅游业受疫情影响也是陷入低迷,养殖业也是出现了不同程度的亏损,物联网由于硬件生产需要人力资源,也受到了一定的影响,其他行业也是受到了不同程度的影响,那么在整体经济下降的趋势下,未来我们又有哪些路“好走”呢?
物联网可视化方向不失为一条好路,可视化被称为物联网的最后一公里,它有什么独到之处呢?可视化的管理,让人们能够在无接触的情况下去操作管理,同时物联网解决方案的提出本身就是为了解决问题的,它的形成与产生就是为了提高工作效率,减小管理难度的,物联网可视化的解决方案则使得在有网络的情况下,就可以通过解决方案来操作千里之外的机房、仓库、停车场等。
还有一点则是作为物联网的衍生行业,物联网可视化这一行业也只是最近几年才被发现其潜力,这表明了什么?这个行业还有许多的机遇,与互联网不同的是,物联网可视化还有极大的进步空间,同时迈入这个行业的人远远低于迈入互联网行业的,以出现的编程语言为例,互联网中有着c、c++、c#、java、javaScript、php、Python、go等语言,每种语言都有着其强大的功能,制作网站不仅有多种语言以供选择,还有着多种框架选择,而物联网可视化方向呢?
物联网可视化主要有哪些发展方向呢?目前来说,物联网可视化多是形成一个可视化解决方案的,什么是可视化解决方案?第一就是直观可视,有3D园区场景或是3D城市场景能够直观看到,第二就是能够解决某些问题,比如监测数据、温湿度控制、整体结构控制、水电管理等等,那么物联网可视化解决方案的制作流程大概有哪些步骤呢?
第一步就是有需求商,有需求产生才能去解决,某些企业、工厂相关负责人看到某个文章或是参加某个展会对于可视化解决方案感兴趣时,就有可能最终成为可视化解决方案的用户。用户提出一系列的设想与需求,综合方案功效与价格,来判断选择与否。
第二步就是制作解决方案,根据需求的不同制作的细节也不一致,但大体上都是需要物联网传感器,传感器用于采集信息,网关或者WiFi,用于传输信息,对应的解决方案平台或系统,用于接收处理信息,同时也是交给用户进行使用。
第二步也可以通过层级不同来进行划分,分为对象层、平台层、应用层。
对象层是传感器、设备等,平台层则对应数据采集、数据处理、数据存储、等等,应用层则是最终的成品结果、可视化应用或者是行业应用等。
一个好的物联网可视化解决方案需要专门人员制定方案、建模人员建模、硬件工程师来设置硬件、同时还需要软件工程师来开发程序系统,也正是因为这些复杂的要求,导致一个可视化解决方案制作难度大,周期长,甚至在有的人看来,可视化解决方案完全是吃力不讨好,但随着技术的发展,需求的变化,十年前不屑一顾的东西,现在却在崭露头角,阿里、腾讯、百度、华为等都纷纷进军物联网可视化行业,物联网可视化解决方案的广告也越来越多,这无不说明了物联网可视化这一条道路正在逐渐崛起。
那么有哪些手段可以让我们快速迈入这个行业呢?建模知识绕不过去,没有建模知识那么只有慢慢学,或者是外包给其他建模团队,有建模技术的可以迈入这个行业,同样,有传感器等硬件知识的也十分好入门,那么软件开发工程师该如何入门?以webgl协议为基础,学习threejs技术或是unity技术呢?诚然有这些技术基础的自然是能够迅速的迈入这个行业,但是没有以上所有基础的呢?一个字:难!
即使是新一代物联网可视化平台,ThingJS也是有门槛的,它是一个通往物联网可视化方向姐捷径,但是即使是捷径,也需要javaScript开发经验,javaScript语言和threejs相比有什么区别?threejs同样涉及到一部分建模知识,这对于小白来说是十分难受的,但是javaScript,则是一个入门更为简单的语言,ThingJS平台通过thingjs库,将开发难度降低成了只需要会javaScript语言就能开发三维场景的程度,开发人员则专注于代码的书写,建模人员则是专注于建模,开发不需要了解多少模型方面的知识,同时也是使用thingjs库,使得开发3D可视化场景更为简单!
以下就是ThingJS网站代码(由于该代码需要运行环境,所以只能在ThingJS平台上运行查看,Demo地址:https://www.thingjs.com/s/e507b4d9cb67a80f203824f9?params=105b0f77fd24654d4eebc434e9)
/**
* 说明:利用快捷界面库 显示单个物体的相关数据信息
* 操作:单击粮仓
* 教程:ThingJS教程——>示例讲解——>物体对象监控
* 难度:★★★☆☆
* 预备知识:Ajax数据对接 快捷界面库 Pick和选择
*/
var app = new THING.App({
"url": "models/silohouse",
"skyBox": "Universal"
});
var interval = null; // 计时器
var panel = null; // 统计面板
app.on('load', function () {
// 获取粮仓集合
var selector = app.query("[物体类型=粮仓]");
// 添加粮仓自定义属性monitorData,用来存储监控信息
selector.forEach(function (obj) {
obj.monitorData = {};
});
// 单击粮仓 设置选择集
selector.on('singleclick', function (ev) {
var object = ev.object;
if (app.selection.has(object)) {
// 如果当前点击的物体在选择集中 则不再添加
return;
}
app.selection.clear();
app.selection.select(object);
});
app.on('singleclick', function (ev) {
// 单击没有点击到物体 或 单击的物体不属于粮仓对象
if (!ev.picked || !selector.has(ev.object)) {
app.selection.clear();
}
}, '单击非粮仓清空选择集');
// 当粮仓被加入到选择集后
selector.on(THING.EventType.Select, function (ev) {
var object = ev.object;
object.style.outlineColor = 0x0000FF;
// 更新数据
update(object);
interval = setInterval(function () {
update(object);
}, 2000);
// 创建物体面板
createPanel(object);
});
// 当粮仓从选择集中清除时
selector.on(THING.EventType.Deselect, function (ev) {
var object = ev.object;
// 停止更新数据
clearInterval(interval);
// 清除勾边
object.style.outlineColor = null;
// 清楚物体面板
destroyPanel();
});
});
// ajax请求数据
function update(obj) {
// ***如设置服务器的CORS,实现跨域访问。会更简单***
// ***下例采用的不设置CORS的跨域实现方案***
// 请求传入参数为 { "id": id }
// 服务器返回的数据格式为 callback({"state":"success","data":{"id":"4967","temper":"15℃","humi":"59%","power":"20kWh"}})
$.ajax({
type: "get",
url: "https://3dmmd.cn/monitoringData",
data: { "id": obj.id },
dataType: "jsonp",
jsonpCallback: "callback",
success: function (d) {
// console.log(d);
obj.monitorData['能耗'] = d.data.power;
obj.monitorData['仓房温度'] = d.data.temper;
obj.monitorData['粮食湿度'] = d.data.humi;
}
});
}
// 创建面板
function createPanel(obj) {
if (panel) return;
// 统计信息
var info = {
"基本信息": {
},
"粮情信息": {
}
}
info["基本信息"]["仓库ID"] = obj.id;
panel = new THING.widget.Panel({
hasTitle: true,
titleText: obj.name,
dragable: true,
retractable: true,
width: "229px",
});
// addTab添加tab面板
panel.addTab(info);
panel.addString(obj.monitorData, "能耗").caption("能耗").link("基本信息");
panel.addString(obj.monitorData, "仓房温度").caption("仓房温度").link("粮情信息");
panel.addString(obj.monitorData, "粮食湿度").caption("粮食湿度").link("粮情信息");
panel.position = [50, 50];
}
// 删除面板
function destroyPanel() {
if (panel) {
panel.destroy();
panel = null;
}
}