在线体验到室内地图的功能后,手机对室内地图加载一个字,要显示“快”,目前微信和电脑都可以打开室内地图的要求是3秒内打开,能有定位导航的功能最好,这样方便找到要去的地方。

对于经常逛商场的MM来说,哪里有什么商店,停车在哪里,电梯、厕所在哪里,找这些都是一些费力的事情,如果有一个商场地图可以整体全局预览,那是很方便的。

目前就根据商场停车项目需求,先如何找到一个商场停车场车位的事情说起。

  商场停车场车位管理系统其实上是一个很大的系统,首先需要从车位是否被占用的事情说起,

方案1:最简单的方案采用摄像头识别车位是否被占用,然后最好能够识别出车牌,这样反向寻车的事情就好搞多了

有了车位状态,后台管理系统进行管理就方便多了,所有的数据全部存储到数据库中,有摄像头,还可以实现查看全程录像,保证停车的安全性。

方案2:采用车位探测器,向后台送数据,然后用户开车找到车位后,自己在地图界面上打卡记录停车位置坐标到后台数据库,这样找车的时候再来反向寻车。

此次我们就先讲下容易实现的车位状态如何在地图上进行开发展示流程进行纪录一下。

商场停车场车位实时更新状况进行了开发,开发过程中使用到了ESMap地图编辑器及应用实例:

首先,创建好的地图进行显示出来,可以多层全部展示出来,还有上下两层连接通道三维模型,看起来效果不错:

其次,设计的开发流程图:

准备工作都做好后开始实施:

第一步:获取车位信息,创建json模拟数据(投入使用后直接接入后台停车场车位信息数据);

  为了方便开发先创建两份json模拟数据交替使用来模拟停车场车位实时更新的情况。首先根据地图点击事件采集停车位信息,并将车位随机分配为有车、无车和固定车位三种车位情况,然后创建json数据,我分别命名为data0.json和data1.json。采集车位信息代码如下(点击地图后台获取到的直接是json格式数据,是不是老方便了):

        //根据地图点击事件 采集停车位信息
map.on('mapClickNode', function (event) {
var k = Math.random() > 0.5 ? 1 : 2;
//点击车位获取车位 ID,name,楼层,随机分配状态
console.log("{" + '\n' + '"ID": ' + event.ID + "," + "\n" + '"name": ' + '"' + event.name + '"' +
"," + "\n" + '"fnum": ' + event.FloorNum + "," + "\n" + '"status": ' + k + "\n" + "}");
});

我创建的json数据对象有“车位ID”、“车位name”、车位所在楼层“fnum”和车位状态(“status”:[0,1,2],0是灰色,1是红色,2是绿色),获取的json数据如下:

{
"put": [{
"ID": …,
"name": "车位…",
"fnum": ,
"status":
}, {

}]
}

第二步:开启定时器 不断刷新数据 (这里交替变换模拟数据)

开启定时器,使用定时器不断刷新数据使停车位处于动态刷新的状态,从而达到模拟现实生活中停车场的情况。

 var pos = 0;
setInterval(function () {
CallLoadData(++pos % 2);
}, 1500);

第三部:加载数据到地图并解析数据

将数据加载到地图后:

1.解析数据:根据车位信息,按车位所在楼层(fnum)、停车状态(status)将车位id分装到创建的二维数组中,待下一步使用;

2.更新车位颜色:利用for...of遍历mydata构造函数,获取分装后的楼层(fnum)和其所对应二维车位id数组(idlist),然后使用ESMap sdk中的map.changeModelColor()函数更新各个车位状态;

到此95%的工程就基本完成啦!

3.更新统计显示:车位的状态都实时更新了,数据显示也得跟上节奏不是!

      var parkData = null;
