HTML5 3D 在智慧物业/地产管理系统中的应用
概述
该博文主要展示采用 HT for Web 提供的可视化技术,对智慧房产、智慧物业相关方向的可视化呈现做的一点尝试。
传统的 智慧房产/楼宇自动化/智慧物业 常会采用 BIM(建筑信息模型 Building information modeling)软件,如 Autodesk 的 Revit 或 Bentley 这类建筑和工程软件,但这些 BIM 建模模型的数据往往过于庞大臃肿,绝大部分细节信息对楼宇自控意义不大,反而影响拖累了行业 Web SCADA 或 Web 组态监控的趋势。
采用以 Hightopo 的 HT for Web 产品轻量化 HTML5/WebGL 建模的方案,能够实现快速建模、运行时轻量化到甚至手机终端浏览器即可 3D 可视化运维的良好效果。
希望该案例能在 Web3D 和数据可视化大行其道的当下为大家拓宽思路,提供一些关于室内场景呈现的灵感。
链接地址:http://www.hightopo.com/demo/estate/
目标应用场景
1.智慧物业,针对小区物业管理、住户日常产生的水电气费用的检测等提供可视化解决方案。
2.商品房销售可在大屏上对室内布局、各种户型进行展示,给购房客户展示各个户型的精装修效果,更可以无缝对接VR。
3.针对蛋壳、58同城、优客逸家等租房平台,在PC端和移动端进行3D实景展示,让租客们可以足不出户就了解到各个房源的布局和设备设施,以及其他租户的用户满意度。

采用 HT 实现楼层动画
if (data.getAnimation()) {
return data.getAnimation();
} else {
return {
narrow: {
from: 0.012*5*3,
to: 0.01*5*3,
duration: 250,
easing: 'Linear',
next: 'setPositionBack',
onUpdate: function (value) {
this.setSize3d(value, (0.012*5*3-value+(0.01*5*3)), value);
},
onComplete: () => {
//...
}
},
setPositionBack: {
//...
},
allFloorsMove: {
//...
},
setPositionForward: {
//...
},
expand: {
from: 0.01*5*3,
to: 0.012*5*3,
duration: 250,
easing: 'Linear',
onUpdate: value => {
this.currentSelectedFloor.setSize3d(value, (0.012*5*3-(value-(0.01*5*3))), value);
},
onComplete: () => {
this.openLightOrNot(true);
this.animationControl(1, false);
this.changeFloorText();
}
},
start: ['narrow']
}
}
换层动画设计成 5 个阶段:
1.当前楼层收缩成正常大小
2.完成后通过设置的 next 进入后退动画
3.待当前楼层退回到主轴后,全楼层共同平移
4. 平移到目标高度后,触发楼层前移
5.前移完毕再进行变大变矮的动画
该动画采用重写 ht.DataModel 的 getDataAnimation() 方法,对拥有动画需要的三角体和楼层对象(ht.Node)进行动画匹配,在第一次执行时返回包含动画逻辑的Anim,
此后以每 50 毫秒 (3帧左右一次)的频率执行动画,
this.dm3d.enableAnimation(50);
由于可点选的三角体处于持续上下移动和绕自身旋转的动画中,故 3D 动画不会停止,无需调用 disableAnimation 方法,此时就需要特别注意动画执行间隔和多个动画阶段中 duration 的搭配,谨防内存泄漏。
三角体动画设置不多赘述:
if (this.animationFlags.triangle3dAnimation) {
if (data.getAnimation()) {
return data.getAnimation();
} else {
return {
up: {
from: 90,
to: 130,
next: "down",
duration: 1500,
easing: 'Linear',
onUpdate: function (value) {
this.setPosition3d(this.getPosition3d()[0], value, this.getPosition3d()[2]);
}
},
down: {
from: 130,
to: 90,
duration: 1500,
easing: 'Linear',
onUpdate: function (value) {
this.setPosition3d(this.getPosition3d()[0], value, this.getPosition3d()[2]);
}
},
rotate: {
from: 0,
to: 360,
duration: 3000,
easing: 'Linear',
onUpdate: function (value) {
this.setRotationY(value * Math.PI / 180);
}
},
start: ['up', 'rotate']
}
}
}
效果展示:

