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

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

时间:2023-01-07 17:37:08浏览次数:45  
标签:控件 map 地图 BMap var new data 百度


系列文章目录

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轨迹位置感知状态开发实战案例解析(百度地图jsAPI,包含缩放控件、点线覆盖物、弹窗、标注图标分类功能)_数据分析

项目说明

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

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

一、功能布局

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


基于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层叠样式表代码

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

.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);
}

标注展示

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

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进行多次的封装和调用。@漏刻有时


标签:控件,map,地图,BMap,var,new,data,百度
From: https://blog.51cto.com/lockdatav/5995676

相关文章

  • 如何在百度搜索到自己的博客
    如何在百度搜索到自己的博客 复制自己的csdn博客文章的网址然后进入到http://www.baidu.com/search/url_submit.html进行链接提交等百度后台审核过,然后百度一下你提......
  • 求职季,我是这样拿到百度AI Offer的!
    最近摸鱼期间,发现身为程序员的我被赋予了另一个身份“新生代农民工”,简直炸了!重点还官宣了,这就更加实锤了啊!我就想说,我们新生代农民工招谁惹谁了,我们能有什么坏心思呢?头都秃......
  • 第十二章 -------------------控件模板
    1.什么是控件模板?我看完这一节,就一个字难,太TM难了,难到上天,但是我还是要慢慢消化。当我写了一段代码关于按钮的; <ButtonMargin="10"Content="Test"Height="50"></Bu......
  • 用pageOffice控件实现 office 文档在线编辑Word 打开文档后在页面里触发事件
    OA办公中,业务需要编辑打开word文档后执行一些js操作怎么实现编辑打开word文档后执行一些js操作呢?2实现方法通过pageOffice实现简单的在线打开编辑word时,通过设置关......
  • 百度疫情大数据,12.6放开后
                     ......
  • 爬取百度翻译
    #破解百度翻译#阿贾克斯请求,局部刷新,对应fetch/XHR,最后的sug#学会查看请求,选择函数importosimportrequestsimportjsonpost_url='https://fanyi.baidu.com/sug'#......
  • 界面控件DevExpress WinForm——属于WinForm组件的MVVM框架
    DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风......
  • Unity小地图Minimap制作全面功能介绍篇
    本系列文章将讲述如何制作小地图。功能如下:  小地图的局部放大地图,缩小功能。小地图展开成为大地图,以及与大地图的互相切换  大地图的人物图标跟随角色旋转和移动 ......
  • Unity游戏副本地图点击图标移动功能
    本篇讲相同的功能即:点击地图中的一个位置,让图标瞬间移动到点击位置,同时3D场景中人物也可以抵达场景中对应的点击位置。如图:操作方法和之前一样:找到大地图的渲染的Rawimage。......
  • 百度一键Root授权管理完美卸载解决方案
    一直以来用百度一键Root,觉得其Root支持率还行。可是用着用着发现其越来越流氓了,先是推广告,到了2.4.7版本,直接把自己装入系统中,无法删除。经过一番研究终于解决了。参考......