仿海康网页版做一个在线的实时监控网站(1)-- 侧边栏站点选择

news/2024/5/9 3:52:32/文章来源:https://blog.csdn.net/baliang9989/article/details/101494261

目前的渔政网页版的开发已经接近尾声,目前要做的是一个网页版的在线视频实时监控的功能,仿照海康的网页版示例,整个页面做下来有点心得体会,所以写一篇博文记录下,方便自己以后翻阅,也希望可以给别人提供帮助

首先搭建页面,用css+div布局生成页面,如何用js生成div在我前面的博客中有提过

这篇博客我准备写两篇,第一篇讲侧边栏的生成过程,第二遍讲海康视频插件的添加和云台的操作

因为获取数据的原因,侧边栏的生成比我预计的多花了好几天的时间,当然了这么几天我也学到了很多新的知识,这更主要的是对于数组有了一个更深刻的理论

首先获取到所有的设备,里面的数据包括所有的设备和设备编号,相当于所有数据的总框,我需要根据这个总框编写一个字典函数,根据其其他接口获取到得设备,得到设备名称显示在节点中,关于字典函数的编写和数据的层级关系在上一篇博客里。

然后根据接口,获取所有的IRST设备,将从接口获取的LIST格式的数据整理成LIst{IRST,LIST{}}的格式,获取完毕之后拼接字符串,在写的时候出现了两处错误,一处是遍历数组添加数据的时候,后面的数据替换了之前的存储数据,二是之前写的字典函数没有应用上去,该显示站点名称的地方写的是未定义

我们依次解决这些问题

第一个问题,首先看一段代码

 1   //设置站点设备的索引
 2             var nationindex = 0;
 3             var irstindex = 0;
 4             var index = 0;
 5             //获取第一个站点名称
 6             var IRSTnation = nodelist[0].szDeviceID;
 7 
 8             //数组用来存储所有的IRST设备信息
 9             var IRSTlist = new Array(IRST);
10 
11             //数组用来存储站点名称以及对应的IRST设备信息
12             var list = new Array(IRSTnation, IRSTlist);
13 
14 
15             for (var i = 0; i < nodelength; i++) {
16                 if (nodelist[i].szDeviceID === IRSTnation) {
17                     //数组用来存储单个的IRST设备信息
18                     var IRST = new Array();
19                     IRST[irstindex] = new Array();
20                     IRST[irstindex] = [nodelist[i].szName, nodelist[i].szIP, nodelist[i].NPort, nodelist[i].szUser, nodelist[i].szPassword, nodelist[i].NChannel, nodelist[i].szName, nodelist[i].szStation, nodelist[i].NDeviceType];
21                     IRSTlist[nationindex] = new Array();
22                     IRSTlist[nationindex].push(IRST);
23                     list[index] = new Array();
24                     var copyIRSTlist = IRSTlist;
25                     list[index].push(IRSTnation, copyIRSTlist[nationindex]);
26                     irstindex++;
27                 }
28                 if (nodelist[i].szDeviceID !== IRSTnation) {
29                     index++;
30                     nationindex++;
31                     irstindex = 0;
32                     IRSTnation = nodelist[i].szDeviceID;
33                     //数组用来存储单个的IRST设备信息
34                     var IRST = new Array();
35                     IRST[irstindex] = new Array();
36                     IRST[irstindex] = [nodelist[i].szName, nodelist[i].szIP, nodelist[i].NPort, nodelist[i].szUser, nodelist[i].szPassword, nodelist[i].NChannel, nodelist[i].szName, nodelist[i].szStation, nodelist[i].NDeviceType];
37                     IRSTlist[nationindex] = new Array();
38                     IRSTlist[nationindex].push(IRST);
39                     list[index] = new Array();
40                     var copyIRSTlist = IRSTlist;
41                     list[index].push(IRSTnation, copyIRSTlist[nationindex]);
42                     irstindex++;
43                 }
44             }
View Code

 这段代码看起来比较复杂,其实逻辑比较好理解,IRST存储每个摄像头的信息,IRSTList存储IRST数据,list存储站点和对应的摄像头数据,我在第一个循环执行完之后,切换站点,重置IRSTList的索引为0时,后面生成的数据就把前面的数据覆盖了,我试了很久没找到一个好的解决方法,后来在网上找到一个别人用js写的Map方法,达成了我想要的数据格式