ht.graph.GraphView 中的按钮动画实现
按钮和楼层动画可以相互触发,楼层按钮动画分为两种类型
1.纵向平移,同楼层动画
translate: {
from: 0,
to: this.distanceToMoveButton,
duration: 1250,
easing: 'Linear',
onUpdate: value => {
const list = this.dm2d.getDatas();
list.each(item => {
if (/^button/.test(item.getTag())) {
const yPos = this.buttonsCurrentYPos[item.a('buttonNum')] + value;
item.setPosition(item.getPosition()['x'], yPos);
}
});
},
}
2.根据是否是当前层进行放大缩小,缩放的逻辑稍微有些绕脑,主要分为两类
a.只放大,只缩小
b.会跨越中间层,如当前层为F1,点击F4就会出现F2先放大再缩小的情况。
本人将缩放动画分为10类型
start: ['translate', 'scaleBM', 'scaleBL', 'scaleMB', 'scaleMM', 'scaleML', 'scaleML2', 'scaleLB', 'scaleLM', 'scaleLM2', 'scaleLL']
其中, middle to little / little to middle / little to little 这三种情况会出现跨中间行,即先大后小的动画
设置 2D 楼层按钮动画需要用到的四个关键方法:
/**
* 获取缩放动画类型
*/
getScaleTypeForButton(currentSize, nextSize, turn) {
//...
} /**
* 设置 button 的缩放类型
*/
setScaleTypeToButton(selectedFloor) {
//...
} /**
* 计算 button 需要移动的距离
* @param {ht.Data} selectedFloor - 选中的楼层
* @param {ht.Data} selectedFloorBefore - 之前选中的楼层
*/
countDistanceToMoveButton(selectedFloor, selectedFloorBefore) {
//...
} /**
* 更新各个 button 所在高度
*/
refreshButtonsCurrentYPos() {
//...
}
效果展示:

2D页面 与 3D场景的交互
该 demo 主要涉及到两处 2d 与 3d 交互:
1.按钮与楼层之间的相互触发。
设置一个控制器:
/**
* 动画控制器
* @param {Number} animateNum - 动画编号
* @param {Boolean} flag - 开启或关闭
*/
animationControl(animateNum, flag) {
//...
}
2.点选三角体,右侧信息栏对应租户信息出现边框
简单说来就是 2D 3D 通过 tag 联系, 改变 style 中边框大小来高亮选中项
switch (tag) {
case 'triangle0':
this.dm2d.getDataByTag('rightRect1').s('shape.border.width', 3);
break;
//...
}
//...
// 清空
this.dm2d.getDataByTag('rightRect1').s('shape.border.width', 0);
效果展示:

