使用百度地图API制作线路轨迹播放
1.使用百度地图API制作轨迹播放;
可应用于车辆跟踪、行驶线路回放、跑步行程的记录等地图应用场景,
1.1绘制静态轨迹图
获取多个轨迹点point(必须包含经度、纬度)
使用polyline对象依次连接相邻的2个点(注意polyline的个数比point的少1)
1.2绘制动态轨迹图(固定间隔时间)
每隔500毫秒读取一个轨迹点,实现a,b两个功能
a增加一条polyline
b将marker从先前的point移到当前点
主方法使用setTimeout方法迭代来实现动态循环
Polyline在每条迭代循环体中添加即可,marker的移动则可以通过2中方法来实现:
一、使用removeOverlay除去原marker并在当前point处添加新marker
这是当时做项目时想到的方法,由于先前绘制polyline时使用addOverlay的思维惯性,在绘制marker时也就继续使用了addOverlay做循环迭代。
window.run = function (){
var pts ={?????}//你获取到的一系列点的数组(通过gps或其他接口)
var paths = pts.length; //获得有几个点
var carMk = new BMap.Marker(pts[0],{icon:myIcon});
map.addOverlay(carMk);
i=0;
function removeMkPoint(i){
if(i < paths){//
setTimeout(function(){
i++;
map.removeOverlay(carMk);//清除前一个marker
removeMkPoint(i);
},100);
}
}
setTimeout(function(){
resetMkPoint(5);
},100)
});
}
setTimeout(function(){
run();
},1500);
二、使用marker的setPosition方法重新设置marker的位置
在项目完成后,我又读了一篇百度api的文档,发现官方demo中使用setPosition方法能很好地实现marker的移动功能
window.run = function (){
var pts ={?????}//你获取到的一系列点的数组(通过gps或其他接口)
var paths = pts.length; //获得有几个点
var carMk = new BMap.Marker(pts[0],{icon:myIcon});
map.addOverlay(carMk);
i=0;
function resetMkPoint(i){
carMk.setPosition(pts[i]);//重新设置marker的position
if(i < paths){
setTimeout(function(){
i++;
resetMkPoint(i);
},100);
}
}
setTimeout(function(){
resetMkPoint(5);
},100)
});
}
setTimeout(function(){
run();
},1500);
注意:marker的opts属性能自定义marker的icon(汽车、人等图标)、旋转方向、大小、偏移等等属性,另外setAnimation方法还能设置动画效果。
1.3绘制polyline
轨迹线路是由一个一个polyline首尾相连组合起来的,因此,只需要在每次添加marker时添加一个polyline即可,并且在下一轮迭代循环中不需要清除,每条polyline的首尾2个端点就是当前点和上一个时间段的点
var pts0,前一个点 var pts1当前点
var carPl=new BMap.Polyline([pts0,pts1],{strokeColor:'blue',strokeWeight:4,strokeOpacity:0.8});
map.addOverlay(carPl);
pts0=pts1;//每次添加polyline后当前点变为前一个点
1.4添加播放按钮控件控制轨迹播放
添加自定义的播放控件,这里需要使用prototype属性来返回对象类型原型的引用, 这里给出prototype的理解
例如:A.prototype = new B();
理解prototype不应把它和继承混淆。A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍。这里强调的是克隆而不是继承,其区别在于:A的prototype是B的实例,同时B的prototype也可能是A的实例。
A能使用B的方法和属性,当A、B中都有方法名为f的方法时,A的实例instance调用这个f方法(instance.f)会是A自生的f方法而不是B的f方法,如果A的实例instance想调用B的f方法,需要使用call方法来实现:先new一个B的实例var Binstance=new B(); Binstance.f.call(instance);
function PlayControl(){
// 默认停靠位置和偏移量
this.defaultAnchor = BMAP_ANCHOR_BOTTOM_RIGHT;
this.defaultOffset = new BMap.Size(10, 40);
}
// 通过JavaScript的prototype属性继承于BMap.Control
PlayControl.prototype = new BMap.Control();
// 自定义控件必须实现自己的initialize方法,并且将控件的DOM元素返回
// 在本方法中创建个input元素作为控件的容器,并将其添加到地图容器中
PlayControl.prototype.initialize = function(map){
// 创建一个DOM元素
var input = document.createElement("input");
input.id="playCtrl";
input.type="image";
input.src="data:image/play.png";
input.οnclick=startPlay();//startPlay为上一步开始执行setTimeout迭代
};
// 添加DOM元素到地图中
map.getContainer().appendChild(input);
// 将DOM元素返回
return input;
};
// 创建控件
var myPlayCtrl = new PlayControl();
// 添加到地图当中
map.addControl(myPlayCtrl);
1.5将播放按钮设计为可以单击切换播放和停止的按钮
定义一个变量var i=0,在onclick事件触发时,将i在0和1之间不停切换,根据i的值来判断执行开始播放方法和停止方法。
停止播放方法可以通过clearTimeout(timer)来实现(前提是在前面的开始播放方法中将setTimeout语句作为字符串赋值为timer),并使用removeOverlay来清除播放过程中出现的痕迹。
input.οnclick=function(){
if(i==0){
startPlay();//播放开始
input.src="data:image/pause.png";
i=1;
}else{
pausePlay();//播放停止
input.src="data:image/play.png";
i=0;
}
};
1.6添加播放速度控件
上一步添加了播放开关,还可以在此基础上添加播放速度的控件来调节播放的快慢
其方法与1.4中添加播放开关的方法类似,其中input的type为range(html 5中新的类型),通过读取range 的value,将value作为setTimeout的时间参数(作为参数传入播放方法),
注意:当滑动range,value发生改变时,要使播放停止,再次点击播放按钮时,播放方法读取新的value;
input.id="speedCtrl";
input.type="range";
input.max="1750";
input.min="250";
input.step="250";
input.value="1000";
var i=0;
input.οnchange=function(){
pausePlay();
}
总结:
作为一个从学校里刚走出来的非计算机专业的前端新手,实习中的第一次上手项目,就有独立使用百度地图API的机会实在幸运。从百度地图API的具体使用实践中,我学到了很多,除了百度地图API以外,还学到了包括prototype、bootstrap(模态框、datetimepicker、validation等插件)等等。
尽管有些不太完善的地方(例如:在infoWindow的content中不能使用bootstrap的模态框等),但百度地图API的功能仍然十分强大,值得广大新手学习。特别是随着移动互联网的快速发展以及各种带有gps定位功能的智能设备的爆发式普及,地图、定位类使用场景越来越多,地图API的使用需求也将越来越多。
为了更好地练习百度地图,我打算利用节假日空闲的时间使用百度地图制作一个小游戏练手,游戏大致构思如下:(未来会在博客中向大家展示!)
1.使用自定义marker作为游戏主角
2.使用自定义控件来操作主角
3.设置关卡或任务,
4.计算奖励或得分
5.设置障碍
先实现这几个初级功能需求,就可以使自己的游戏主角在自己的城市中行走了!
转载于:https://www.cnblogs.com/feleventh/p/4735361.html
使用百度地图API制作线路轨迹播放相关推荐
- 地图上制作线路的动画_使用百度地图API制作线路轨迹播放
1.使用百度地图API制作轨迹播放: 可应用于车辆跟踪.行驶线路回放.跑步行程的记录等地图应用场景, 1.1绘制静态轨迹图 获取多个轨迹点point(必须包含经度.纬度) 使用polyline对象依次 ...
- 百度地图API制作类似 百度地图的路线导航界面并实现简单的路线规划功能
之前我们讲了怎么在百度地图上设置Marker(如A点..) 和弹出框(跟随Marker的,Marker移动的时候也是会跟着移动的),接着又觉得百度地图自带的放大缩小不(fei)是(chang)很(de ...
- 百度地图API显示车辆运行轨迹并动画展示
百度地图api 版本:3.0 开发文档:http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference_3_0.html#a0b0 需求描述 项 ...
- 前端捕捉轨迹_web端百度地图API实现实时轨迹动态展现
最近在工作中遇到了一个百度地图api中的难题,恐怕有的程序员可能也遇到过.就是实时定位并显示轨迹,网上大部分都是通过创建polyline对象贴到地图上.当然,百度地图的画线就是这样实现的,但是好多人会 ...
- 利用百度地图API制作房产酒店地图
摘要: 想亲手制作一张酷讯.去哪儿.安居客.链接地产那样的房产.酒店地图麼?那赶快来学习吧.(以酷讯为例,如下图) 更多成功案例请点击:http://dev.baidu.com/wiki/map/in ...
- 百度地图路书实现轨迹播放,停止,暂停。可根据下拉框改变播放的速度。
代码参考 https://www.cnblogs.com/syj2016/p/5685294.html 代码贴上 html:<button id="run">开始< ...
- 使用百度地图api制作地图名片
调用:http://api.map.baidu.com/mapCard/setInformation.html 制作地图名片 注意:街道地址定位一下,如果不准确就拖动改变位置 然后点击开始制作 生成的 ...
- 百度地图API - 行车路线 轨迹
转自:http://hi.baidu.com/hackerbase/item/0a54b12d0005690e72863e3c <!DOCTYPE html> <html> ...
- 百度地图API自定义点路书,路书点击事件,路书速度动态改变
前一段时间研究百度地图路书,查了很多资料也看源码,总结了一下如下 代码中有三个图片我放在下面,自行下载重命名和代码里面的名字保持一致,并且同代码放在同一个目录里面,代码中注释也很详细,可自行copy ...
最新文章
- (转)软件测试的分类软件测试生命周期
- python两台电脑文件传输_python实现简单socket程序在两台电脑之间传输消息的方法...
- C# Httpclient编程
- BoW(词袋Bag of words)
- SQL Pass北京举办1周年活动(本次活动特别邀请到了来自微软的SQL Server大师何雷谈数据库职业规划)...
- NOIP2018 No regrets youth
- 机器学习 正则化(regularization)
- php导出数组到csv格式demo
- Java 2实用教程(第五版)
- Qt5.12 QML——TextMetrics字体长度的测量指标
- 单片机加减法计算器_单片机加法计算器程序
- 05导航指示-04树状导航栏-navlistview
- Java:MouseListener、MouseMotionListener监听器与MouseEvent事件
- linux tty字体,ArchLinux TTY 中文字体渲染
- DAU和MAU的分析
- OC 技术 原生地图(源码)
- 全球与中国体积视频软件市场深度研究分析报告
- TERMIN汤铭 FE1.1四端口USB2.0芯片
- ListView分页下载
- 剑未佩妥,出门已是江湖!聊聊2019学习和工作
热门文章
- 将一个指针 free 两次之后会发生什么?
- 深入理解Linux内存管理--目录导航
- Distributed Systems笔记-middlewares
- JZOJ 5906. 【NOIP2018模拟10.15】传送门 (portal)
- BZOJ 4553: [Tjoi2016Heoi2016]序列
- JZOJ 5263. 【NOIP2017模拟8.12A组】分手是祝愿
- android 代码加view,Android中将View添加至窗口的源码分析
- git本地ben远程分支_Git本地分支和远程分支关联
- 华南师范大学计算机学院重修,为什么说本科绩点低毁一生 大学重修可以刷绩点吗...
- win10无法连接wifi_手机连接WIFI但是无法上网?3个办法帮您解决!