一文读懂HTTP/2及HTTP/3特性

智能商场管理系统的开发实践

  现在的商场管理者在管理商场的同时面临着一些无法避免的问题比如:人员监管不到位、效率低下、商场同质化严重,人流量少等。发现了这些问题作为开发人员的我们怎能视而不见,我们的责任就是发现问题解决问题,提供更好更智能的服务。因此就此问题我们想出了相应的解决办法,使用JS+Three.js+Echart开发了一个功能界面,为商场管理者提供更加高效的管理方法。
  
  通过商场管理系统的相应界面,商场管理者可实时获取商场的人流数据、人流密度的热力分布、可实时查看商场各处的视频监控信息、安保人员的实时位置信息及运动轨迹。针对突发状况可以即时调度、快速处理。还可以依据大数据分析周边业态情况,为制定运营策略提供数据支持等。
  
  就以上的市场实际情况需求,开始了我的功能开发之旅。
  
  我使用ESMap的地图编辑器编辑好商场地图后,开始布局规划解决问题
  
  开发流程如下:
  
  首先,实现一个商场客流量信息的饼状统计表,还有各个时间点的流量趋势和人群密度的线性图表。再实现一个控制面板,可以通过控制面板根据地图的热力图查看商场各个位置客流量以及各个位置的实时视频等,情况一目了然;最后做一个可以搜索店铺客流量及营业额情况的搜索框。
  
  1.方便开发,先使用模拟数据创建图表,投入使用后自行接入后台数据即可。
  
  (1)使用Echart创建统计客流量的饼状图:
  
  2.check控制面板
  
  开发一个控制面板,对管理者来说可以更好的全局掌握控制商场情况我在控制面板上加了实时视频,全景漫游和客流分布,下面就这三个功能的实现过程做下介绍。
  
  (1)客流分布热力图功能,以下载入的是模拟数据,投入使用后可直接载入实际数据,根据数据体现热力图的情况。
  
  function exec(fnum, points) {//绘制热力图函数
  
  var floorLayer = map.getFloor(fnum);//获取应用楼层
  
  heatmapInstance.clearPoints();//清除热力点
  
  heatmapInstance.addPoints(points);//热力点添加到热力图
  
  //热力图应用到哪一楼层
  
  infos.forEach(function (info) {
  
  var floorLayer = map.getFloor(info.fnum);
  
  var layer = floorLayer.getOrCreateLayerByName("cameras", esmap.ESLayerType.MODEL3D);
  
  var _id = 1;
  
  info.cameras.forEach(function (camera) {
  
  var im = new esmap.ES3DMarker({
  
  x: camera.x,
  
  y: camera.y,
  
  id: _id++,
  
  name: "camera",
  
  url: url,
  
  size: 44,
  
  angle: ang,
  
  height: 3,
  
  showLevel: 16,
  
  spritify: tru
  
  复制代码
  
  展示的弹框可拖拽、大小可调整,功能实现如下函数:
  
  复制代码
  
  /*可拖拽可放大缩小弹框*/
  
  function createPopBox(pano) { // pano: 0.视频,1.全景
  
  /*-------------------------- +
  
  获取id, class, tagName 函数
  
  +-------------------------- */
  
  var get = {
  
  byId: function (id) {
  
  return typeof id === "string" ? document.getElementById(id) : id;
  
  },
  
  byClass: function (sClass, oParent) {
  
  var aClass = [];
  
  var reClass = new RegExp("(^| )" + sClass + "( |$)");
  
  var aElem = this.byTagName("*"www.yongshi123.cn, oParent);
  
  for (var i = 0; i < aElem.length; i++) reClass.test(aElem[www.dfgjpt.com].className) && aClass.push(aElem[i]);
  
  container = prop.container;
  
  camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 1, 1100);
  
  scene = new THREE.Scene();
  
  texture_placeholder = document.createElement('canvas');
  
  texture_placeholder.width = 128;
  
  texture_placeholder.height = 128;
  
  var context = texture_placeholder.getContext('2d');
  
  context.fillStyle = 'rgb( 200, 200, 200 )';
  
  context.fillRect(0, 0, texture_placeholder.width, texture_placeholder.height);
  
  if (prop.six) {
  
  var materials = [
  
  loadTexture(prop.panorama + 'r.jpg'), // right
  
  loadTexture(prop.panorama + 'l.jpg'), // left
  
  loadTexture(prop.panorama + 'u.jpg'), // top
  
  loadTexture(prop.panorama + 'd.jpg'), // bottom
  
  loadTexture(prop.panorama + 'b.jpg'), // back
  
  loadTexture(prop.panorama + 'f.jpg') // front
  
  ];
  
  var matss = new THREE.MultiMaterial(materials)
  
  mesh = new THREE.Mesh(new www.mhylpt.com THREE.BoxGeometry(300, 300, 300, 7, 7, 7), matss);
  
  } else {
  
  var geometry = new THREE.SphereGeometry(100, 64, 64, -1.5707963267948966);
  
  var material = new THREE.MeshBasicMaterial({
  
  map: new THREE.TextureLoader().load(prop.panorama),
  
  })
  
  mesh = new THREE.Mesh(www.yongshiyule178.com geometry, material);
  
  }
  
  mesh.scale.x = -1;
  
  scene.add(mesh);
  
  renderer = new THREE.WebGLRenderer({//创建一个webGL渲染器,renderer
  
  antialias: true
  
  })
  
  renderer.setPixelRatio(window.devicePixelRatio);//设备设置像素比
  
  renderer.setSize(container.clientWidth, container.clientHeight);//调整输出canvas尺寸
  
  container.appendChild(renderer.domElement);
  
  //监听鼠标各种事件
  
     container.addEventListener('mousedown', onDocumentMouseDown, false);
  
  container.addEventListener('mousemove', onDocumentMouseMove, false);
  
  container.addEventListener('mouseup', www.myzx1.com onDocumentMouseUp, false);
  
  container.addEventListener('wheel'www.huayi157.com, onDocumentMouseWheel, false);
  
  container.addEventListener('touchstart', onDocumentTouchStart, false);
  
  function searchByName(name) {
  
  Listmodel.item = [];
  
  if (!name) return;
  
  var data = map.mapService.sourceData.floors;//获取地图信息
  
  for (var ele of data) {//遍历获取到的信息
  
  for (var i in ele.Rooms) { //遍历获取到数组里的Rooms
  
  var el = ele.Rooms[i];
  
  if (el.name) {
  
  var a = el.name.indexOf(name);//查找输入的店名是否在地图内存在
  
  if (a != -1) {//如果存在
  
  var obj = {
  
  x: el.CenX,
  
  y: el.CenY,
  
  id: el._id,
  
  fnum: ele.floornum,
  
  以上就是我就商场管理者在管理过程中所面临的一些问题,开发的商场管理系统的一个界面,当然我只是简单实现了一些功能,在实际开发过程可根据实际情况定制一些功能方案,从而达到管理者高效管理的目的。ESMap-SDK提供的免费地图开发和热力图、图片标注等功能实现的支持。
  
  Thank you for reading!
  
  做一个简单易用的室内三维地图SDK……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值