从thrift获取数据,用map函数变成我想要的数据格式,然后拼接字符串,代码如下:

  1     //获取所有IRST设备
  2     $.ajax({
  3         contentType: "application/x-www-form-urlencoded; charset=utf-8",
  4         type: "POST",
  5         url: "/getit",  //servlet路径
  6         statusCode: {
  7             404: function () {
  8                 alert('获取IRST设备失败,请刷新');
  9             }
 10         },
 11         success: function (data) {
 12             nodelist = eval(data);
 13             var areas = new Map();
 14             for (var i = 0; i < nodelist.length; i++) {
 15                 var deviceid = nodelist[i].szDeviceID;
 16                 //获取站点编号
 17                 var stationid = deviceid.substring(0, 6);
 18                 //获取湖区编号
 19                 var areaid = deviceid.substring(0, 4);
 20 
 21                 //添加湖区信息
 22                 if (!areas.containsKey(areaid))
 23                     areas.put(areaid, new Map());
 24 
 25                 //添加站点信息
 26                 var area =areas.get(areaid);
 27                 if (!area.containsKey(stationid))
 28                     area.put(stationid,new Map());
 29 
 30                 //添加设备信息
 31                 var station = area.get(stationid);
 32                 if (!station.containsKey(deviceid))
 33                     station.put(deviceid,new Map());
 34 
 35                 station.get(deviceid).put(nodelist[i].szName,nodelist[i]);
 36 
 37             }
 38 
 39             var keys = areas.keys();
 40 
 41             var i = 0;
 42             var ii = 0;
 43             var iii = 0;
 44             var iiii = 0;
 45             var station = "";
 46             var device = "";
 47             var IRST = "";
 48             var str = "";
 49 
 50             //拼接字符串
 51             str = "[";
 52 
 53             for ( i = 0; i < keys.length; i++) {
 54                 //根据湖区名称找站点名称
 55                 var allinfo = areas.get(keys);
 56                 station = allinfo.elements;
 57                 //如果有站点信息
 58                 if(station.length > 0){
 59                     for (ii = 0; ii < station.length; ii++) {
 60                         if (ii + 1 === station.length) {
 61                             str += "{id:'" + station[ii].key + "',text:'" + adddevide.find(station[ii].key) + "'";
 62                             alldevice();
 63                             break;
 64                         }
 65                         else {
 66                             str += "{id:'" + station[ii].key  + "',text:'" + adddevide.find(station[ii].key) + "'";
 67                             alldevice();
 68                             str += "},";
 69                         }
 70                     }
 71                 }
 72             }
 73 
 74             str += "}];";
 75 
 76             //获取不同的设备
 77             function alldevice() {
 78                 device = station[ii].value.elements;
 79                 if(device.length > 0){
 80                     for (iii = 0; iii < device.length; iii++) {
 81                         if (str.charAt(str.length - 1) !== ",") {
 82                             str += ",nodes:[";
 83                         }
 84                         //如果是节点的最后一位
 85                         if (iii + 1 === device.length) {
 86                             str += "{id:'" + device[iii].key  + "',text:'" + adddevide.find(device[iii].key)+ "'";
 87                             IRSTType();
 88                             str +=  "}]";
 89                             return 0;
 90                         }
 91                         else {
 92                             str += "{id:'" + device[iii].key  + "',text:'" + adddevide.find(device[iii].key)+ "'";
 93                             IRSTType();
 94                             str +=  "},";
 95                         }
 96                     }
 97                 }
 98                 return 0;
 99             }
100 
101             //获取设备上不同的摄像头
102             function IRSTType() {
103                 var info = new Array();
104                 var index = 0;
105                 IRST = device[iii].value.elements;
106                 if(IRST.length > 0){
107                     for (iiii = 0; iiii < IRST.length; iiii++) {
108                         if (str.charAt(str.length - 1) !== ",") {
109                             str += ",nodes:[";
110                         }
111                         //如果是节点的最后一位
112                         if (iiii + 1 === IRST.length) {
113                             //定义数组,存储用户登录信息
114                             info[index] = new Array();
115                             info[index].push(IRST[iiii].value.szIP,IRST[iiii].value.szUser,IRST[iiii].value.szPassword,IRST[iiii].value.NPort,IRST[iiii].value.NChannel);
116                             str += "{id:'" + IRST[iiii].value.szIP + IRST[iiii].value.NChannel   + "',tags:['"  +  info[index] +  "'],text:'" + IRST[iiii].key +  "'}]";
117                             index++;
118                             return 0;
119                         }
120                         else {
121                             info[index] = new Array();
122                             info[index].push(IRST[iiii].value.szIP,IRST[iiii].value.szUser,IRST[iiii].value.szPassword,IRST[iiii].value.NPort,IRST[iiii].value.NChannel);
123                             str += "{id:'" + IRST[iiii].value.szIP + IRST[iiii].value.NChannel   + "',tags:['"  +  info[index] +  "'],text:'" + IRST[iiii].key + "'},";
124                             index++;
125                         }
126                     }
127                 }
128                 return 0;
129             }
130 
131             var nodedata = eval(str);
132 
133             $("#nationselect").treeview({
134                 //默认只显示第一层级的数据
135                 levels: 1,
136                 data: nodedata
137             });
138 
139             $('#nationselect').on('nodeSelected', function (event, data) {
140                 //数组转字符串
141                 var IRSTinfo = data.tags.toString();
142                 //字符串拼接数组
143                 var abcArray = IRSTinfo.split(',');
144                 //用户登陆IP
145                 var IRSTIP = abcArray[0];
146                 //用户登陆名
147                 var IRSTUSER = abcArray[1];
148                 //用户登陆密码
149                 var IRSTPSW = abcArray[2];
150                 //用户登陆端口号
151                 var IRSTPort = abcArray[3];
152                 //摄像头的通道号
153                 var IRSTChannel = abcArray[4];
154                 var a = new NationInfo(IRSTIP, IRSTPort, IRSTUSER, IRSTPSW, IRSTChannel);
155                 openvideo(a);
156                 clickLogin();
157             });
158 
159         }
160     });
View Code

