数据可视化大屏百度地图GPS轨迹位置感知状态开发实战案例解析(包含缩放控件、点线覆盖物、弹窗、标注图标分类功能)

news2024/11/17 1:28:06

系列文章目录

1.数据可视化大屏应急管理综合指挥调度系统完整案例详解(PHP-API、Echarts、百度地图)
2.数据可视化大屏百度地图API开发:停车场分布标注和检索静态版
3.百度地图高级开发:map.getDistance计算多点之间的距离并输入矩阵
4.百度地图高级开发:获取某范围半径圆形区域检索覆盖物内的所有标注的解决方案
5.百度地图高级开发:LBS服务实时定位覆盖范围内关键词标注的解决方案
6.百度地图:监听地图缩放自动显示和隐藏的富文本标签
7.百度地图POI多信息点标注开发说明文档(php+layui+mysql+百度javascript API2.0+echarts4.8)
8.百度地图开发:地图调起API(Web端)使用终点经纬度直接调用百度地图导航信息的解决方案
9.百度地图开发自定义信息窗口openInfoWindow样式的解决方案
10.百度地图开发mapStyle个性化地图styleJson的配色解决方案
11.百度地图标注maker图标按照分类显示不同的样式
12.百度地图开发:地图覆盖物实现纵横交错的交通网络


前言

在这里插入图片描述

项目说明

成品为数据可视化大屏的一组百度地图GPS轨迹位置感知状态的插件,主要实现的功能包括:

  • 默认全部GPS的位置状态,分为在线设备位置展示和所有设备位置展示(包含离线未运行的设备);
  • 指定GPS设备时间内的轨迹状态,默认2小时内的经纬度轨迹坐标线覆盖物的展示;
  • 指定GPS设备状态展示,包含运行状态和定位状态,由后台API传输数据确定;
  • 上述功能全部在SPA实现;

一、功能布局

在这里插入图片描述
基于layui开发,实现页面的容器构造,筛选查询功能。

<div class="layui-fluid">
    <div class="layui-card">
        <div class="layui-row">
            <form class="layui-form layui-form-pane" style="margin: 10px;">
                <div class="demoTable">
                    <div class="layui-form-item">
                        <div style="width: 100%;background:#fff;height: 15px;"></div>
                        <label class="layui-form-label">设备名称</label>
                        <div class="layui-input-inline"><select name="group_id" lay-filter="group_id" id="group_id"></select></div>
                        <div class="layui-input-inline"><input type="text" id="start_time" name="start_time" class="layui-input" placeholder="起始时间"></div>
                        <div class="layui-input-inline"><input type="text" id="end_time" name="end_time" class="layui-input" placeholder="截至时间"></div>
                        <div class="layui-inline"><a class="layui-btn layui-btn-normal" id="reload"><i class="layui-icon layui-icon-search"></i> 查询</a></div>
                        <div class="layui-inline"><a class="layui-btn layui-bg-cyan" id="all"><i class="layui-icon layui-icon-engine"></i> 所有设备</a></div>
                        <div class="layui-inline"><button class="layui-btn layui-btn-primary layui-bg-red" type="button" id="refresh"><i class="layui-icon layui-icon-refresh"></i> 重置</button></div>
                        <label class="layui-form-label status" style="width: 8%;">运行状态(<span id="temp1" class="alert1"></span>)</label>
                        <label class="layui-form-label status" style="width: 8%;">定位状态(<span id="temp2" class="alert1"></span>)</label>
                    </div>
                </div>
            </form>
        </div>
    </div>

    <!--Baidu map-->
    <div class="layui-card">
        <div id="map" style="width: 100%;height: 820px;"></div>
    </div>
</div>

二、状态灯CSS层叠样式表代码

在这里插入图片描述

        .alert1 {
            display: inline-block;
            width: 15px;
            height: 15px;
            line-height: 15px;
            border-radius: 50%;
            background: #e60000; /*FF0087*/
            margin: auto 5px;
        }

        .alert2 {
            display: inline-block;
            width: 15px;
            height: 15px;
            line-height: 15px;
            border-radius: 50%;
            background: #18a45b;
            margin: auto 5px;
        }

三、后台API通过ajax返回设备列表

加载layui组件,实现日期选择和下拉筛选功能。

    layui.use(['form', 'layer', 'laydate'], function () {
        var $ = layui.jquery;
        var form = layui.form;
        var laydate = layui.laydate;

        //时间选择器
        laydate.render({
            elem: '#start_time'
            , type: 'datetime'
            , value: from_time
        });

        laydate.render({
            elem: '#end_time'
            , type: 'datetime'
            , value: to_time
        });

        //获取设备列表;
        $.get('./api/api.php?act=getIotGPS&token=3cab7ce4142***', {}, function (res) {
            var memberHtml = '<option value="">在线GPS设备</option>'
            for (var i = 0; i < res.data.length; i++) {
                memberHtml += '<option value="' + res.data[i].group_id + '">' + res.data[i].device + '</option>'
            }
            $('#group_id').append(memberHtml);
            form.render();
        }, 'json');
    });