var color = ["#7eacca", "#ff0000", "#00ff00"];
function CallLoadData(pos) {
var mydata=new Map();
var fileName = 'data' + pos + '.json'; //json数据切换 pos是0是载入data0.json,是1载入data1.json
$.getJSON(fileName, function (data) {
parkData = data.put;
//1.解析数据
var total = 0;
for (var i = 0, len = parkData.length; i < len; ++i) {
var m = parkData[i];
var d = mydata.get(m.fnum);//map的get方法读取对应的键名(key),如果找不到key则返回undefined
if(d == undefined)
{//如果d为undefined就创建一个对象 分装车位id
d = {"idlist":[[],[],[]]};
}
total++;
d.idlist[m.status].push(m.ID);
mydata.set(m.fnum,d);
}
var showtext="";
//2.更新车位颜色
for (var d1 of mydata) {
var fnum = d1[0];//键名key => fnum(楼层数)
var Obj = d1[1];//键值value => 对象数组{idlist:[[...],[...],[...]]}
for(var j=0;j<color.length;j++)
{
map.changeModelColor({
id:Obj.idlist[j], //更新车位id数组
fnum, //楼层
color: color[j]
});
}
showtext += map.floorNames[fnum-1]+":"+d.idlist[2].length+"个 ";
}
//3.更新统计显示
$("#freedata").html(showtext); //滚动字幕 相应楼层剩余停车位数
$("#total").html(total);
});
}

为了使界面更加的形象生动又美观,我用jQuery做了一个字幕滚动条,让显示的数据动起来,代码

        //滚动字幕
function marquee() {
       //最外层大盒子(div)宽
var scrollWidth = $('#i-test-tip').width();
       //字幕宽
var textWidth = $('.test-tip').width();
var i = scrollWidth;
setInterval(function () {
i--;
if (i < -textWidth) {
i = scrollWidth;
}
$('.test-tip').animate({
'left': i + 'px'
}, 8);
}, 8);
}

效(高大)果(上)如下:

数据载入后可点击停车位查看停车位信息和当时的停车情况。代码↓:

        var statusname=["固定车位","有车","无车"];
//地图点击事件
map.on("mapClickNode", function (event) {
if (//只有点击停车位才会显示信息
event.nodeType == esmap.ESNodeType.NONE ||
event.nodeType == esmap.ESNodeType.FLOOR ||
event.name == "楼梯"
)
return;
$("#carname").css("color", "rgb(255, 255, 0)").html(event.name); //停车位name
for (var i = 0; i < parkData.length; ++i) {
if (event.ID == parkData[i].ID) {
$("#YorN").html(statusname[parkData[i].status]);
}
}
});

到此停车场车位实时更新的功能就完成啦,最终效果如图:

最后还是放出商场停车场在线体验链接:访问链接

所有在线的室内功能体验链接:API-DEMO

欢迎留言交流!