下面就出现了第二个问题,servlet的调用顺序问题,我发现有时候运行的时候,显示的是未定义数据,说明先运行的是获取IRST的servlet,虽然我写的是获取所有设备的servlet的函数在前,于是我将获取所有站点的ajax放在了获取所有IRST的ajax里面的success函数里,完成效果如下:

在node的click时间里添加  clickLogin()函数,点击站点,完成登录

 好,获取了站点信息,完成了登陆之后,下面就是安放视频插件个控制按钮,下一篇博客会详细说一下这个流程

转载于:https://www.cnblogs.com/Liu30/p/7132898.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_877714.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仿海康网页版做一个在线的实时监控网站(2)-- 视屏显示和云台控制

在上一篇博客仿海康网页版做一个在线的实时监控网站&#xff08;1&#xff09;中讲了侧边站点选择栏的生成&#xff0c;这篇博客主要说一下视屏插件的摆放和一些云台控制的操作函数 首先海康的摄像头可以找他们要一个网页版的开发Demo&#xff0c;如果没有我提供一个&#xff1…

网站架构演变

网站架构演变 大型网站介绍 与传统企业应用系统相比&#xff0c;大型互联网网站系统具有以下特点1、大流量、高并发 这一点往往是传统企业应用系统根本就不会遇到的问题&#xff0c;比如Goole每日访问量都是几十亿&#xff0c;如果服务器端处理不好早就被压的宕机了。2、高可用…

实用的网站、工具(科研学术、wps、作图、教程和文档、在线开发工具、在线编程学习、文档笔记工具、办公工具、写作、设计制作类、素材库)

文章目录 科研学术Sci-Hub:SciHub科研学术网址导航 wps相关pdf 转换工具PDF派CleverPDF迅捷PDF转换器 免费模板优品PPTOfficePlus第一PPT 作图在线画图工具ProcessOn在线画图工具draw.io在线思维导图工具PlantUML在线编辑器免费在线图片编辑器 - 在线抠图、改图、修图、美图 - …

【129.1】大型网站技术架构 并发相关知识

一&#xff1a;什么是高并发&#xff1f; 高并发指的是并发数量&#xff0c;是指同一时间有多少个访问同时来访问同一api接口或者url地址。 二&#xff1a;高并发相关概念 1&#xff09;&#xff08;每秒查询率&#xff09;&#xff1a;每秒请求或者查询的数量&#xff0c;在…

jQuery Mobile在微信建站方面的应用

jQuery Mobile在微信建站方面的应用 2014年10月28日 电子商务、网站建设 jQuery Mobile、微信建站 感谢这个不断变革的时代&#xff0c;让我这个三十六岁的IT老兵重新拾起武器开始微信建站&#xff0c;拥抱移动互联网。大概有两年多的时间已经没有正式参与建站工作了&#xff0…

NMPA可以解析了 国家药品监督管理局网站

国家药品监督管理局网站有很多药品、保健品数据&#xff0c;很多人需要相关数据所以才去采集。但是&#xff0c;NMPA网站的反爬一直走在最前线&#xff0c;爬虫的程序一直无法很好工作。 现在&#xff0c;搞定了。 目前可以使用程序打开药监局网站&#xff0c;然后到药品页面…

scrapy爬取某视频网站的部分视频信息

此次爬取的信息有&#xff1a; 1、视频名称 2、在线观看人数 3、弹幕内容 4、弹幕发送时间 5、弹幕在视频中的位置 6、点赞 7、收藏 8、投币数 由于b站的很多信息是动态加载的。所以部分信息&#xff0c;需要自己抓包&#xff0c;进入对应的网址抽取信息。例如在线观看视频人…

一个将多线程多进程结合爬取图片网站的示例