四、百度地图核心功能开发

异步加载数据封装函数

  //加载标注;
    /*
    * group_id,组Id
    * fromType,0过滤离线数据,1全部数据
    * */
    function getLockMap(group_id, start_time, end_time, fromType) {
        $.getJSON('./api/api.php?act=getIotGPS&token=3cab7ce41**', {
            group_id: group_id,
            start_time: start_time,
            end_time: end_time
        }, function (res) {
            //console.log(res.data);
            var points = [];
            var data = res.data;
            if (data) {
                for (var i = 0; i < data.length; i++) {
                    var lnglat = data[i].str_sdata.split(",");
                    points.push({
                        item_name: data[i].device,
                        item_mtime: data[i].mtime,
                        item_data: data[i].historyData,
                        poi_lng: lnglat[0],
                        poi_lat: lnglat[1],
                        propertyType: data[i].data.propertyType,
                        sensorStatus: data[i].data.sensorStatus,
                        sdata: data[i].sdata,
                        group_seq: data[i].group_seq,
                    })
                }
            }
        
            //加载地图;
            if (group_id == "") {
                //运行状态;
                $(".status").css("display", "none");
                //未指定设备时,加载全部设备标注;
                if (fromType == 1) {
                    intMap(points, 0);//全部数据
                } else {
                    intMap(filterGps(points), 0);//在线数据
                }
            } else {
                //判断运行状态和定位状态;
                var itemStatus = [], sdata2 = [];
                var propertyData = points[0].propertyType.split(",");
                var statusData = points[0].sensorStatus.split(",");
                var sdataData = points[0].sdata.split(",");
                for (var n = 0; n < propertyData.length; n++) {
                    //运行状态
                    if (propertyData[n] == "GPS定位") {
                        itemStatus[0] = statusData[n];
                    }
                    //定位状态;
                    if (propertyData[n] == "GPS状态") {
                        sdata2[0] = sdataData[n];
                    }
                }
                //console.log(itemStatus.toString());
                //console.log(sdata2.toString());
                //显示状态;
                $(".status").css("display", "block");
                if (itemStatus.toString() == "正常运行") {
                    $("#temp1").removeClass("alert1").addClass("alert2");
                }
                if (sdata2.toString() == "1") {
                    $("#temp2").removeClass("alert1").addClass("alert2");
                }
                //指定设备时,加载路线图;
                intMap(points, 1);
            }
        });
    }

百度地图封装

  var map;

    function intMap(markerArr, types) {
        map = new BMap.Map("map", {enableMapClick: false});
        map.centerAndZoom(new window.BMap.Point(markerArr[0].poi_lng, markerArr[0].poi_lat), 11);
        map.enableScrollWheelZoom();

        //添加缩放控件
        var ctrlNav = new window.BMap.NavigationControl({
            anchor: BMAP_ANCHOR_TOP_RIGHT,
            type: BMAP_NAVIGATION_CONTROL_LARGE
        });
        map.addControl(ctrlNav);

        //移除全部覆盖物
        map.clearOverlays();

        //加载标注;
        if (types == 0) {
            getMaker(markerArr);
        }

        //加载路线;
        if (types == 1) {
            makePolyLine(markerArr);
        }

标注展示

在这里插入图片描述

  var map;
    function intMap(markerArr, types) {
        map = new BMap.Map("map", {enableMapClick: false});
        map.centerAndZoom(new window.BMap.Point(markerArr[0].poi_lng, markerArr[0].poi_lat), 11);
        map.enableScrollWheelZoom();

        //添加缩放控件
        var ctrlNav = new window.BMap.NavigationControl({
            anchor: BMAP_ANCHOR_TOP_RIGHT,
            type: BMAP_NAVIGATION_CONTROL_LARGE
        });
        map.addControl(ctrlNav);

        //移除全部覆盖物
        map.clearOverlays();

        //加载标注;
        if (types == 0) {
            getMaker(markerArr);
        }

        //加载路线;
        if (types == 1) {
            makePolyLine(markerArr);
        }
   }

轨迹展示在这里插入图片描述

 //起始路线图;
        function makePolyLine(points) {
            var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {
                scale: 0.5,//图标缩放大小
                strokeColor: '#fff',//设置矢量图标的线填充颜色
                strokeWeight: '1.5',//设置线宽
            });
            //var icons = new BMap.IconSequence(sy, '10', '20');

            //数据处理,创建polyline对象;
            var pois = [];
            var lineData = points[0].item_data;
            //var lng1 = lineData[0].sdata.split(",");
            //var lng2 = lineData[lineData.length - 1].sdata.split(",");
            //var point1 = new BMap.Point(lng1[0], lng1[1]);
            //var point2 = new BMap.Point(lng2[0], lng2[1]);

            //最后为准标注弹窗
            getMaker(markerArr);

            //起点标注;
            /* var marker1 = new BMap.Marker(point1);
             map.addOverlay(marker1);

             //终点标注;
             var marker2 = new BMap.Marker(point2);
             map.addOverlay(marker2);*/

            for (var n = 0; n < lineData.length; n++) {
                var d1 = lineData[n].sdata.split(",");
                pois.push(new BMap.Point(d1[0], d1[1]))
            }

            //console.log(pois);

            var polyline = new BMap.Polyline(pois, {
                enableEditing: false,//是否启用线编辑,默认为false
                enableClicking: true,//是否响应点击事件,默认为true
                //icons: [icons],
                strokeWeight: '8',//折线的宽度,以像素为单位
                strokeOpacity: 0.8,//折线的透明度,取值范围0 - 1
                strokeColor: "#18a45b" //折线颜色
            });
            map.addOverlay(polyline);

            //设置最佳视野POI;
            map.setViewport(pois);
        }

