java智慧停车_GitHub - read125/example-parking: 基于BIM智慧停车的室内定位示例
功能介绍
基于BIMFACE改变构件颜色的扩展功能,可以直观显示停车场内车库占用的比例情况。基于BIMFACE增加图片标签的扩展功能,同时结合室内定位装置读取的地下车库行人的实时坐标模拟行人的走动,点击行人的标签可以高亮显示对应的车位,实现车位引导的功能。
效果图
主要逻辑
通过BIMFACE服务端API和前端JavaScript API灵活使用构建停车场应用场景。
逻辑#1 - 构建停车场停车位列表
通过调用BIMFACE服务端"获取文件转换的构件列表"API,根据构件类型ID、族和族类型获取"停车位"构件列表:
BimfaceClient bimfaceClient = new BimfaceClient(appKey, appSecret);
List elements = bimfaceClient.getElements(fileId, categoryId, family, familyType);
通过调用BIMFACE服务端"获取文件转换的构件属性"API,根据fileId、elementId获取构件属性:
PropertyBean propertyBean = bimfaceClient.getProperty(fileId, elementId);
示例代码段:
BimfaceClient bimfaceClient = new BimfaceClient("Y3vZC8N79ia7JMNBGNBMYuRnJkf12345", "1TrD4kG3h4X2rc3bHa69abxk6sK12345");
Long fileId = 1187125317033123L;
List elements = bimfaceClient.getElements(fileId, "-2000151", "车-停车位-基于面", "车-停车位-基于面");
for (String elementId : elements) {
PropertyBean propertyBean = bimfaceClient.getProperty(fileId, elementId);
//获取楼层属性
PropertyGroup basicGroup = propertyBean.getProperties().stream().filter(propertyGroup -> propertyGroup.getGroup().equals("基本属性")).findFirst().get();
String floor = basicGroup.getItems().stream().filter(propertyItem -> propertyItem.getKey().equals("floor")).findFirst().get().getValue().toString();
//获取停车位编号属性
PropertyGroup signGroup = propertyBean.getProperties().stream().filter(propertyGroup -> propertyGroup.getGroup().equals("标识数据")).findFirst().get();
String parkNumber = signGroup.getItems().stream().filter(propertyItem -> propertyItem.getKey().equals("编号")).findFirst().get().getValue().toString();
......
}
通过以上两个API就可以构建出停车位业务数据(停车位楼层、编号、是否停车等),有了相关业务数据可以提供前端随意使用。
逻辑#2 - 构建停车场人员列表
根据真实场景,通过第三方设备实时采集停车场人员信息(人员编号、姓名、实时坐标、对应的停车位等)并提供应用使用。(此示例程序中,通过模拟构造一些人员的实时数据,供前端使用达到人员动态走动和找车位的效果)
前端实现
基本流程
引用BIMFACE的JavaScript显示组件库
定义DOM元素,用于在该DOM元素中显示模型或图纸
初始化JavaScript显示组件
var options = new BimfaceSDKLoaderConfig();
options.viewToken = viewToken;
BimfaceSDKLoader.load(options, successCallback, failureCallback);
function successCallback() {
// 获取DOM元素
var dom4Show = document.getElementById('view3d');
// 配置参数
var config = new Glodon.Bimface.Viewer.Viewer3DConfig();
config.domElement = dom4Show;
// 创建viewer3D对象
viewer3D = new Glodon.Bimface.Viewer.Viewer3D(config);
// 添加模型
viewer3D.addView(viewToken);
// 监听添加view完成的事件
viewer3D.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.ViewAdded, function() {
// 渲染3D模型
viewer3D.render();
//调用viewer3D对象的Method,可以继续扩展功能
});
}
function failureCallback(error) {
console.log(error);
};
人的标识处理
原理就是运用了Bmiface的批注方式,先初始化绘制器,然后在绘制器上打标签。
初始化绘制器
var drawaleContainerConfig = new Glodon.Bimface.Plugins.Drawable.DrawableContainerConfig();
drawaleContainerConfig.viewer = me.viewer3D;
me.drawableContainer = new Glodon.Bimface.Plugins.Drawable.DrawableContainer(drawaleContainerConfig);
打标签
me.tagArr = [];
for(var i=0; i
var imageConfig = new Glodon.Bimface.Plugins.Drawable.ImageConfig();
//设置图片路径
imageConfig.src = me.img_other;
//设置图片坐标
imageConfig.worldPosition = res.data[i];
//创建标签
var tag = new Glodon.Bimface.Plugins.Drawable.Image(imageConfig);
//判断该标签是否当前用户
if(tag.worldPosition.name == me.user){
tag.setSrc(me.img_cur);
me.user = tag.worldPosition.name;
me.parkNum = tag.worldPosition.parkNumber;
};
tagArr.push(tag);
//对标签的点击做相应处理
tag.onClick(function(){
var isClick = (this.getSrc()==me.img_other);
for(var i=0; i
me.tagArr[i].setSrc(me.img_other);
}
if(isClick){
this.setSrc(me.img_cur);
me.user = this.worldPosition.name;
me.parkNum = this.worldPosition.parkNumber;
me.parkPoint(this.worldPosition.parkId);
} else {
this.setSrc(me.img_cur);
}
})
}
me.drawableContainer.addItems(me.tagArr);
调用API方法
overrideComponentsColorById(objectIds, color) 改变构件颜色(用于停车位设置高亮)
restoreComponentsColorById(objectIds) 恢复构件颜色(重置停车位)
isolateComponentsByObjectData(conditions, state) 根据筛选条件隔离构件 (用于在初始化模型时候将停车场按楼层单独隔离显示)
clearIsolation() 清楚隔离 (楼层切换时候先恢复到初始状态)
ps. 该Demo基于vue+webpack进行开发打包,如用jquery/React实现同上。
查看示例
java智慧停车_GitHub - read125/example-parking: 基于BIM智慧停车的室内定位示例相关推荐
- android室内定位+3d,基于Android平台的手机室内定位及导航的设计与实现
摘要: 随着无线通信网络技术的发展,智能手机逐渐融入到人们的日常生活中.它不仅满足当今人们对于通话短信等基本功能的需求,而且还满足人们对于娱乐.上网.社交等功能的需求.导航功能是现在人们常用的一个功能 ...
- 室内定位算法_【好设计论文】基于行人航迹推算的室内定位算法研究
摘要:针对室内定位的实际应用需求,提出了基于行人航迹推算算法(PDR)的适用于手机采集数据的室内定位方法.不同于传统的数据采集方法,该种定位方法利用手机得到加速度.陀螺仪以及地磁原始数据,通过分析加速 ...
- android室内定位传感器辅助pdr jar,基于PDR辅助的视觉室内定位算法的研究
1引言由于室内环境复杂多变,人们对于室内位置服务的要求也越来越高.一系列的定位技术如Wi-Fi定位.蓝牙定位.惯性导航系统(INS, Inertial NavigationS y s t e m).基 ...
- python卡尔曼滤波室内定位_基于核函数与卡尔曼滤波的室内定位方法
随着当今社会的发展,基于位置的服务变得越来越重要.室外定位技术以全球定位系统为基础,包括美国的GPS定位系统,俄罗斯的GLONASS定位系统以及我国自主研制的北斗卫星导航定位系统,利用这些定位系统可以 ...
- python卡尔曼滤波室内定位_基于扩展卡尔曼滤波算法的室内定位跟踪系统
基于扩展卡尔曼滤波算法的室内定位跟踪系统 凌海波,周先存 [摘 要] 摘要:为了解决无线室内定位系统实时跟踪位置坐标误差较大问题, 提出一种基于扩展卡尔曼滤波 (EKF) 算法的室内定位方法.系统采用 ...
- 基于Powell共轭方向法的UWB室内定位构型优化算法
基于Powell共轭方向法的UWB室内定位构型优化算法 阚昊宇 摘要: UWB室内定位系统的服务性能及定位精度很大程度上受UWB基站构型影响,而GDOP是衡量系统定位服务性能的重要指标.目前关于UWB ...
- 基于二维码的室内定位技术(一)——原理
作者介绍:周语馨 from 南京大学 to 英特尔亚太研发有限公司 504849766@qq.com 原文地址: https://zhou-yuxin.github.io 哎,不知道怎么说呢.自从朱富 ...
- 【可见光室内定位】(二)基于光电器件PD的可见光室内定位技术
目录 格物致知 ⭕️ 可见光定位系统 定位方案 1️⃣ 几何定位法 2️⃣ 指纹分析法 3️⃣ 标签定位法 - 原理 - 具体流程 - 采样信息 ⭕️ 可见光通信系统
- 基于蓝牙信标的融合室内定位解决方案-蓝牙定位-新导智能
针对于老年人对养老机构的服务质量要求较高:传统的安防监护已经无法满足老人的监护需求,以及日常管理的需要:苏州新导在整个养老公寓部署无线网络,部署12台室外管网,8台室内定位网关进行信号补盲:老人配置集 ...
最新文章
- java怎么修改fxml,JavaFX FXML修改列表
- 【待继续研究】解析机器学习技术在反欺诈领域的应用
- 【机器学习入门笔记8:TensorFlow运算实质】20190216
- Hibernate持久化对象三种状态
- CVer入门必备:计算机视觉的深度学习实践
- 实现python扩展的C API方法过程全纪录(windows)
- python3有什么用_Python 3.9的到来到底是意味着什么
- 多么痛的领悟!差不多2015年的时候,我开始关注股票
- CSS3 column属性族firefox浏览器下的问题
- sleuth zipkin mysql_springCloud的使用08-----服务链路追踪(sleuth+zipkin)
- MySQL(7)-----常用约束
- 考研清华985信号与系统参考书籍(郑君里)重点
- VS2005精简版(二)
- Photoshop CS3 中文版安装教程
- Pr入门系列之十四:处理音频
- 【Linux】Ubuntu18.04安装微信和QQ【2022】
- Tableau 日月环比同比
- 【2023校招刷题】第二期:数字IC笔试模拟题(2)详细解析版
- 【文献阅读笔记之】ACFNet: Attentional Class Feature Network for Semantic Segmentation
- 用Python爬取wallhaven高清原图
热门文章
- 怎么测试自己适合哪种发型的软件,什么软件可以测试自己适合的发型想要持久定型除了烫发还有别的方法吗...
- MSCOMCTL.OCX文件缺失问题
- 见山还是山,见水还是水,见程序还是程序
- springboot理发店会员管理系统java
- kotlin实现bean的注入
- 使用mxGraph绘制流程图
- rhel 5.8 安装iotop CONFIG_TASK_DELAY_ACCT not enabled in kernel, cannot determine
- 关于jupyter打开后代码灰色问题
- 30 + 优秀电子商务网站设计灵感
- 寻找数组中第k大的元素