在图片网站爬取图片时候&#xff0c;我们需要取得具体每张图片的url地址&#xff0c;然后下载到电脑保存下来。这其中&#xff0c;对时间消耗最多的步骤是保存图片到本地硬盘&#xff0c;机械硬盘的读写性能速度较慢。如果采取单线程单进程的话&#xff0c;在读写的同时没法进行…

将代码提交到github的两种方式(其他项目管理网站类似)

首先先去git官网下载git,现在就去. 下载完成之后,右键git bash 使用命令行配置你的git的用户名和邮箱,因为git是分布式系统,所以每个用户都是独立的 命令行输入: git config --global user.name "Your Name"git config --global user.email "emailexample.com…

​​​资源分享 | 一、盘点高清壁纸网站​​

​​​资源分享 | 一、盘点高清壁纸网站​​​​​​​​​​ ​​1. wallroom​​ ​​​​2. 极简壁纸​​​ ​​​​3. 高清壁纸库​​ ​​​​4. 动漫图片和壁纸​​ ​​​​5. Wallpaper Abyss​​​​ 资源分享 | 一、盘点无版权图片网站 作者&#xff1a;1024导…

微信开放平台申请网站应用

前言&#xff1a; 这是一篇我想严重吐槽的文章&#xff0c;我需要做一个微信扫码功能&#xff0c;我看了下文档&#xff0c;发现没有那么难&#xff0c;结果一开始我就卡壳&#xff0c;申请网站应用我申请了四次&#xff0c;我很奔溃&#xff0c;关键是我搞不懂的是为什么审核…

让你的网站应用加上微信扫码功能

前言&#xff1a; 继上篇文章在微信开放平台申请网站应用以后&#xff0c;我们就可以正式开始做微信扫码登录这个功能了,接下来这篇文章我将用最通俗易懂的话语让大家掌握整个微信扫码开发的流程&#xff0c;其实真的很简单&#xff0c;只要认真阅读官方文档&#xff0c;一步步…

python3.2 自动登录网站

让我帮写个小程序&#xff0c;查了查资料&#xff0c;用python写了一个&#xff0c;以前没用过&#xff0c;都是现查的资料&#xff0c;比较粗糙&#xff0c;放到这里留作备用。 1 import urllib.parse 2 import urllib.request 3 4 # ------------------------------需…

Python 自动登录网站(处理Cookie)

Python 自动登录网站&#xff08;处理Cookie&#xff09; 博客分类&#xff1a; Python Python代码 def login(): cj cookielib.CookieJar() opener urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) login_url rhttp://zhixing.bjtu.edu.cn/memb…

Python 最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表。 实现方式: 通过goog

Python 最近因开发项目的需要&#xff0c;有一个需求&#xff0c;就是很多SNS网站都有的通过 Email地址 导入好友列表&#xff0c;不过这次要导入的不是Email 列表&#xff0c;而是QQ的好友列表。 实现方式&#xff1a; 通过google一搜&#xff0c;实现的方式大概有下面这篇文…

wordpress搜索引擎蜘蛛统计插件SEO

索引擎蜘蛛统计插件可以实时对搜索引擎来访进行统计&#xff0c;指导站长的运营&#xff0c;来访的蜘蛛类型和访问的页面都能在后台一目了然&#xff01; 免费使用下载https://yomeiyo.lanzouw.com/ifh5300s4p7a安装即可 插件安装方法 上传压缩包安装插件 如果是付费插件的话…

用Django建一个网站

目标&#xff1a;用最短的步骤在本机创建一个网站。 第一步 安装好Django之后&#xff0c;在放置网页的目录下打开命令行&#xff0c;输入 django-admin startproject mysite 即可自动创建一个名为mysite的文件夹。 进入mysite文件夹&#xff0c;创建第一个web程序app01(任意):…

提升大型网站并发访问性能

应用服务器 网络应用 中国电信 Linux配置管理 一个小型的网站&#xff0c;可以使用最简单的html静态页面就实现了&#xff0c;配合一些图片达到美化效果&#xff0c;所有的页面均存放在一个目录下&#xff0c;这样的网站对系统架构、性能的要求都很简单。随着互联网业务的不断丰…

requests 正则表达正式基础爬虫案例二:爬取网站数据

要求&#xff1a;爬取https://ssr1.scrape.center/ 网站中所有电影标题、类型、地区、电影时长、上映日期、评分、简介&#xff1b; 分析&#xff1a;网站共有两个页面组成&#xff0c;电影列表和详情&#xff0c;我们所需要的内容都在详情页面里面可以找到。 列表页面共10页&a…

PC端网站 rem适配方案

以1920设计稿为准 1、使用sass语法 转换px rem &#xff0c; vscode编辑器安装插件easy-scss 安装之后打开插件setting.json&#xff0c; 在setting.json里配置转换后css的路径 “easysass.targetDir”: “./css” 创建css文件、scss文件&#xff1a; 项目中如何使用index.sc…