PS
任何疑问或建议欢迎留言讨论。
HTML5 3D 在智慧物业/地产管理系统中的应用的更多相关文章
- 无插件纯Web HTML5 3D机房 进阶篇(新增设备、线缆、巡查等功能)
前情提要 前阵子写了一篇无插件纯Web 3D机房,介绍了如何用html5在网页上创建无插件的精美3d机房场景.这两个月以来,陆续收到很多朋友的鼓(膝)励(盖),受宠若惊之余,对索要源代码的朋友都已经尽 ...
- 基于 HTML5 WebGL 的智慧楼宇可视化系统
前言 可视化的智慧楼宇在 21 世纪是有急迫需求的,中国被世界称为"基建狂魔",全球高层建筑数量位居首位,所以对于楼宇的监控是必不可少.智慧楼宇可视化系统更多突出的是管理方面的功能 ...
- 基于 HTML5 WebGL 的智慧楼宇三维可视化监控
前言 可视化的智慧楼宇在 21 世纪是有急迫需求的,中国被世界称为"基建狂魔",全球高层建筑数量位居首位,所以对于楼宇的监控是必不可少.智慧楼宇可视化系统更多突出的是管理方面的功能 ...
- 9个超绚丽的HTML5 3D图片动画特效
在Web 1.0时代,我们的网页中图片数量非常少,而且都是以静态图片为主.HTML5的出现,推动了Web 2.0的发展,同时也催生出了很多绚丽的HTML5图片动画特效,特别是有些还有3D的动画效果.本 ...
- 8款效果惊艳的HTML5 3D动画
1.HTML5 WebGL水面水波荡漾特效 之前已经向各位分享过一款很逼真的HTML5水波荡漾特效,效果还算不错.今天再向大家分享一款更加给力的HTML5水波动画,画面上是一个大水池,水池底部是一颗大 ...
- 超给力的HTML5 3D动画欣赏及源码下载
HTML5有着非常巨大的魅力,尤其是CSS3和Cavnas,可以帮助页面渲染得非常炫酷.值得一提的是,利用HTML5的3D特性可以帮助你更加方便地在网页上实现3D动画特效.本文分享的这些HTML5 3 ...
- 基于 HTML5 OpenLayers3 实现 GIS 电信资源管理系统
前言 通过结合 HTML5 和 OpenLayers 可以组合成非常棒的一个电信地图网络拓扑图的应用,形成的效果可以用来作为电信资源管理系统,美食定位分享软件,片区找房,绘制铁轨线路等等,各个领域都能 ...
- C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息
在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码,希望从更高一个层次,向大家介绍微信的应用 ...
- PDA无线数据采集器在仓库管理系统中的应用
条码数据采集器在仓库管理系统中的应用,条码数据采集器,顾名思义就是通过扫描货物条码,对货物进行数量分类采集,方便仓库正规化管理.条码数据采集器是现代化条码仓库管理系统中不可缺少的一部分,能提升企业的整 ...
随机推荐
- 基于JavaScript google map集成流程
google地图集成流程 一.获取Google Map API密钥 1.进入Google官网 => https://www.google.com.hk/ ,申请一个谷歌账号(如果没有)然后访问下 ...
- 面试连环炮系列(十五):说说Eureka的高可用方案
说说Eureka的高可用方案 至少3个Eureka实例才能满足高可用,配置方法如下: 准备三个节点node1,node2,node3. 在每个实例的application.xml文件里加入 eurek ...
- JS---案例:简单轮播图
案例:简单轮播图 div叫盒子,里面包了2个小盒子,一个是inner,一个是square inner的div是放ul,里面有li,a,和图片 square的div里面放span,是轮播图的小点 < ...
- Linux下修改MySQL数据库数据文件路径
使用rpm安装方式安装完MySQL数据库后,数据文件的默认路径为/var/lib/mysql,然而根目录并不适合用于存储数据文件. 原路径:/var/lib/mysql 目标路径:/home/mysq ...
- 自定义Metadata验证属性
一.定义 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...
- sed 使用正则表达式进行替换
echo "111(222)333" | sed 's/(\(.*\))\(.*\)/\2\2\2/' \1 \2 表示匹配的第几个() 在进行模式匹配时,() 需要加转义符号\ ...
- CMake工程找不到相应的cuDNN版本的问题
(1) 去官网下载相应的版本,因为电脑之前安装的是 CUDA8. ,找跟 CUDA 版本兼容的 cuDNN 下载即可,我选择的是 cuDNN v7.(Deb) 和 cuDNN v7.1.4 Deve ...
- 【戾气满满】Ubuntu 18.04使用QT通过FreeTDS+unixODBC连接MSSQL填坑记(含泪亲测可用)
前言 照例废话几句,想玩下QT,但是学习吧总得想点事情做啊,单纯学习语法用法这些?反正我是学不下去的,脑袋一拍,就先学下怎么连接数据库吧!然而万万没想到,我这是给自己挖了一个深深的坑啊! 学习自然去官 ...
- 一步一步搭建 Oracle Data Guard
前言 为什么要写前言,因为我要吐槽一下.作为一个Java后端,搭建Oracle Data Guard真的是一件,嗯,既不专业也不擅长的事情,然而,为什么还是要我来弄? 因为DBA出差了,我们这边急着要 ...
- spring单元测试下模拟rabbitmq
gradle添加引用 compile 'org.springframework.boot:spring-boot-starter-amqp' testCompile 'com.github.fridu ...