如何使用JS来开发室内地图商场停车场车位管理系统的更多相关文章

  1. 如何使用JS来开发室内三维地图的轨迹回放功能

     在制作完成室内三维地图的功能后,最经常有的需求就是如何做人员的轨迹回放,一般流程都是从数据库中查询轨迹坐标后,经过后台查询接口返回给前端,接下来的事情都交给JS来完成. 如果想做好一个性能好的轨迹回 ...

  2. 使用JS+Three.js+Echart开发商场室内地图客流信息统计功能

    现在的商场管理者在管理商场的同时面临着一些无法避免的问题比如:人员监管不到位.效率低下.商场同质化严重,人流量少等.发现了这些问题作为开发人员的我们怎能视而不见,我们的责任就是发现问题解决问题,提供更 ...

  3. 支付宝小程序室内地图导航开发-支付宝小程序JS加载esmap地图

    如果是微信小程序开发,请参考微信小程序室内地图导航开发-微信小程序JS加载esmap地图文章 一.在支付宝小程序里显示室内三维地图 需要满足的两个条件 调用ESMap室内地图需要用到小程序web-vi ...

  4. 微信小程序室内地图导航开发-微信小程序JS加载esmap地图

    一.在微信小程序里显示室内三维地图 需要满足的两个条件 调用ESMap室内地图需要用到小程序web-view组件,想要通过 web-view 调用ESMap室内地图需要满足以下 2 个条件: 1. 小 ...

  5. 转:arcgis api for js入门开发系列四地图查询

    原文地址:arcgis api for js入门开发系列四地图查询 arcgis for js的地图查询方式,一般来说,总共有三种查询方式:FindTask.IdentifyTask.QueryTas ...

  6. arcgis api for js入门开发系列六地图分屏对比(含源代码)

    上一篇实现了demo的地图标绘模块,本篇新增地图地图分屏对比模块,截图如下(源代码见文章底部): 对效果图的简单介绍一下,在demo只采用了两分屏对比,感兴趣的话,可以在两分屏的基础上拓展,修改css ...

  7. arcgis api for js入门开发系列二十打印地图的那些事

    前面我写过关于利用arcgis api for js打印地图的,但是打印地图服务都是基于arcgis server发布的,arcgis api加载在线地图,比如天地图.百度地图.高德地图等,底图都是打 ...

  8. arcgis api 3.x for js 入门开发系列六地图分屏对比(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  9. 高德地图 室内地图 API 的一些坑

    开发指南 http://lbs.amap.com/api/javascript-api/guide/create-map/indoormap/ demo 大全: http://lbs.amap.com ...

随机推荐

  1. 浅谈编程语言中的新宠Python,你叫它如何不火?

    论述 凡是对编程有所关注的朋友都已经知道,Python公布于1991年,即使出现的时间不是很遥远,但是在众多爱好者的贡献下已经发展到全民Python的地步. Python最近火起来的笼统原因:面向企业 ...

  2. lintcode 链表求和

    题目要求 你有两个用链表代表的整数,其中每个节点包含一个数字.数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头.写出一个函数将两个整数相加,用链表形式返回和. 样例 给出两个链表 3- ...

  3. Django入门四之数据库相关

    1. 数据库设置 在settings.py中配置数据库 我首先使用的是sqlite3,所以配置如下 2. 数据库的数据结构定义 #blog/models.py #定义了一个表(Student),表里两 ...

  4. TensorFlow源码安装

    前言 TensorFlow如果能二进制包安装,我真的不想选择自己编译,但是情况不由人,好不容易找到一台服务器,CPU不支持AVX指令集,安装的release版本运行到import tensorflow ...

  5. Angular使用总结 ---以密码确认为例实现模版驱动表单的自定义校验

    上一篇 总结了模版驱动表单的基本用法,示例中的校验使用的是原生HTML5的校验方式,本文补上自定义校验的部分. HTML5原生的表单校验属性(必填,长度限制,取值间隔,正则表达式等等)可以满足普通的校 ...

  6. elasticSearch+spring 整合 maven依赖详解

    摘自:http://www.mayou18.com/detail/nTxPQSyu.html [Elasticsearch基础]elasticSearch+spring 整合 maven依赖详解 Ma ...

  7. 使用单进程、strace、gdb调试PHP错误

    使用单进程.strace.gdb调试PHP错误 PHP一般是在FPM的呵护下运行的,但是某些情况下进程异常崩溃会导致502.下面是解决思想: 1. 单进程运行: php -d display_erro ...

  8. Spring Boot ConfigurationProperties validate

    使用@Query可以在自定义的查询方法上使用@Query来指定该方法要执行的查询语句,比如:@Query("select o from UserModel o where o.uuid=?1 ...

  9. 全国省市县区域信息最新数据库脚本(mysql版本)

    /*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50717Source Host : lo ...

  10. jmeter简单的使用

    jmeter简单的使用 一般步骤是:在测试计划下面新建一个线程组,线程组下面添加请求,请求中添加结果和断言 1.打开页面: 2.添加线程组: 3.线程组中设置参数: 很重要的几个参数:线程数.ramp ...