总结

百度地图开发平台提供的jsAPI功能比较详尽,同时对应版本的类库说明也比较具体。在实际开发的过程中,根据项目需求,需要对jsAPI进行多次的封装和调用。@漏刻有时

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(二)

C语言及算法设计课程实验三&#xff1a;最简单的C程序设计——顺序程序设计&#xff08;二&#xff09;一、实验目的二、 实验内容2.2、实验内容2&#xff1a;求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积三、 实验步骤3.2、顺序程序设计实验题目2&#xff1a;求圆周长、…

CTF文件隐写总结之图片

1.1 Fastjson反序列化 代码审计 本项目引入的Fastjson版本为1.2.58&#xff0c;该版本存在反序列化漏洞。 已确定了Fastjson版本存在问题&#xff0c;进一步寻找触发Fastjson的漏洞点。 我们关注两个函数JSON.parse()和JSON.parseObject(),并且执行函数内参数用户可控 Edi…

【博客系统】后台设计

文章目录博客系统&#xff08;使用模板技术&#xff09;准备工作数据库设计表设计文章表用户表完整SQL封装数据库操作代码创建DBUtil创建Blog类和User类创建BlogDao类和UserDao类实现insert实现selectAll实现selectOne实现delete实现selectByName实现selectByUserId验证数据库代…

Python 操作 MySQL 之 pysql 与 SQLAchemy

一、pymsql pymsql 是 Python 中操作 MySQL 的原生模块&#xff0c;其使用方法和 MySQL 的SQL语句几乎相同 1、下载安装 pip3 install pymysql 2、执行SQL 执行 SQL 语句的基本语法&#xff1a; 需要注意的是&#xff1a;创建链接后&#xff0c;都由游标来进行与数据库的…

CATCTF wp

文章目录ez_jsCat_Jumpmiao~CatCatPeekabooMeowMeowCatchCatCatFlagNepnep 祝你新年快乐啦&#xff01;ez_js f12搜索score&#xff0c;修改超过分数1即可获得flag 然后获得flag地址 访问即可 Cat_Jump 仿真玩半天不知道怎么解&#xff0c;最后直接搜关键词出的 挺可惜…

唱歌就能画一幅图像? #whisper-to-stable-diffusion

现在热门的不仅是多模态的文本图像生成&#xff0c;前阵子&#xff0c;OpenAI 发布了一个自动语音识别系统 Whispe 。在处理口音、背景噪声以及技术术语方面&#xff0c;Whisper 几乎达到了人类的水准。那么将 Whisper 与 Stable Diffusion 结合&#xff0c;可以直接完成语音生…

回顾 OpenMLDB 2022 之旅 | 开源之路,行将致远

2022年初&#xff0c;OpenMLDB 尚且懵懂稚嫩。彼时的我们刚刚走过开源道路上的第一个秋天&#xff0c;还没有结出丰硕的果实。前进着&#xff0c;期待着&#xff0c;2022的一切徐徐展开&#xff1a; 请旋转手机 和 OpenMLDB 共同回忆 2022 之旅 2022年末&#xff0c;OpenMLDB …

必看!.NET 7 在网络领域的四大更新

最新的 .NET 7 现已发布&#xff0c;我们想介绍一下其在网络领域所做的一些有趣的更改和添加。这篇文章我们将讨论 .NET 7 在 HTTP 空间、新 QUIC API、网络安全和 WebSockets 方面的变化。 HTTP 改进了对连接尝试失败的处理 在 .NET 6 之前的版本中&#xff0c;如果连接池中…

