1、高德地图web示例
最近要做一个根据用户车牌号查询用户定位和运动轨迹的功能,第一时间想到做web端的方便便于维护,且我们ios端是用h5框架编写的,也方便ios去使用,去查了一下高德地图,欸?这不就有现成的直接用吗。感慨一句真方便。如下图。
RPReplay_Final1564452712 (2).gif
怎么样,是不是超级方便?然后我们只要在app中的webview中打开它就可以了。开始动画,结束动画,选择时间统统交给web端去做,当然你也可以注入js来调用查询方法,随便你来定义啦。
2、高德地图示例代码
官网上就有详细的示例代码,这里贴上官网地址:高德地图轨迹回放示例,嫌麻烦没问题,代码都帮你们拷过来了。
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<title>轨迹回放</title>
<link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css"/>
<style>
html, body, #container {
height: 100%;
width: 100%;
}
.input-card .btn{
margin-right: 1.2rem;
width: 9rem;
}
.input-card .btn:last-child{
margin-right: 0;
}
</style>
</head>
<body>
<div id="container"></div>
<div class="input-card">
<h4>轨迹回放控制</h4>
<div class="input-item">
<input type="button" class="btn" value="开始动画" id="start" onclick="startAnimation()"/>
<input type="button" class="btn" value="暂停动画" id="pause" onclick="pauseAnimation()"/>
</div>
<div class="input-item">
<input type="button" class="btn" value="继续动画" id="resume" onclick="resumeAnimation()"/>
<input type="button" class="btn" value="停止动画" id="stop" onclick="stopAnimation()"/>
</div>
</div>
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值"></script>
<script>
var marker, lineArr = [[116.478935,39.997761],[116.478939,39.997825],[116.478912,39.998549],[116.478912,39.998549],[116.478998,39.998555],[116.478998,39.998555],[116.479282,39.99856],[116.479658,39.998528],[116.480151,39.998453],[116.480784,39.998302],[116.480784,39.998302],[116.481149,39.998184],[116.481573,39.997997],[116.481863,39.997846],[116.482072,39.997718],[116.482362,39.997718],[116.483633,39.998935],[116.48367,39.998968],[116.484648,39.999861]];
var map = new AMap.Map("container", {
resizeEnable: true,
center: [116.397428, 39.90923],
zoom: 17
});
marker = new AMap.Marker({
map: map,
position: [116.478935,39.997761],
icon: "https://webapi.amap.com/images/car.png",
offset: new AMap.Pixel(-26, -13),
autoRotation: true,
angle:-90,
});
// 绘制轨迹
var polyline = new AMap.Polyline({
map: map,
path: lineArr,
showDir:true,
strokeColor: "#28F", //线颜色
// strokeOpacity: 1, //线透明度
strokeWeight: 6, //线宽
// strokeStyle: "solid" //线样式
});
var passedPolyline = new AMap.Polyline({
map: map,
// path: lineArr,
strokeColor: "#AF5", //线颜色
// strokeOpacity: 1, //线透明度
strokeWeight: 6, //线宽
// strokeStyle: "solid" //线样式
});
marker.on('moving', function (e) {
passedPolyline.setPath(e.passedPath);
});
map.setFitView();
function startAnimation () {
marker.moveAlong(lineArr, 200);
}
function pauseAnimation () {
marker.pauseMove();
}
function resumeAnimation () {
marker.resumeMove();
}
function stopAnimation () {
marker.stopMove();
}
</script>
</body>
</html>
如上图,只写android,没接触过js的同学可能有点看不太懂,没问题,我来简单介绍一下,代码中的marker和lineArr分别代表了覆盖物和线路,这个marker可以直接定义,比如在高德地图app中就是那个蓝色的定位图标
定位图标就是这个玩意儿,在轨迹回放中呢,我们可以把他设计为一部车的形象,而lineArr就更好理解了,就是一个经纬度的数组,里面是车的行车路线的经纬度,然后可以调用new AMap.Polyline的方法来绘制一个行车轨迹,宾果!就是这么简单。
3、轨迹回放结合轨迹纠偏
因为合作方提供的坐标系担心不准确,所以尝试了一下高德自带的轨迹纠偏的api,轨迹纠偏接口可以将偏离道路的轨迹路径纠正到道路上,在地图上显示会看起来细节一点,比如说如下图
未纠偏红色和纠偏后蓝色对比可以看到,一般我们的点对点绘制,都是直来直去的,两个点之间转折很突兀,但是用高德的轨迹纠偏,只要传过去相应格式的坐标系,就会给你返回纠正后的坐标系,官方使用方法在这里高德地图轨迹纠偏,不知道为什么,我用了轨迹纠偏在高速路上的表现惨不忍睹,甚至没有原坐标系好,但是在城区的表现比原坐标好很多。
记录一下这次轨迹回放功能的实现,就写到这里吧。
网友评论