web端百度地图API实现实时轨迹动态展现
最近在工作中遇到了一个百度地图api中的难题,恐怕有的程序员可能也遇到过。就是实时定位并显示轨迹,网上大部分都是通过创建polyline对象贴到地图上。当然,百度地图的画线就是这样实现的,但是好多人会发现,如果数据量超过四五千的话,浏览器可能就要卡了,后面可能就直接因为浏览器内存不足直接崩溃。按理讲面对这么少的数据,百度地图肯定会考虑到这一点,所以肯定有解决的方法。下面将介绍本人的方法供大家参考:
1、数据准备
这方便的数据我是ajax请求从后台获取的就不说了。画线的话我们就得用到百度地图api中的polyline类了,因为我们是实时定位,以前的历史路径是存在,但是我们不能每次都要new一个polyline对象贴到地图上,所以就需要用到polyline的setPath(path: Array<Point>),我们把整条路径的数据全部塞进去就可以了。这里我用一个json格式的数组保存每个历史路径的所有路径数据,后面就是来数据更新数组再找到地图上相应的polyline对象塞进去就可以了。
var polylineArray = [];//此数组专门存储历史路径
var PolylineJson = {};
PolylineJson["Id"] = Id;//存储相应的polyline对象
PolylineJson ["PathArray"] = polylineArray ;
polylineArray.push(PolylineJson);
备注:Polyline是个覆盖物对象,可以和其他对象一样自定义属性的,比如在声明以后设置polyline的id属性直接用polyline.id=content就可以了。再例如:polyline.name 或 polyline.length等。覆盖物对象可以根据自己的需求自定义任何属性,取值的时候只需按这个字段取就可以了。
var polyline = new BMap.Polyline([ startPoint, endPoint ], {
strokeColor : color,
strokeWeight : weight,
strokeOpacity : opacity,
strokeStyle : style // 实线solid或虚线dashed
});
polyline.id = Id;
map.addOverlay(polyline);
2、路径更新
if(PolylineArray != ""){
for(var i = 0; i < PolylineArray.length; i++){
if(PolylineArray[i].Id == Id){//此条路径存在
var PathArray = PolylineArray[i].PathArray;
PathArray.push(endPoint);//更新数组中的数据
var allOverlay = map.getOverlays();// 获取地图上的覆盖物
for (var j = 0; j < allOverlay.length; j++) {
// 判断标注物是否是Polyline类型
if (allOverlay[j].toString() == "[object Polyline]") {
if (allOverlay[j].id == Id) {
allOverlay[j].setPath(PathArray);
break;
}else{//数组中存在,但地图上不存在
if(j == allOverlay.length - 1){
var polylineTemp = new BMap.Polyline(PathArray, {
strokeColor : color,
strokeWeight : weight,
strokeOpacity : opacity,
strokeStyle : style // 实线solid或虚线dashed
});
polylineTemp.id = Id;//为这条路径赋值唯一的id
map.addOverlay(polylineTemp); // 添加折线到地图上
}
}
}
}
break;
}else{//不存在
if(i == PolylineArray.length - 1){
var PathArray = [];
PathArray.push(startPoint);
PathArray.push(endPoint);
var polylineTemp = new BMap.Polyline(PathArray, {
strokeColor : color,
strokeWeight : weight,
strokeOpacity : opacity,
strokeStyle : style // 实线solid或虚线dashed
});
polylineTemp.id = Id;//为这条路径赋值唯一的id
map.addOverlay(polylineTemp); // 添加折线到地图上
var PolylineJson = {};
PolylineJson["Id"] = Id;
PolylineJson["PathArray"] = PathArray;
PolylineArray.push(Polyline);
break;
}
}
}
}else{//数组为空
var PathArray = [];
PathArray.push(startPoint);
PathArray.push(endPoint);
var polylineTemp = new BMap.Polyline(PathArray, {
strokeColor : color,
strokeWeight : weight,
strokeOpacity : opacity,
strokeStyle : style // 实线solid或虚线dashed
});
polylineTemp.id = Id;//为这条路径赋值唯一的id
map.addOverlay(polylineTemp); // 添加折线到地图上
var PolylineJson = {};
PolylineJson["Id"] = Id;
PolylineJson["PathArray"] = PathArray;
PolylineArray.push(Polyline);
}
备注:本方法在加载轻量级的数据还是可以的,不会使浏览器崩溃,如果每次实时定位加载许多路径数据,成百上千的那种,在加载的时候浏览器中地图卡一下是正常现象。
web端百度地图API实现实时轨迹动态展现的更多相关文章
- Android端百度地图API使用详解
百度地图API简介 百度地图移动版API(Android)是一套基于Android设备的应用程序接口,通过该接口,可以轻松的访问百度服务和数据,构建功能丰富.交互性强的地图应用程序. 百度地图移动版A ...
- 【转载】Android端百度地图API使用详解
转载地址:http://www.cnblogs.com/rocomp/p/4994110.html 百度地图API简介 百度地图移动版API(Android)是一套基于Android设备的应用程序接口 ...
- web端高德地图javascript API的调用
[转载https://www.cnblogs.com/zimuzimu/p/6202244.html]web端高德地图javascript API的调用 关于第三放地图的使用,腾讯.百度.高德 具体怎 ...
- Java web与web gis学习笔记(二)——百度地图API调用
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- 【百度地图API】北京周边7日游——图标按路线轨迹行动
原文:[百度地图API]北京周边7日游--图标按路线轨迹行动 任务描述: 春节就要来啦~酸奶小妹的妈妈要从遥远的重庆,来到北京过春节呢!酸奶小妹忙着给妈妈计划,北京周边的旅游线路.计划好路线后,就开始 ...
- 百度地图API,根据经纬度实现车辆移动轨迹绘制
百度地图,实现车辆轨迹绘制 实现思路: 1.根据经纬度实现车辆轨迹绘制 2.使用百度地图API的两个覆盖物实现,Polyline(折线)绘制轨迹,Marker(图标)绘制小车图标 3.将每两个坐标间连 ...
- 百度地图API 绘制轨迹历史
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 百度地图api描绘车辆历史轨迹图
最近公司在做项目需需求:车辆定位后在地图显示历史轨迹的功能 一开始使用了google的地图api,但是发现会一直关闭,索性支持下国产,使用了百度地图api search方法把两个点连接成线后,会出现起 ...
- 使用百度地图API实现轨迹回放
调用百度地图API实现路线的轨迹回放功能其实很简单,只要搞懂以下几点即可: 1.需要用Polyline方法先绘制好路线图 2.用Marker添加标注点 3.关键一步,通过结合定时器,使用Marker创 ...
随机推荐
- 计蒜客T1846AC记
查看原题: 原题地址 初步思路: 采用贪心法求解,贪心策略如下: 排序,优先买最便宜的. 累加总数ans 初步代码: (楼主评语:其实其他地方的编程实现不太重要,贪心策略才是问题) #include ...
- MySQL(学生表、教师表、课程表、成绩表)多表查询
1.表架构 student(sid,sname,sage,ssex) 学生表 course(cid,cname,tid) 课程表 sC(sid,cid,score) 成绩表 teacher(tid,t ...
- 转载 C#中DataTable中的Compute方法使用收集
原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...
- css多行文本溢出显示省略号(兼容ie)
在日常编写页面中,我们经常遇到内容行数过多时,需要出现 “...” 来处理.但是又要考虑IE浏览器或IE内核浏览器的兼容性. 普通实现方法: display: -webkit-box; -webkit ...
- 深入 .NET Core 基础 - 2:共享框架
深入 .NET Core 基础 - 2:共享框架 原文地址:https://natemcmaster.com/blog/2018/08/29/netcore-primitives-2/ 共享框架从 . ...
- 转:关于java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication的解决
在这个控制板中,出现了这个问题 java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication 虽然明显知道是 ...
- node - 流 浅析
概念 流(stream)是 Node.js 中处理流式数据的抽象接口. stream 模块用于构建实现了流接口的对象. Node.js 提供了多种流对象. 例如,HTTP 服务器的请求和 proces ...
- iOS开发-KVO的奥秘
转自:http://www.jianshu.com/p/742b4b248da9 序言 在iOS开发中,苹果提供了许多机制给我们进行回调.KVO(key-value-observing)是一种十分有趣 ...
- Xcode10.0: NO BUNDLE URL PRESENT
目录 解决方案 1.删除build, 重新运行, 没有work 2.删除node_modules, npm i, 重新运行, 没有work 3.删除端口占用 4.代理设置, 可能work了 解决方案 ...
- python实现十大核心算法(桶排没实例)
# author:sevenduke # 2019-06-11 # 一.交换排序 # 排序算法的温故:冒泡排序 def dubblesort(arr): for i in range(0, len(a ...