使用百度地图API实现轨迹回放
调用百度地图API实现路线的轨迹回放功能其实很简单,只要搞懂以下几点即可:
1.需要用Polyline方法先绘制好路线图
2.用Marker添加标注点
3.关键一步,通过结合定时器,使用Marker创建的标注点实例的setPosition改变标注点位置,实现播放功能
代码分享,直接复制即可使用
- <!DOCTYPE html>
- <html>
- <head>
- <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Track</title>
- <style type="text/css">
- html{height:100%}
- body{height:100%;margin:0px;padding:0px}
- #controller{width:100%; border-bottom:3px outset; height:30px; filter:alpha(Opacity=100); -moz-opacity:1; opacity:1; z-index:10000; background-color:lightblue;}
- #container{height:100%}
- </style>
- <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=D2b4558ebed15e52558c6a766c35ee73"></script>
- <script type="text/javascript">
- //获取所有点的坐标
- var points = [
- new BMap.Point(114.00100, 22.550000), new BMap.Point(114.00130, 22.550000),
- new BMap.Point(114.00160, 22.550000), new BMap.Point(114.00200, 22.550000),
- new BMap.Point(114.00300, 22.550500), new BMap.Point(114.00400, 22.550000),
- new BMap.Point(114.00500, 22.550000), new BMap.Point(114.00505, 22.549800),
- new BMap.Point(114.00510, 22.550000), new BMap.Point(114.00515, 22.550000),
- new BMap.Point(114.00525, 22.550400), new BMap.Point(114.00537, 22.549500)
- ];
- var map; //百度地图对象
- var car; //汽车图标
- var label; //信息标签
- var centerPoint;
- var timer; //定时器
- var index = 0; //记录播放到第几个point
- var followChk, playBtn, pauseBtn, resetBtn; //几个控制按钮
- function init() {
- followChk = document.getElementById("follow");
- playBtn = document.getElementById("play");
- pauseBtn = document.getElementById("pause");
- resetBtn = document.getElementById("reset");
- //初始化地图,选取第一个点为起始点
- map = new BMap.Map("container");
- map.centerAndZoom(points[0], 15);
- map.enableScrollWheelZoom();
- map.addControl(new BMap.NavigationControl());
- map.addControl(new BMap.ScaleControl());
- map.addControl(new BMap.OverviewMapControl({isOpen: true}));
- //通过DrivingRoute获取一条路线的point
- var driving = new BMap.DrivingRoute(map);
- driving.search(new BMap.Point(114.00100, 22.550000), new BMap.Point(113.95100, 22.550000));
- driving.setSearchCompleteCallback(function() {
- //得到路线上的所有point
- points = driving.getResults().getPlan(0).getRoute(0).getPath();
- //画面移动到起点和终点的中间
- centerPoint = new BMap.Point((points[0].lng + points[points.length - 1].lng) / 2, (points[0].lat + points[points.length - 1].lat) / 2);
- map.panTo(centerPoint);
- //连接所有点
- map.addOverlay(new BMap.Polyline(points, {strokeColor: "black", strokeWeight: 5, strokeOpacity: 1}));
- //显示小车子
- label = new BMap.Label("", {offset: new BMap.Size(-20, -20)});
- car = new BMap.Marker(points[0]);
- car.setLabel(label);
- map.addOverlay(car);
- //点亮操作按钮
- playBtn.disabled = false;
- resetBtn.disabled = false;
- });
- }
- function play() {
- playBtn.disabled = true;
- pauseBtn.disabled = false;
- var point = points[index];
- if(index > 0) {
- map.addOverlay(new BMap.Polyline([points[index - 1], point], {strokeColor: "red", strokeWeight: 1, strokeOpacity: 1}));
- }
- label.setContent("经度: " + point.lng + "<br>纬度: " + point.lat);
- car.setPosition(point);
- index++;
- if(followChk.checked) {
- map.panTo(point);
- }
- if(index < points.length) {
- timer = window.setTimeout("play(" + index + ")", 200);
- } else {
- playBtn.disabled = true;
- pauseBtn.disabled = true;
- map.panTo(point);
- }
- }
- function pause() {
- playBtn.disabled = false;
- pauseBtn.disabled = true;
- if(timer) {
- window.clearTimeout(timer);
- }
- }
- function reset() {
- followChk.checked = false;
- playBtn.disabled = false;
- pauseBtn.disabled = true;
- if(timer) {
- window.clearTimeout(timer);
- }
- index = 0;
- car.setPosition(points[0]);
- map.panTo(centerPoint);
- }
- </script>
- </head>
- <body onload="init();">
- <div id="controller" align="center">
- <input id="follow" type="checkbox"><span style="font-size:12px;">画面跟随</span></input>
- <input id="play" type="button" value="播放" onclick="play();" disabled />
- <input id="pause" type="button" value="暂停" onclick="pause();" disabled />
- <input id="reset" type="button" value="重置" onclick="reset()" disabled />
- </div>
- <div id="container"></div>
- </body>
- </html>
使用百度地图API实现轨迹回放的更多相关文章
- 百度地图API 绘制轨迹历史
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 百度地图API二:根据标注点坐标范围计算显示缩放级别zoom自适应显示地图
原文:百度地图API二:根据标注点坐标范围计算显示缩放级别zoom自适应显示地图 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/liusaint1992/ ...
- 【百度地图API】北京周边7日游——图标按路线轨迹行动
原文:[百度地图API]北京周边7日游--图标按路线轨迹行动 任务描述: 春节就要来啦~酸奶小妹的妈妈要从遥远的重庆,来到北京过春节呢!酸奶小妹忙着给妈妈计划,北京周边的旅游线路.计划好路线后,就开始 ...
- 百度地图API,根据经纬度实现车辆移动轨迹绘制
百度地图,实现车辆轨迹绘制 实现思路: 1.根据经纬度实现车辆轨迹绘制 2.使用百度地图API的两个覆盖物实现,Polyline(折线)绘制轨迹,Marker(图标)绘制小车图标 3.将每两个坐标间连 ...
- 百度地图api描绘车辆历史轨迹图
最近公司在做项目需需求:车辆定位后在地图显示历史轨迹的功能 一开始使用了google的地图api,但是发现会一直关闭,索性支持下国产,使用了百度地图api search方法把两个点连接成线后,会出现起 ...
- web端百度地图API实现实时轨迹动态展现
最近在工作中遇到了一个百度地图api中的难题,恐怕有的程序员可能也遇到过.就是实时定位并显示轨迹,网上大部分都是通过创建polyline对象贴到地图上.当然,百度地图的画线就是这样实现的,但是好多人会 ...
- 记录开发基于百度地图API实现在地图上绘制轨迹并拾取轨迹对应经纬度的工具说明
前言: 最近一直在做数据可视化方面的工作,其中平面可视化没什么难度,毕竟已经有很多成熟的可供使用的框架,比如百度的echart.js,highcharts.js等.还有就是3D可视化了,整体来说难度也 ...
- 吐槽贴:百度地图 api 封装 的实用功能 [源码下载]
ZMap 类 功能介绍 ZMap 是学习百度地图 api 接口,开发基本功能后整的一个脚本类,本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐 ...
- 百度地图 api 功能封装类 (ZMap.js) 本地搜索,范围查找实例 [源码下载]
相关说明 1. 界面查看: 吐槽贴:百度地图 api 封装 的实用功能 [源码下载] 2. 功能说明: 百度地图整合功能分享修正版[ZMap.js] 实例源码! ZMap.js 本类方法功能大多使用 ...
随机推荐
- (转)一些牛人榜样,多看看他们写的东西(后续整理牛人的blog等)
http://blog.csdn.net/ajian005/article/details/7697761
- HDU 6030 Happy Necklace
矩阵快速幂. 因为任意素数长度都要满足,所以$3$必须满足,$3$一旦满足,其余的肯定满足,也就是说只要考虑字符串末尾两位即可,$dp$一下就可以算方案数了.$n$较大,可以矩阵加速. #includ ...
- 执行Shell脚本的4种方法及区别介绍(转)
原文地址: http://www.jb51.net/article/66824.htm 执行shell脚本有以下几种方式 ###1.相对路径方式,需先cd到脚本路径下 [root@banking tm ...
- 解释Crypto模块怎么就这么"皮"?No module named "Crypto"
https://www.cnblogs.com/fawaikuangtu123/p/9761943.html python版本:python3.6,系统:win7 1.pip install cryp ...
- Python return语句 函数返回值
return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天就来仔细的讲解一下. python 函数返回值 ...
- BZOJ4029 HEOI2015定价
贪心. 每次将最后一个非零位加一判断即可. 一开始想少了,只关心把最后一位变成5了,其实可以都变的. #include<bits/stdc++.h> using namespace std ...
- Tsinsen Palisection
建回文树. 正反建统计一种前缀和求出所有不相交的,用总数减去就是答案数. 在这里我们可以知道一个字符串中所有回文串的个数即为num数组之和(因为以一个节点为回文串结尾的字串都是唯一的) 也可以是cnt ...
- 2018ECfinal J. Philosophical Balance
2018ECfinal J. Philosophical Balance 题目大意: 给出一个字符串 \(s\) ,你需要给每一个 \(i\) 一个 \([0,1]\) 之间的权值 \(k_i\) , ...
- [BZOJ4009][HNOI2015]接水果(整体二分)
[HNOI2015]接水果 时间限制:60s 空间限制:512MB 题目描述 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The b ...
- 【bzoj1875】【JZYZOJ1354】[SDOI2009]HH去散步 矩阵快速幂 点边转换
http://172.20.6.3/Problem_Show.asp?id=1354 http://www.lydsy.com/JudgeOnline/problem.php?id=1875 题意: ...