云计算运营—04 FusionSphere OpenStack 6.5方案介绍

FusionSphere OpenStack 6.5方案介绍 OpenStack 系统架构 OpenStack是什么 OpenStack是目前最流行的开源云操作系统&#xff1a; 资源抽象 OpenStack将各类硬件资源&#xff0c;通过虚拟化与软件定义的方式&#xff0c;抽象成资源池 资源分配与负载调度 OpenStack根据管理员…

Ardupilot EKF3核心算法《状态量的协方差矩阵推导》

目录 文章目录 目录摘要1.协方差矩阵推导2.关于 F的计算2.1 计算F的前四维关于四元数的状态方程2.2 计算F 的5-10维关于速度和位置的状态方程3.其他协方差的传播3.1 关于角增量偏差的协方差传播3.2 关于速度增量偏差的协方差传播3.3 关于地理坐标系地磁磁场矢量的协方差传播3.4…

【Vue基本指令】一.什么是Vue;二.Vue开发的方式;三.Vue的基本指令(重点)

目录 一.什么是Vue 1.前端技术的发展&#xff08;html、CSS、JavaScript&#xff09; &#xff08;1&#xff09;JQuery&#xff1a;是对JavaScript进行了封装&#xff0c;使得操作DOM、事件处理、动画处理、Ajax交互变得非常简洁、方便。是JavaScript的库。 &#xff08;&a…

《云原生》一文搞懂RocketMQ队列概述

目录 序 概念简述 一、客户端概念 1. Topic-主题 2.ConsumerGroup&#xff08;消费者组&#xff09; 概念一览图 二、消息传输模型 三、实践应用 1.配置文件 2.生产者 3.消费者 配置一览图 最后的话 序 接上一篇对rabbitMQ队列进行了梳理 《一文搞懂rabbitMQ消息…

shell技术

退出状态码 Shell 中运行的命令会使用0-255之间的整数值&#xff0c;作为退出状态码,并以此来告知shell该命令执行的状态。 通常情况下&#xff0c;约定0代表命令成功结束&#xff0c;非0代表程序非正常退出。 假如没有指定返回值&#xff0c;那么会用脚本的最后一个命令的执…

华为路由器配置笔记

路由器(Router),是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号,路由器工作在网络层,用来跨网段通信,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和…

巧用数据分析表达式,让数据指标创建更简单

实现数据业务一体化的指标分析 从零售系统进化史get 数据统计的需求变更 零售系统需要的数据统计需求 V1.0 只需要获取当日累计的销售额&#xff0c;于是店老板就用 Excel或者纸质的表格创建了一个表&#xff0c;表中包含销售的日期时间&#xff0c;销售的产品&#xff0c;销…

c语言的变量和指针,怎么理解?

学会应用指针是C语言程序员的分水岭&#xff0c;也是C程序员级别的试金石。 变量可以分为基础变量、数组变量、指针变量&#xff0c;其中数组变量非常特殊&#xff0c;可以进一步分为基础数组变量和指针数组变量&#xff0c;所以暂时不考虑数组变量。假设我们在32位计算机上工…

【云原生】k8s之pod基础(下)

内容预知 1.pod的镜像拉取策略 1.1 镜像拉取说明 1.2 镜像拉取的策略 1.3 镜像拉取策略的设置操作 &#xff08;1&#xff09;Never策略的使用 &#xff08;2&#xff09;IfNotPresent策略在本地无镜像的情况下使用 &#xff08;3&#xff09; IfNotPresent策略在本地有…

客观认识植物乳杆菌 (L. plantarum) 及其健康益处

人体消化系统包含大约几百到几千种不同的细菌种类&#xff0c;其丰度构成因人而异。 其中少数益生菌乳杆菌属&#xff0c;即嗜酸乳杆菌、植物乳杆菌、短乳杆菌、乳酸乳杆菌、干酪乳杆菌、保加利亚乳杆菌、发酵乳杆菌、鼠李糖乳杆菌特异性产生细胞外蛋白、胞外多糖、细菌素和脂磷…

信息安全治理-信息安全状态示例

声明 本文是学习github5.com 网站的报告而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 信息安全治理-信息安全状态示例 组织可以生成一个信息安全状态&#xff0c;并将其作为信息安全的沟通工具披露给利益相关者。 组织宜选择和决定信息安全状态的格…

Curve 分布式存储在 KubeSphere 中的实践

Curve 介绍 Curve 是网易开发的现代存储系统&#xff0c;目前支持文件存储 (CurveFS) 和块存储 (CurveBS)。现在它作为一个沙盒项目托管在 CNCF。 Curve 是一个高性能、轻量级操作、本地云的开源分布式存储系统。Curve 可以应用于 : 1) 主流云本地基础设施平台 OpenStack 和…