最近在工作中遇到了一个百度地图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实现实时轨迹动态展现的更多相关文章

  1. Android端百度地图API使用详解

    百度地图API简介 百度地图移动版API(Android)是一套基于Android设备的应用程序接口,通过该接口,可以轻松的访问百度服务和数据,构建功能丰富.交互性强的地图应用程序. 百度地图移动版A ...

  2. 【转载】Android端百度地图API使用详解

    转载地址:http://www.cnblogs.com/rocomp/p/4994110.html 百度地图API简介 百度地图移动版API(Android)是一套基于Android设备的应用程序接口 ...

  3. web端高德地图javascript API的调用

    [转载https://www.cnblogs.com/zimuzimu/p/6202244.html]web端高德地图javascript API的调用 关于第三放地图的使用,腾讯.百度.高德 具体怎 ...

  4. Java web与web gis学习笔记(二)——百度地图API调用

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  5. 【百度地图API】北京周边7日游——图标按路线轨迹行动

    原文:[百度地图API]北京周边7日游--图标按路线轨迹行动 任务描述: 春节就要来啦~酸奶小妹的妈妈要从遥远的重庆,来到北京过春节呢!酸奶小妹忙着给妈妈计划,北京周边的旅游线路.计划好路线后,就开始 ...

  6. 百度地图API,根据经纬度实现车辆移动轨迹绘制

    百度地图,实现车辆轨迹绘制 实现思路: 1.根据经纬度实现车辆轨迹绘制 2.使用百度地图API的两个覆盖物实现,Polyline(折线)绘制轨迹,Marker(图标)绘制小车图标 3.将每两个坐标间连 ...

  7. 百度地图API 绘制轨迹历史

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  8. 百度地图api描绘车辆历史轨迹图

    最近公司在做项目需需求:车辆定位后在地图显示历史轨迹的功能 一开始使用了google的地图api,但是发现会一直关闭,索性支持下国产,使用了百度地图api search方法把两个点连接成线后,会出现起 ...

  9. 使用百度地图API实现轨迹回放

    调用百度地图API实现路线的轨迹回放功能其实很简单,只要搞懂以下几点即可: 1.需要用Polyline方法先绘制好路线图 2.用Marker添加标注点 3.关键一步,通过结合定时器,使用Marker创 ...

随机推荐

  1. 【Powershell 教程】学习资源汇总

    [Powershell 教程]学习资源汇总 一.书籍教程 1.<Windows PowerShell实战指南>第3版 作者:[美] Don,Jones(道·琼斯),Jeffery,Hick ...

  2. 预分配——fallocate的前世今生

    最近比较懒,还是加班写点东西吧,不然过段时间又把这些整理的东西弄丢了. 写什么呢?写一些跟工作相关的吧!因为笔者从事多媒体录像相关的开发工作,因此常常涉及到优化写卡策略.提升写卡性能相关的方面的事情. ...

  3. JVM的类加载机制全面解析

    什么是类加载机制 JVM把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被JVM直接使用的Java类型,这就是JVM的类加载机制. 如果你对Class文件的结 ...

  4. Rust中的RefCell和内部可变性

    RefCell Rust在编译阶段会进行严格的借用规则检查,规则如下: 在任意给定时间,要么只能有一个可变引用,要么只能有多个不可变引用. 引用必须总是有效. 即在编译阶段,当有一个不可变值时,不能可 ...

  5. 应该如何刷 LeetCode?

    LeetCode 做笔记 对于遇到的每个题目,事后都做上标记:普通题目,难题.好题.此外,每个题目都分为以下几个步骤做好详细的笔记: 1. 原题目 2. 自己的第一遍解法 3. 网上好的解法 4. 自 ...

  6. jsp html 实现隐藏输入框,点击可以取消隐藏&&弹出输入框

    jsp代码: <script language="javascript" type="text/javascript"> function chg ...

  7. diff()函数的使用

    1.diff():返回略微迭代(lagged)的或滞后的不同(iterated diferences). > x<-cumsum(cumsum(1:10)) > x [1] 1 4 ...

  8. 如何重置IE浏览器

    1.退出所有程序,包括 Internet Explorer.单击“开始”.在“开始搜索”框中键入 inetcpl.cpl 命令,然后按回车键打开“Inetnet 选项”对话框. 2.单击“高级”选项卡 ...

  9. PAT乙级练习(1001)

    1001 害死人不偿命的(3n+1)猜想 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n + 1) 砍掉一半.这样一直反复砍下去,最 ...

  10. 饶有特色的 CSS3 展示横条.html