vue3实现,amap高德地图,沿着一系列经纬度绘制的Polyline,进行巡航动画。

1、安装
npm i @amap/amap-jsapi-loader --save
2、html中定义容器、操作按钮:
<div class="btns"> <a @click="startAnimation">开始动画</a> <a @click="pauseAnimation">暂停动画</a> <a @click="resumeAnimation">继续动画</a> <a @click="stopAnimation">停止动画</a> </div> <div id="map2"></div>
3、js代码如下,注释已经写得非常详细:
// 引入amap
import AMapLoader from '@amap/amap-jsapi-loader'
import { onMounted, toRefs } from 'vue'
// 获取车辆行驶轨迹经纬度的接口
import { getLocus } from '../api/index'
// 车辆图片
import carOnlineMoving from '@/assets/img/car_online_moving.png'
const props = defineProps({
clickData: {
type:Object, // 参数类型
default:()=>{
return {}
}
}
})
let map = null, polyline, marker, passedPolyline, lineArr = []
onMounted(() => {
initMap()
})
function initMap() {
AMapLoader.load({
key: 'asdfew23erfgdfgwjjuyqasdfdfsadf',
version: '2.0',
plugins: [
'AMap.MoveAnimation'
// 'AMap.Scale', //工具条,控制地图的缩放、平移等
// 'AMap.ToolBar', //比例尺,显示当前地图中心的比例尺
// 'AMap.Geolocation', //定位,提供了获取用户当前准确位置、所在城市的方法
// 'AMap.HawkEye', //鹰眼,显示缩略图
], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
}).then((AMap) => {
// 获取经纬度
getLocus({
// 采集轨迹的gps硬件设备ID
deviceId: 'sadfasfadsf'
}).then(res=>{
// 轨迹经纬度集合
lineArr = res.data
if(res.status === 200){
map = new AMap.Map('map2', {
zoom: 17,
center: [res.data[0][0], res.data[0][1]],
dragEnable: true,
scrollWheel: true,
doubleClickZoom: true,
keyboardEnable: true
})
map.setDefaultCursor('pointer')
var styleName = 'amap://styles/blue'
map.setMapStyle(styleName)
// 添加marker
createMaker(res.data[0][0],res.data[0][1])
}else{
console.error('获取失败')
}
})
}).catch((e) => {
console.log(e)
})
}
function createMaker(lng,lat) {
// 绘制轨迹
polyline = new AMap.Polyline({
map: map,
path: lineArr,
showDir:true,
strokeColor: "#28F", //线颜色
// strokeOpacity: 1, //线透明度
strokeWeight: 6, //线宽
// strokeStyle: "solid" //线样式
})
// 绘制车辆形式之后的轨迹
passedPolyline = new AMap.Polyline({
map: map,
strokeColor: "#AF5", //线颜色
strokeWeight: 6, //线宽
})
// 绘制车辆marker
marker = new AMap.Marker({
map: map,
position: [lng,lat],
offset: new AMap.Pixel(-26, -26),
icon: new AMap.Icon({
image: carOnlineMoving,
size: new AMap.Size(52, 52),
imageSize: new AMap.Size(52,52)
}),
})
// 车辆动画时,实时设置地图中心点
marker.on('moving', (e) => {
passedPolyline.setPath(e.passedPath)
map.setCenter(e.target.getPosition(),true)
})
map.setFitView()
}
function startAnimation() {
// moveAlong动画,沿着轨迹形式
marker.moveAlong(lineArr, {
// 每一段的时长
duration: 500,//可根据实际采集时间间隔设置
// JSAPI2.0 是否延道路自动设置角度在 moveAlong 里设置
autoRotation: true,
})
}
function pauseAnimation() {
marker.pauseMove()
}
function resumeAnimation() {
marker.resumeMove()
}
function stopAnimation() {
marker.stopMove()
}