高德地图js api 轨迹回放 多人并且控制谁先播放
先附上图片:
一.数据部分
function startRun() { //动画方法
var ifr = document.getElementById('iframeRight');
var targetOrigin = '*';
var json = {
"data": [
{
"dname": "张三",
"dongHua": [
{
"lngX": "117.1419139142",
"latY": "39.1157409540",
"address": "",
"dTime": "2016-12-20 06:00"
},
{
"lngX": "117.181942",
"latY": "39.122237",
"address": "",
"dTime": "2016-12-20 06:30"
},
{
"lngX": "117.183078",
"latY": "39.121749",
"address": "",
"dTime": "2016-12-20 07:00"
}
]
},
{
"dname": "李四",
"dongHua": [
{
"lngX": "117.145848",
"latY": "39.125181",
"address": "",
"dTime": "2016-12-21 17:00"
},
{
"lngX": "117.163214",
"latY": "39.128871",
"address": "",
"dTime": "2016-12-21 17:30"
},
{
"lngX": "117.183853",
"latY": "39.126614",
"address": "",
"dTime": "2016-12-21 18:00"
}
]
}
]
}
var func = { name: "startRun", arg: json }; //传输name名称以及json串
var str = JSON.stringify(func); //将json对象 转成json字符串
ifr.contentWindow.postMessage(str, targetOrigin);
}
二.html部分
<div class="righttopdiv-Animation">
<div class="righttopdiv-row" style="text-align: center;">
<select id="select_AnimationPeople">
<!--<option value="0">张三</option>-->
</select>
</div>
<div class="righttopdiv-row" style="text-align: center;">
<select id="select_speed">
<option value="500">1X</option>
<option value="1500">2X</option>
<option value="2000">3X</option>
<option value="2500">4X</option>
<option value="3000">5X</option>
</select>
</div>
<div class="righttopdiv-row" οnclick="AnimationPlay(this)" style="text-align: center;" title="播 放">
播 放
</div>
<div class="righttopdiv-row" οnclick="AnimationPause(this)" style="text-align:center;" title="暂 停">
暂 停
</div>
<div class="righttopdiv-row" οnclick="AnimationResume(this)" style="text-align:center;" title="继 续">
继 续
</div>
<div class="righttopdiv-row" οnclick="AnimationStop(this)" style="text-align:center;" title="停 止">
停 止
</div>
<div class="righttopdiv-row" οnclick="AnimationClose()" style="text-align:center; border-right:none;" title="关 闭">
关 闭
</div>
</div>
三.js部分
//动画
function startRun(str) { //开始播放动画
mapObj.clearMap();
completeEventHandler(str);
mapObj.setFitView(); //适应地图至居中
$(".righttopdiv-Animation").show();
}
var AnimationMark_Top = [];
var AnimationLineArr_Top = [];
function completeEventHandler(str) {
var lngX = "";
var latY = "";
$.each(str.data, function (index1, item1) {
var index2 = index1 + 1;
var AnimationLineArr_1 = [];
//设置动画图标position的起点
var arr_first = GPS.gcj_encrypt(parseFloat(item1.dongHua[0].latY), parseFloat(item1.dongHua[0].lngX));
var firstlngX = arr_first.lon.toFixed(6);
var firstlatY = arr_first.lat.toFixed(6);
var AnimationMark_1 = new AMap.Marker({
map: mapObj,
position: [firstlngX, firstlatY],
icon: "images/latshishi2.png", //marker图标,直接传递地址url
//content: '<div class=\"sanjiao\">' + item1.dname + '</div>',
offset: new AMap.Pixel(-11, -10), //相对于基点的位置
autoRotation: true //根据线点自动转换方向
});
AnimationMark_Top.push(AnimationMark_1); //将加的
//向 select选项卡中 赋值 人名以及序号
$("#select_AnimationPeople").append("<option value=\"" + index1 + "\">" + item1.dname + "</option>");
//遍历 当前人的坐标点
$.each(item1.dongHua, function (index, item) {
lngX = parseFloat(item.lngX);
latY = parseFloat(item.latY);
var arr_dongHua = GPS.gcj_encrypt(latY, lngX);
lngX = arr_dongHua.lon.toFixed(6);
latY = arr_dongHua.lat.toFixed(6);
AnimationLineArr_1.push(new AMap.LngLat(lngX, latY));
var getTime = item.dTime; //截取时间
getTime = getTime.substring(getTime.length - 5, getTime.length);
//加上带有时间的图标标记
var marker_jz = new AMap.Marker({
map: mapObj,
content: '<div class=\"shequjz_donghua\"><div class=\"maplocation_red\">' + (index + 1) + '</div><div class=\"donghua_time\">' + getTime + '</div></div>', //content: '<div class=\"maplocation_red\">' + (j + 1) + '</div>',
position: new AMap.LngLat(lngX, latY),
offset: new AMap.Pixel(-8, -10) //相对于基点的位置
});
marker_jz.setMap(mapObj); //在地图上添加点
});
AnimationLineArr_Top.push(AnimationLineArr_1); //向总的数值 赋值
//console.log(AnimationLineArr_Top);
//绘制轨迹
var polyline = new AMap.Polyline({
map: mapObj,
path: AnimationLineArr_1,
strokeColor: "#f13323",//线颜色
strokeOpacity: 1,//线透明度
strokeWeight: 2,//线宽
strokeStyle: "solid",//线样式
});
});
}
//当选择人员时时,让动画暂定播放
$("#select_AnimationPeople").change(function () {
$.each(AnimationMark_Top, function (index, item) {
item.pauseMove(); //暂停动画播放
});
});
//当点击select速度值时,让动画暂定播放
$("#select_speed").change(function () {
$.each(AnimationMark_Top, function (index, item) {
item.pauseMove(); //暂停动画播放
});
});
//播放按钮
function AnimationPlay(obj) {
var getSpeed = $("#select_speed").val();
var getIndex = $("#select_AnimationPeople").val();
AnimationMark_Top[getIndex].moveAlong(AnimationLineArr_Top[getIndex], getSpeed);//开始轨迹回放
$(obj).addClass("righttopdiv-row-click").siblings(".righttopdiv-row").removeClass("righttopdiv-row-click");
}
//暂停播放
function AnimationPause(obj) {
var getIndex = $("#select_AnimationPeople").val();
AnimationMark_Top[getIndex].pauseMove(); //暂停轨迹回放
$(obj).addClass("righttopdiv-row-click").siblings(".righttopdiv-row").removeClass("righttopdiv-row-click");
}
//继续
function AnimationResume(obj) {
var getIndex = $("#select_AnimationPeople").val();
AnimationMark_Top[getIndex].resumeMove(); //继续动画
$(obj).addClass("righttopdiv-row-click").siblings(".righttopdiv-row").removeClass("righttopdiv-row-click");
}
//停止播放 //结束动画播放
function AnimationStop(obj) {
var getIndex = $("#select_AnimationPeople").val();
AnimationMark_Top[getIndex].stopMove(); //结束动画播放
$(obj).addClass("righttopdiv-row-click").siblings(".righttopdiv-row").removeClass("righttopdiv-row-click");
}
//关闭播放
function AnimationClose(obj) {
$(".righttopdiv-Animation").hide();
mapObj.clearMap();
}